mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-22 17:14:32 +01:00
1 line
7.5 MiB
1 line
7.5 MiB
{"version":3,"sources":["webpack://web-app/webpack/universalModuleDefinition","webpack://web-app/webpack/bootstrap","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inherits/inherits_browser.js","webpack://web-app/./kotlin-dce/wrapper.js","webpack://web-app/./kotlin-dce/arrayUtils.js","webpack://web-app/./kotlin-dce/callableReferenceUtils.js","webpack://web-app/./kotlin-dce/misc.js","webpack://web-app/./kotlin-dce/polyfills.js","webpack://web-app/./kotlin-dce/core.js","webpack://web-app/./kotlin-dce/markerFunctions.js","webpack://web-app/./kotlin-dce/conversions.js","webpack://web-app/./kotlin-dce/long.js","webpack://web-app/./kotlin-dce/rtti.js","webpack://web-app/./kotlin-dce/runtime/arrayUtils.kt","webpack://web-app/./kotlin-dce/runtime/Enum.kt","webpack://web-app/primitiveCompanionObjects.kt","webpack://web-app/./kotlin-dce/generated/_Arrays.kt","webpack://web-app/./kotlin-dce/generated/_Ranges.kt","webpack://web-app/./kotlin-dce/kotlin/UByte.kt","webpack://web-app/./kotlin-dce/kotlin/UInt.kt","webpack://web-app/./kotlin-dce/kotlin/UShort.kt","webpack://web-app/./kotlin-dce/Ranges.kt","webpack://web-app/./kotlin-dce/collections/Collections.kt","webpack://web-app/./kotlin-dce/collections/Maps.kt","webpack://web-app/./kotlin-dce/collections/Sets.kt","webpack://web-app/./kotlin-dce/text/StringNumberConversions.kt","webpack://web-app/./kotlin-dce/kotlin/UnsignedUtils.kt","webpack://web-app/./kotlin-dce/collections/Sequences.kt","webpack://web-app/./kotlin-dce/generated/_Collections.kt","webpack://web-app/./kotlin-dce/util/Preconditions.kt","webpack://web-app/./kotlin-dce/kotlin/collections.kt","webpack://web-app/./kotlin-dce/util/Standard.kt","webpack://web-app/./kotlin-dce/collections/Iterables.kt","webpack://web-app/./kotlin-dce/generated/_Sequences.kt","webpack://web-app/./kotlin-dce/generated/_Strings.kt","webpack://web-app/./kotlin-dce/kotlin/text/string.kt","webpack://web-app/./kotlin-dce/Iterators.kt","webpack://web-app/./kotlin-dce/ProgressionIterators.kt","webpack://web-app/./kotlin-dce/Progressions.kt","webpack://web-app/./kotlin-dce/Collections.kt","webpack://web-app/./kotlin-dce/Range.kt","webpack://web-app/./kotlin-dce/Unit.kt","webpack://web-app/./kotlin-dce/internal/progressionUtil.kt","webpack://web-app/./kotlin-dce/kotlin/builtins.kt","webpack://web-app/./kotlin-dce/kotlin/coroutines/CoroutineImpl.kt","webpack://web-app/./kotlin-dce/util/Result.kt","webpack://web-app/./kotlin-dce/coroutines/Continuation.kt","webpack://web-app/./kotlin-dce/kotlin/coroutines/intrinsics/IntrinsicsJs.kt","webpack://web-app/./kotlin-dce/kotlin/exceptions.kt","webpack://web-app/./kotlin-dce/kotlin/kotlin.kt","webpack://web-app/./kotlin-dce/kotlin/text/numberConversions_js-v1.kt","webpack://web-app/./kotlin-dce/generated/_ArraysJs.kt","webpack://web-app/./kotlin-dce/generated/_CollectionsJs.kt","webpack://web-app/./kotlin-dce/kotlin/collections/AbstractMutableCollection.kt","webpack://web-app/./kotlin-dce/kotlin/collections/AbstractMutableList.kt","webpack://web-app/./kotlin-dce/kotlin/collections/AbstractMutableMap.kt","webpack://web-app/./kotlin-dce/kotlin/collections/AbstractMutableSet.kt","webpack://web-app/./kotlin-dce/kotlin/collections/ArrayList.kt","webpack://web-app/./kotlin-dce/kotlin/collections/ArraySorting.kt","webpack://web-app/./kotlin-dce/kotlin/collections/EqualityComparator.kt","webpack://web-app/./kotlin-dce/kotlin/Comparator.kt","webpack://web-app/./kotlin-dce/kotlin/collections/HashMap.kt","webpack://web-app/./kotlin-dce/kotlin/collections/HashSet.kt","webpack://web-app/./kotlin-dce/kotlin/collections/InternalHashCodeMap.kt","webpack://web-app/./kotlin-dce/kotlin/collections/InternalStringMap.kt","webpack://web-app/./kotlin-dce/kotlin/collections/LinkedHashMap.kt","webpack://web-app/./kotlin-dce/kotlin/collections/LinkedHashSet.kt","webpack://web-app/./kotlin-dce/kotlin/console.kt","webpack://web-app/./kotlin-dce/kotlin/coroutines/SafeContinuationJs.kt","webpack://web-app/./kotlin-dce/kotlin/exceptionUtils.kt","webpack://web-app/./kotlin-dce/kotlin/json.kt","webpack://web-app/./kotlin-dce/kotlin/math.kt","webpack://web-app/./kotlin-dce/kotlin/numbers_js-v1.kt","webpack://web-app/./kotlin-dce/kotlin/numbers.kt","webpack://web-app/./kotlin-dce/kotlin/random/PlatformRandom.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/KClassImpl.kt","webpack://web-app/./kotlin-dce/kotlin/collections/InternalMap.kt","webpack://web-app/./kotlin-dce/kotlin/jsOperators.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/KTypeImpl.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/primitives.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/reflection.kt","webpack://web-app/./kotlin-dce/kotlin/regexp.kt","webpack://web-app/./kotlin-dce/kotlin/text/CharacterCodingExceptionJs.kt","webpack://web-app/./kotlin-dce/kotlin/text/StringBuilderJs.kt","webpack://web-app/./kotlin-dce/kotlin/text/char.kt","webpack://web-app/./kotlin-dce/kotlin/text/numberConversions.kt","webpack://web-app/./kotlin-dce/kotlin/text/regex.kt","webpack://web-app/./kotlin-dce/text/Strings.kt","webpack://web-app/./kotlin-dce/generated/_ComparisonsJs.kt","webpack://web-app/./kotlin-dce/kotlin/text/stringsCode.kt","webpack://web-app/./kotlin-dce/kotlin/text/utf8Encoding.kt","webpack://web-app/./kotlin-dce/kotlin/time/DurationUnit.kt","webpack://web-app/./kotlin-dce/kotlin/time/MonoTimeSource.kt","webpack://web-app/./kotlin-dce/kotlin/time/formatToDecimals.kt","webpack://web-app/./kotlin-dce/kotlinx/dom/Builders.kt","webpack://web-app/./kotlin-dce/collections/AbstractCollection.kt","webpack://web-app/./kotlin-dce/collections/AbstractList.kt","webpack://web-app/./kotlin-dce/collections/AbstractMap.kt","webpack://web-app/./kotlin-dce/collections/AbstractSet.kt","webpack://web-app/./kotlin-dce/collections/ArrayDeque.kt","webpack://web-app/./kotlin-dce/collections/IndexedValue.kt","webpack://web-app/./kotlin-dce/collections/Iterators.kt","webpack://web-app/./kotlin-dce/collections/MapWithDefault.kt","webpack://web-app/./kotlin-dce/collections/MutableCollections.kt","webpack://web-app/./kotlin-dce/collections/ReversedViews.kt","webpack://web-app/./kotlin-dce/collections/SequenceBuilder.kt","webpack://web-app/./kotlin-dce/comparisons/Comparisons.kt","webpack://web-app/./kotlin-dce/coroutines/ContinuationInterceptor.kt","webpack://web-app/./kotlin-dce/coroutines/CoroutineContext.kt","webpack://web-app/./kotlin-dce/coroutines/CoroutineContextImpl.kt","webpack://web-app/./kotlin-dce/coroutines/intrinsics/Intrinsics.kt","webpack://web-app/./kotlin-dce/properties/ObservableProperty.kt","webpack://web-app/./kotlin-dce/random/Random.kt","webpack://web-app/./kotlin-dce/properties/Interfaces.kt","webpack://web-app/./kotlin-dce/random/XorWowRandom.kt","webpack://web-app/./kotlin-dce/ranges/Ranges.kt","webpack://web-app/./kotlin-dce/reflect/KTypeProjection.kt","webpack://web-app/./kotlin-dce/reflect/KVariance.kt","webpack://web-app/./kotlin-dce/text/Appendable.kt","webpack://web-app/./kotlin-dce/text/Char.kt","webpack://web-app/./kotlin-dce/text/Indent.kt","webpack://web-app/./kotlin-dce/text/regex/MatchResult.kt","webpack://web-app/./kotlin-dce/time/Duration.kt","webpack://web-app/./kotlin-dce/time/DurationUnit.kt","webpack://web-app/./kotlin-dce/time/TimeSource.kt","webpack://web-app/./kotlin-dce/text/StringBuilder.kt","webpack://web-app/./kotlin-dce/time/TimeSources.kt","webpack://web-app/./kotlin-dce/time/measureTime.kt","webpack://web-app/./kotlin-dce/util/Lazy.kt","webpack://web-app/./kotlin-dce/util/Tuples.kt","webpack://web-app/./kotlin-dce/kotlin/ULong.kt","webpack://web-app/./kotlin-dce/experimental/bitwiseOperations.kt","webpack://web-app/./kotlin-dce/kotlin/UIntRange.kt","webpack://web-app/./kotlin-dce/kotlin/UIterators.kt","webpack://web-app/./kotlin-dce/kotlin/ULongRange.kt","webpack://web-app/./kotlin-dce/kotlin/UProgressionUtil.kt","webpack://web-app/./kotlin-dce/kotlin/UStrings.kt","webpack://web-app/./kotlin-dce/generated/_Maps.kt","webpack://web-app/./kotlin-dce/generated/_Sets.kt","webpack://web-app/./kotlin-dce/kotlin/reflection_js-v1.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/JsClass.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/KTypeHelpers.kt","webpack://web-app/./kotlin-dce/kotlin/throwableExtensions.kt","webpack://web-app/./kotlin-dce/kotlin/MathH.kt","webpack://web-app/./kotlin-dce/kotlin/coroutines/js/internal/EmptyContinuation.kt","webpack://web-app/./kotlin-dce/util/DeepRecursive.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/safe-buffer/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/process/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/bn.js/lib/bn.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/buffer/index.js","webpack://web-app/(webpack)/buildin/global.js","webpack://web-app/../../../../../common/src/Delay.kt","webpack://web-app/../../../../../common/src/EventLoop.common.kt","webpack://web-app/../../../../../common/src/flow/SharedFlow.kt","webpack://web-app/../../../../../common/src/internal/LockFreeTaskQueue.kt","webpack://web-app/../../../../../js/src/JSDispatcher.kt","webpack://web-app/../../../../../common/src/AbstractCoroutine.kt","webpack://web-app/../../../../../common/src/Await.kt","webpack://web-app/../../../../../common/src/Builders.common.kt","webpack://web-app/../../../../../common/src/CancellableContinuation.kt","webpack://web-app/../../../../../common/src/CancellableContinuationImpl.kt","webpack://web-app/../../../../../atomicfu/src/commonMain/kotlin/kotlinx/atomicfu/AtomicFU.common.kt","webpack://web-app/../../../../../common/src/CompletableDeferred.kt","webpack://web-app/../../../../../common/src/CompletionState.kt","webpack://web-app/../../../../../common/src/CoroutineDispatcher.kt","webpack://web-app/../../../../../common/src/CoroutineExceptionHandler.kt","webpack://web-app/../../../../../common/src/CompletionHandler.common.kt","webpack://web-app/../../../../../common/src/CoroutineName.kt","webpack://web-app/../../../../../common/src/CoroutineScope.kt","webpack://web-app/../../../../../common/src/CoroutineStart.kt","webpack://web-app/../../../../../common/src/Job.kt","webpack://web-app/../../../../../common/src/JobSupport.kt","webpack://web-app/../../../../../js/src/internal/LinkedList.kt","webpack://web-app/../../../../../common/src/MainCoroutineDispatcher.kt","webpack://web-app/../../../../../common/src/NonCancellable.kt","webpack://web-app/../../../../../common/src/Supervisor.kt","webpack://web-app/../../../../../common/src/Timeout.kt","webpack://web-app/../../../../../common/src/channels/AbstractChannel.kt","webpack://web-app/../../../../../common/src/channels/Channel.kt","webpack://web-app/../../../../../common/src/channels/ArrayBroadcastChannel.kt","webpack://web-app/../../../../../common/src/channels/ArrayChannel.kt","webpack://web-app/../../../../../common/src/channels/BufferOverflow.kt","webpack://web-app/../../../../../common/src/internal/InlineList.kt","webpack://web-app/../../../../../common/src/channels/Broadcast.kt","webpack://web-app/./kotlin-dce/util/HashCode.kt","webpack://web-app/../../../../../common/src/channels/ChannelCoroutine.kt","webpack://web-app/../../../../../common/src/channels/Channels.common.kt","webpack://web-app/../../../../../common/src/channels/ConflatedBroadcastChannel.kt","webpack://web-app/../../../../../common/src/channels/LinkedListChannel.kt","webpack://web-app/../../../../../common/src/channels/Produce.kt","webpack://web-app/../../../../../common/src/flow/internal/SafeCollector.common.kt","webpack://web-app/../../../../../common/src/flow/Builders.kt","webpack://web-app/../../../../../common/src/flow/Channels.kt","webpack://web-app/../../../../../common/src/flow/Migration.kt","webpack://web-app/../../../../../common/src/flow/SharingStarted.kt","webpack://web-app/../../../../../common/src/flow/StateFlow.kt","webpack://web-app/../../../../../common/src/flow/internal/AbstractSharedFlow.kt","webpack://web-app/../../../../../common/src/flow/internal/ChannelFlow.kt","webpack://web-app/../../../../../common/src/flow/internal/Combine.kt","webpack://web-app/../../../../../common/src/flow/internal/FlowCoroutine.kt","webpack://web-app/../../../../../common/src/flow/internal/Merge.kt","webpack://web-app/../../../../../common/src/internal/Symbol.kt","webpack://web-app/../../../../../atomicfu/src/jsMain/kotlin/kotlinx/atomicfu/AtomicFU.kt","webpack://web-app/../../../../../common/src/channels/ConflatedChannel.kt","webpack://web-app/../../../../../common/src/flow/operators/Merge.kt","webpack://web-app/../../../../../js/src/internal/Synchronized.kt","webpack://web-app/../../../../../common/src/flow/internal/FlowExceptions.common.kt","webpack://web-app/../../../../../common/src/flow/terminal/Collect.kt","webpack://web-app/../../../../../common/src/flow/terminal/Reduce.kt","webpack://web-app/../../../../../common/src/internal/ThreadSafeHeap.kt","webpack://web-app/../../../../../common/src/selects/Select.kt","webpack://web-app/../../../../../common/src/flow/internal/NopCollector.kt","webpack://web-app/../../../../../common/src/flow/operators/Emitters.kt","webpack://web-app/../../../../../common/src/flow/operators/Share.kt","webpack://web-app/../../../../../common/src/flow/operators/Zip.kt","webpack://web-app/../../../../../common/src/internal/ConcurrentLinkedList.kt","webpack://web-app/../../../../../common/src/internal/DispatchedContinuation.kt","webpack://web-app/../../../../../common/src/internal/DispatchedTask.kt","webpack://web-app/../../../../../common/src/internal/OnUndeliveredElement.kt","webpack://web-app/../../../../../common/src/internal/Scopes.kt","webpack://web-app/../../../../../common/src/intrinsics/Undispatched.kt","webpack://web-app/../../../../../js/src/Runnable.kt","webpack://web-app/../../../../../common/src/selects/SelectUnbiased.kt","webpack://web-app/../../../../../common/src/selects/WhileSelect.kt","webpack://web-app/../../../../../common/src/sync/Mutex.kt","webpack://web-app/../../../../../common/src/sync/Semaphore.kt","webpack://web-app/../../../../../common/src/flow/operators/Limit.kt","webpack://web-app/../../../../../common/src/flow/operators/Transform.kt","webpack://web-app/../../../../../common/src/flow/terminal/Collection.kt","webpack://web-app/../../../../../common/src/flow/terminal/Count.kt","webpack://web-app/../../../../../common/src/internal/ArrayQueue.kt","webpack://web-app/../../../../../common/src/internal/Atomic.kt","webpack://web-app/../../../../../common/src/intrinsics/Cancellable.kt","webpack://web-app/../../../../../js/src/CompletionHandler.kt","webpack://web-app/../../../../../js/src/CoroutineContext.kt","webpack://web-app/./kotlin-dce/kotlin/jsTypeOf.kt","webpack://web-app/../../../../../js/src/CoroutineExceptionHandlerImpl.kt","webpack://web-app/../../../../../js/src/Debug.kt","webpack://web-app/../../../../../js/src/Dispatchers.kt","webpack://web-app/../../../../../js/src/EventLoop.kt","webpack://web-app/../../../../../js/src/Promise.kt","webpack://web-app/../../../../../js/src/Window.kt","webpack://web-app/../../../../../js/src/internal/CopyOnWriteList.kt","webpack://web-app/../../../../../js/src/Exceptions.kt","webpack://web-app/../../../../../js/src/SchedulerTask.kt","webpack://web-app/../../../../../js/src/flow/internal/FlowExceptions.kt","webpack://web-app/../../../../../js/src/flow/internal/SafeCollector.kt","webpack://web-app/../../../../../js/src/internal/Concurrent.kt","webpack://web-app/../../../../../js/src/internal/LocalAtomics.kt","webpack://web-app/../../../../../js/src/internal/ProbesSupport.kt","webpack://web-app/../../../../../js/src/internal/StackTraceRecovery.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/minimalistic-assert/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/utils.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/utils.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/node_modules/css-in-js-utils/lib/isPrefixedValue.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ByteChannelSequential.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/charsets/Encoding.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/bits/MemoryPrimitivesJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/InputArrays.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Buffers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/internal/Require.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ByteWriteChannel.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ChannelLittleEndian.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/Coroutines.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ReadSession.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/WriterSession.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/internal/Numbers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/bits/MemoryPrimitives.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/bits/PrimiteArrays.kt","webpack://web-app/./kotlin-dce/generated/_UArrays.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/bits/MemoryFactoryJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/AbstractInput.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ByteChannelCtor.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Packet.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/ByteReadChannel.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Builder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Output.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Buffer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/bits/MemoryJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/PacketDirect.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Input.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/internal/UTF8.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/AbstractOutput.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/BufferPrimitives.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/BufferCompatibility.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/BufferFactory.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/bits/ByteOrder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/BytePacketBuilder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/ByteReadPacket.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/InputPrimitives.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/OutputPrimitives.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Preview.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Scanner.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Strings.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/internal/ChunkBuffer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/internal/Unsafe.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/errors/Errors.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/internal/AwaitingSlot.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/internal/SequentialCopyTo.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/pool/Pool.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/ByteChannelJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/ByteChannelSequentialBaseSharedStateJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/ConditionJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/bits/ByteOrderJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/ExceptionUtilsJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/NativeUtilsJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/bits/PrimitiveArraysJs.kt","webpack://web-app/./kotlin-dce/org.w3c/org.khronos.webgl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/charsets/CharsetJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/js/TextDecoders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/js/Decoder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/charsets/DecodeBuffer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/charsets/ISO88591.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/IoBufferJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/ByteOrderJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/ByteReadPacket.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/CloseableJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/InputArraysJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/concurrent/SharedJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/InputJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/AbstractOutputSharedStateJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/AbstractInputSharedStateJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/BufferSharedStateJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/ScannerJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/OutputJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/PacketJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/js/TextDecoder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/core/StringsJS.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/errors/IOException.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/js/TextDecoderFallback.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/js/src/io/ktor/utils/io/pool/DefaultPool.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/cipher-base/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/events/events.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/string_decoder/lib/string_decoder.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/_stream_duplex.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Codecs.kt","webpack://web-app/./kotlin-dce/text/regex/RegexExtensions.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Text.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-io/common/src/io/ktor/utils/io/core/Closeable.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/ContentDisposition.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/ApplicationResponseProperties.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/CacheControl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HeaderValueWithParameters.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/ContentRange.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/ContentTypes.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Cookie.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Headers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpHeaderValueParser.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpHeaders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpMessageProperties.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpMethod.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpProtocolVersion.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpStatusCode.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/HttpUrlEncoded.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Parameters.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/LinkHeader.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Query.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/Ranges.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/URLBuilder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/URLParser.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/URLProtocol.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/URLUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/auth/HeaderValueEncoding.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/auth/HttpAuthHeader.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/auth/AuthScheme.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/content/ByteArrayContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/content/CachingOptions.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/content/Multipart.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/content/OutgoingContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/parsing/Debug.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/parsing/GrammarBuilder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/parsing/ParserDsl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/parsing/regex/RegexParserGenerator.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/websocket/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/js/src/io/ktor/http/URLBuilderJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/content/TextContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/FileContentType.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/DateUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/common/src/io/ktor/http/IpParser.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/randombytes/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/hash.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://web-app/./kotlin-dce/kotlin-wrappers-kotlin-extensions-jsLegacy.js?a379","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/store/SimpleBootstrapper.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/store/StoreEventType.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/store/StoreFactory.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/utils/MainThreadAssert.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/utils/internal/AtomicExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Logs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/utils/internal/MainThreadAssert.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/jsMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/jsMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Logs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/jsMain/kotlin/com/arkivanov/mvikotlin/utils/internal/MainThreadAssert.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/utils-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/ByteChannels.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/CoroutinesUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Ranges.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Base64.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/CaseInsensitiveMap.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/CaseInsensitiveSet.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Charset.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/DelegatingMutableSet.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Annotations.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Attributes.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Bytes.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Crypto.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Encoders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/NonceManager.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/StringValues.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/cio/Readers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/Lock.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/ConcurrentCollection.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/ConcurrentList.kt","webpack://web-app/../../../../../atomicfu/src/jsMain/kotlin/kotlinx/atomicfu/locks/Synchronized.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/ConcurrentMap.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/ConcurrentListSlice.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/ConcurrentMapKeys.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/ConcurrentMapValues.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/ForwardListIterator.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/ForwardListNode.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/MapNode.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/MutableMapEntries.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/SharedForwardList.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/date/Date.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/collections/internal/SharedList.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/DebugPipelineContext.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/PhaseContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/date/GMTDateParser.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/StackTraceRecover.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/PipelinePhaseRelation.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/StackWalkingFailed.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/StackWalkingFailedFrame.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/CoroutinesUtilsJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/common/src/io/ktor/util/pipeline/SuspendFunctionGun.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/AttributesJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/CollectionsJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/PlatformUtilsJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/StackFramesJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/date/DateJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/network/NetworkAddressJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-utils/js/src/io/ktor/util/CryptoJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/create-hash/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/core-util-is/lib/util.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/buffer-xor/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/common.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/DownloadRecord.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/AllPlatforms.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/CorsProxy.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/DownloadObject.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/DownloadResult.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/PlatformQueryResult.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/YoutubeTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/Artist.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/CustomArtworks.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaAlbum.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaArtistDetails.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaArtistTracks.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaPlaylist.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaSong.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/GaanaTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/Genre.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/gaana/Tags.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Album.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Artist.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Copyright.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Followers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Image.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/LinkedTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/PagingObjectPlaylistTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/PagingObjectTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Playlist.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/PlaylistTrack.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Source.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/TokenData.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/Track.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/spotify/UserPublic.kt","webpack://web-app/./kotlin-dce/properties/Delegates.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/DefaultComponentContext.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/DefaultRouterFactory.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/NavigatorExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/RouterState.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/backpressed/BackPressedDispatcher.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/backpressed/BackPressedDispatcherImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/instancekeeper/InstanceKeeperDispatcher.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/instancekeeper/InstanceKeeperDispatcherImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/Lifecycle.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/LifecycleRegistry.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/LifecycleRegistryExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/LifecycleRegistryImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/MergedLifecycle.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterEntry.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterEntryExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterEntryFactoryImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/LifecycleExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterStack.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/StackHolderImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/instancekeeper/InstanceKeeperExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/RouterFactory.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/lifecycle/DefaultLifecycleCallbacks.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/RouterEntryFactory.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/StackNavigatorImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/statekeeper/ParcelableContainer.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/statekeeper/ParcelableContainerExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/statekeeper/StateKeeperDispatcher.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/statekeeper/StateKeeperDispatcherImpl.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/value/MutableValue.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/value/MutableValueBuilder.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/statekeeper/StateKeeperExt.kt","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/value/Value.kt","webpack://web-app/../../../../../decompose/src/nonAndroidMain/kotlin/com/arkivanov/decompose/statekeeper/ParcelableContainerImpl.kt","webpack://web-app/../../../../../decompose/src/nonNativeMain/kotlin/com/arkivanov/decompose/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/cache/HttpCacheEntry.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/websocket/WebSockets.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClient.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/call/HttpClientCall.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/engine/HttpClientEngineBase.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/engine/ProxyConfig.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/call/SavedCall.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/call/TypeInfo.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/call/utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/engine/HttpClientEngine.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/engine/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/call/TypeInfoJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/DefaultRequest.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/DefaultResponseValidation.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/DefaultTransform.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/ExpectSuccess.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpCallValidator.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpClientFeature.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpPlainText.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpRedirect.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpRequestLifecycle.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpSend.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/HttpTimeout.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/cookies/HttpCookies.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/observer/DelegatedCall.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/observer/ResponseObserver.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/features/websocket/builders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/statement/HttpStatement.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/ClientUpgradeContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/DefaultHttpRequest.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/HttpRequest.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/buildersWithUrl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/forms/formBuilders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/forms/formDsl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/HttpRequestPipeline.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/builders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/forms/FormDataContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/statement/DefaultHttpResponse.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/statement/HttpResponsePipeline.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/request/utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/response/Migration.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/statement/HttpResponse.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/statement/Readers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/utils/CacheControl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/utils/Content.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/network/sockets/TimeoutExceptionsCommon.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/utils/headers.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/JsClientEngine.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/JsUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/compatibility/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/ReadableStream.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/browser/BrowserFetch.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/common/src/io/ktor/client/utils/SharedCollections.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/HttpClientJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/HttpClientEngineJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/ProxyConfigJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/Js.kt","webpack://web-app/./kotlin-dce/org.w3c/org.w3c.fetch.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/compatibility/DomDefinitions.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/engine/js/node/NodeFetch.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/features/DefaultTransformJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-core/js/src/io/ktor/client/features/websocket/JsWebSocketSession.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/process-nextick-args/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/aes.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/evp_bytestokey/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curve/base.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/parse-asn1/index.js","webpack://web-app/./kotlin-dce/kotlin-wrappers-kotlin-react-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/ObserverBuilder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx/src/jsMain/kotlin/com/arkivanov/mvikotlin/rx/ObserverBuilder.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/module/Module.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/definition/Definitions.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/TokenStore.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/JsonElementBuilders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/DI.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/scope/Scope.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/Dir.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/FetchPlatformQueryResult.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/gaana/GaanaRequests.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/providers/GaanaProvider.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/providers/SpotifyProvider.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/providers/YoutubeMp3.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/providers/YoutubeMusic.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/spotify/SpotifyAuth.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/spotify/SpotifyRequests.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/utils/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/commonMain/kotlin/com/shabinder/common/di/youtubeMp3/Yt1sMp3.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/jsMain/kotlin/com/shabinder/common/di/WebActual.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/jsMain/kotlin/com/shabinder/common/di/WebDir.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/jsMain/kotlin/com/shabinder/common/di/WebPicture.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/dependency-injection/src/jsMain/kotlin/com/shabinder/common/di/YoutubeProvider.kt","webpack://web-app/./kotlin-dce/kotlin-wrappers-kotlin-extensions-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/md5.js/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/util-deprecate/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/ripemd160/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/readable-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/_stream_writable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des/cipher.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/index.js","webpack://web-app/(webpack)/buildin/module.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/brorand/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-rsa/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curves.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/safer-buffer/safer.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/base/node.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/constants/der.js","webpack://web-app/../../../../../kermit/src/commonMain/kotlin/co/touchlab/kermit/CommonLogger.kt","webpack://web-app/../../../../../kermit/src/commonMain/kotlin/co/touchlab/kermit/Kermit.kt","webpack://web-app/../../../../../kermit/src/commonMain/kotlin/co/touchlab/kermit/Logger.kt","webpack://web-app/../../../../../kermit/src/commonMain/kotlin/co/touchlab/kermit/Severity.kt","webpack://web-app/../../../../../kermit/src/jsMain/kotlin/co/touchlab/kermit/ThrowableStringProvider.kt","webpack://web-app/../../../../../kermit/src/commonMain/kotlin/co/touchlab/kermit/ThrowableStringProvider.kt","webpack://web-app/./kotlin-dce/kotlin/reflect/AssociatedObjects.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/PolymorphicSerializer.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/SealedSerializer.kt","webpack://web-app/./kotlin-dce/collections/Grouping.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/SerializationException.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/Serializers.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/Platform.common.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/descriptors/SerialDescriptor.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/descriptors/SerialDescriptors.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/descriptors/SerialKinds.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/PluginGeneratedSerialDescriptor.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/encoding/AbstractDecoder.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/encoding/AbstractEncoder.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/encoding/Decoding.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/CollectionDescriptors.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/CollectionSerializers.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/Enums.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/InlineClassDescriptor.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/InlineClasses.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/encoding/Encoding.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/NoOpEncoder.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/NullableSerializer.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/ObjectSerializer.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/PrimitiveArraysSerializers.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/PluginHelperInterfaces.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/Primitives.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/Tagged.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/Tuples.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/modules/SerializersModule.kt","webpack://web-app/../../../../../core/jsMain/src/kotlinx/serialization/Serializers.kt","webpack://web-app/../../../../../core/jsMain/src/kotlinx/serialization/internal/Platform.kt","webpack://web-app/../../../../../core/commonMain/src/kotlinx/serialization/internal/JsonInternalDependencies.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/api.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/attributes.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/delegating-map.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-enums.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-a.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-b.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-d.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-f.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-h.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-i.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-n.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-tags-s.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/htmltag.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/stream.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/jsMain/kotlin/dom-js.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-attr-traits.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/jsMain/kotlin/generated/gen-event-attrs-js.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/src/commonMain/kotlin/generated/gen-attributes.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/stylis/stylis.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react-is/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/memoize-one/dist/memoize-one.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/object-assign/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/BehaviorSubject.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/PublishSubject.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/DisposableBuilder.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/ThreadLocalSubject.kt","webpack://web-app/collections/Sets.kt","webpack://web-app/collections/Collections.kt","webpack://web-app/util/Preconditions.kt","webpack://web-app/generated/_Collections.kt","webpack://web-app/collections/Maps.kt","webpack://web-app/generated/_Maps.kt","webpack://web-app/time/measureTime.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/Koin.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/KoinApplication.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/scope/ScopeDefinition.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/component/KoinScopeComponent.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/definition/BeanDefinition.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/definition/Callbacks.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/component/KoinComponent.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/definition/Options.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/definition/Properties.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/ClosedScopeException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/DefinitionOverrideException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/DefinitionParameterException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/InstanceCreationException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/KoinAppAlreadyStartedException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/MissingPropertyException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/NoBeanDefFoundException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/NoParameterFoundException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/NoScopeDefFoundException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/ScopeAlreadyCreatedException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/error/ScopeNotCreatedException.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/instance/FactoryInstanceFactory.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/instance/InstanceContext.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/instance/InstanceFactory.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/instance/SingleInstanceFactory.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/logger/EmptyLogger.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/logger/Logger.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/parameter/DefinitionParameters.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/qualifier/Qualifier.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/qualifier/StringQualifier.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/qualifier/TypeQualifier.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/registry/InstanceRegistry.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/registry/PropertyRegistry.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/registry/ScopeRegistry.kt","webpack://web-app/util/Standard.kt","webpack://web-app/collections/MutableCollections.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/time/Measure.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/dsl/ScopeDSL.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/ext/KClassExt.kt","webpack://web-app/../../../../../koin-core/src/jsMain/kotlin/org/koin/core/context/GlobalContext.kt","webpack://web-app/../../../../../koin-core/src/jsMain/kotlin/org/koin/core/logger/PrintLogger.kt","webpack://web-app/../../../../../koin-core/src/jsMain/kotlin/org/koin/mp/PlatformToolsJS.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/core/context/DefaultContextExt.kt","webpack://web-app/../../../../../koin-core/src/commonMain/kotlin/org/koin/dsl/Module.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/isarray/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha256.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha512.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/_stream_readable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/_stream_transform.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/create-hmac/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/create-hash/md5.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/lib/precondition.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/lib/default-encoding.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/lib/sync-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/lib/to-buffer.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des/utils.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des/des.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/ctr.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/incr32.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/authCipher.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/streamCipher.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/diffie-hellman/lib/generatePrime.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/miller-rabin/lib/mr.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curve/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/common.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/256.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/512.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/mgf.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/xor.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/withPublic.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/node-fetch/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/database/src/jsMain/kotlin/com/shabinder/common/database/Actual.kt","webpack://web-app/../../../../../runtime/src/commonMain/kotlin/com/squareup/sqldelight/Query.kt","webpack://web-app/../../../../../formats/json/jsMain/src/kotlinx/serialization/json/internal/DynamicDecoders.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/Json.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/JsonElementSerializers.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonConf.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonExceptions.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonParser.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonReader.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/Polymorphic.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/PolymorphismValidator.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonDecoder.kt","webpack://web-app/../../../../../formats/json/commonMain/src/kotlinx/serialization/json/internal/WriteMode.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/common/src/io/ktor/client/features/json/JsonContentTypeMatcher.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/common/src/io/ktor/client/features/json/JsonFeature.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/common/src/io/ktor/client/features/json/JsonSerializer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/js/src/io/ktor/client/features/json/DefaultJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/main/src/commonMain/kotlin/com/shabinder/common/main/SpotiFlyerMain.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/main/src/commonMain/kotlin/com/shabinder/common/main/integration/SpotiFlyerMainImpl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/main/src/commonMain/kotlin/com/shabinder/common/main/store/InstanceKeeperExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/main/src/commonMain/kotlin/com/shabinder/common/main/store/SpotiFlyerMainStore.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/main/src/commonMain/kotlin/com/shabinder/common/main/store/SpotiFlyerMainStoreProvider.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/SuspendExecutor.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/StoreExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/list/src/commonMain/kotlin/com/shabinder/common/list/SpotiFlyerList.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/list/src/commonMain/kotlin/com/shabinder/common/list/integration/SpotiFlyerListImpl.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/list/src/commonMain/kotlin/com/shabinder/common/list/store/InstanceKeeperExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/list/src/commonMain/kotlin/com/shabinder/common/list/store/SpotiFlyerListStore.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/list/src/commonMain/kotlin/com/shabinder/common/list/store/SpotiFlyerListStoreProvider.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/CSSBuilder.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/Extensions.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/StyleDimensions.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/StyleEnums.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/StyleList.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/StyledElement.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/TagSelectors.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/properties/Animation.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/properties/BoxShadow.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/properties/Keyframes.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/properties/Transform.kt","webpack://web-app/../../../../../kotlin-css/src/commonMain/kotlin/kotlinx/css/properties/Transition.kt","webpack://web-app/./kotlin-dce/kotlin-wrappers-kotlin-react-dom-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react-dom/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/node_modules/css-in-js-utils/lib/hyphenateProperty.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/stylis-rule-sheet/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/is-what/dist/index.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/merge-anything/dist/index.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/extras/UniqueId.kt","webpack://web-app/../kotlin/kotlin-wrappers-kotlin-styled-jsLegacy.js","webpack://web-app/../kotlin/kotlin-wrappers-kotlin-react-jsLegacy.js","webpack://web-app/./kotlin/generated/_Collections.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/App.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/Styles.kt","webpack://web-app/./kotlin/util/Standard.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/client.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/extras/RenderableComponent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/extras/RenderableRootComponent.kt","webpack://web-app/../kotlin/kotlin-wrappers-kotlin-extensions-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/extras/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/home/HomeScreen.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/home/IconList.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/home/Message.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/home/Searchbar.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/CoverImage.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/DownloadAllButton.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/DownloadButton.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/ListScreen.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/LoadingAnim.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/LoadingSpinner.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/TrackItem.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/navbar/NavBar.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/navbar/NavBarStyles.kt","webpack://web-app/./kotlin/collections/MutableCollections.kt","webpack://web-app/../kotlin/kotlin-wrappers-kotlin-react-dom-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/root/RootR.kt","webpack://web-app/./kotlin/collections/Maps.kt","webpack://web-app/./kotlin/text/Strings.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/web-app/src/main/kotlin/list/CircularProgressBar.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react/cjs/react.production.min.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-main/src/commonMain/kotlin/com/arkivanov/mvikotlin/main/store/DefaultStore.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-main/src/commonMain/kotlin/com/arkivanov/mvikotlin/main/store/DefaultStoreFactory.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/logger/DefaultLogFormatter.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/logger/DefaultLogger.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/logger/LoggerWrapper.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/logger/LoggerWrapperExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/store/LoggingExecutor.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/store/LoggingReducer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/store/LoggingStore.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/mvikotlin-logging/src/commonMain/kotlin/com/arkivanov/mvikotlin/logging/store/LoggingStoreFactory.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/crypto-browserify/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/base64-js/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/ieee754/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha224.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/sha.js/sha384.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/stream-browserify/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/timers-browserify/main.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/setimmediate/setImmediate.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/writable-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/duplex-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/transform.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/readable-stream/passthrough.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/create-hmac/legacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/algos.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/pbkdf2/lib/async.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-cipher/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-des/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des/cbc.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/des.js/lib/des/ede.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/encrypter.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/ecb.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/cbc.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/cfb.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/cfb8.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/cfb1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/modes/ofb.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/ghash.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-aes/decrypter.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-des/modes.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/diffie-hellman/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/diffie-hellman/lib/dh.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/browser/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/browser/sign.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curve/short.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/224.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/sha/384.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/ripemd.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hash.js/lib/hash/hmac.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/ec/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/ec/key.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/parse-asn1/asn1.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/api.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/base/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/asn1.js/lib/asn1/constants/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/parse-asn1/certificate.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/parse-asn1/fixProc.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browserify-sign/browser/verify.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/create-ecdh/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/publicEncrypt.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/public-encrypt/privateDecrypt.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/randomfill/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/ChunkedTransferEncoding.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/Chars.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/HttpHeadersMap.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/RequestResponse.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/AsciiCharTree.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/CIOHeaders.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/websocket/CloseReason.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/Tokenizer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/CharArrayPool.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/websocket/FrameCommon.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/websocket/FrameType.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/websocket/DefaultWebSocketSessionJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/websocket/FrameJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/websocket/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/websocket/WebSocketSessionJs.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/ws/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/abort-controller/browser.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/ktor-client-serialization/common/src/io/ktor/client/features/json/serializer/KotlinxSerializer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-json/ktor-client-serialization/js/src/SerializerInitializer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/LogLevel.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/LoggedContent.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/Logger.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/Logging.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/ObservingUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-logging/js/src/io/ktor/client/features/logging/LoggerJs.kt","webpack://web-app/../../../../../core/commonMain/src/DateTimePeriod.kt","webpack://web-app/../../../../../core/commonMain/src/DateTimeUnit.kt","webpack://web-app/../../../../../core/commonMain/src/Instant.kt","webpack://web-app/../../../../../core/commonMain/src/math.kt","webpack://web-app/../../../../../core/commonMain/src/Clock.kt","webpack://web-app/../../../../../core/commonMain/src/Exceptions.kt","webpack://web-app/../../../../../core/jsMain/src/DayOfWeek.kt","webpack://web-app/../../../../../core/jsMain/src/Instant.kt","webpack://web-app/../../../../../core/jsMain/src/JSJodaExceptions.kt","webpack://web-app/../../../../../core/jsMain/src/mathJs.kt","webpack://web-app/../../../../../core/jsMain/src/Month.kt","webpack://web-app/../../../../../core/commonMain/src/DayOfWeek.kt","webpack://web-app/../../../../../core/commonMain/src/Month.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/@js-joda/core/dist/js-joda.esm.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/ToStringFunction.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/DiffUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/Extractor.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/FuzzySearch.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/PriorityQueue.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/BasicAlgorithm.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/DefaultStringFunction.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/RatioAlgorithm.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/SetUtils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/TokenSet.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/TokenSort.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/Utils.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/WeightedRatio.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/model/BoundExtractedResult.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/model/ExtractedResult.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/ratio/PartialRatio.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/ratio/SimpleRatio.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/commonMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/structs/EditOps.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/fuzzywuzzy/app/src/jsMain/kotlin/com/willowtreeapps/fuzzywuzzy/diffutils/algorithms/pattern.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-auth/common/src/io/ktor/client/features/auth/Auth.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-auth/common/src/io/ktor/client/features/auth/providers/BasicAuthProvider.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/ktor-client/ktor-client-features/ktor-client-auth/common/src/io/ktor/client/features/auth/providers/DigestAuthProvider.kt","webpack://web-app/../../../../../atomicfu/src/commonMain/kotlin/kotlinx/atomicfu/TraceFormat.kt","webpack://web-app/../../../../../atomicfu/src/jsMain/kotlin/kotlinx/atomicfu/Trace.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/browser-id3-writer/dist/browser-id3-writer.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/file-saver/src/FileSaver.js","webpack://web-app/../../../../../decompose/src/commonMain/kotlin/com/arkivanov/decompose/RouterFactoryExt.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/data-models/src/commonMain/kotlin/com/shabinder/common/models/Consumer.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/root/src/commonMain/kotlin/com/shabinder/common/root/SpotiFlyerRoot.kt","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/common/root/src/commonMain/kotlin/com/shabinder/common/root/integration/SpotiFlyerRootImpl.kt","webpack://web-app/../../../../../extensions/coroutines-extensions/src/commonMain/kotlin/com/squareup/sqldelight/runtime/coroutines/FlowExtensions.kt","webpack://web-app/./kotlin-dce/kotlin-wrappers-kotlin-styled-jsLegacy.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/hyphenate-style-name/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react-dom/cjs/react-dom.production.min.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/scheduler/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/scheduler/cjs/scheduler.production.min.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/styled-components/src/models/StyleTags.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/styled-components/src/models/ThemeProvider.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/styled-components/src/models/GlobalStyle.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/react-is/cjs/react-is.production.min.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/prop-types/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/prop-types/factoryWithThrowingShims.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/utils/capitalizeString.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/utils/prefixProperty.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/utils/prefixValue.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/utils/addNewValuesOnly.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/utils/isObject.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/createPrefixer.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/data.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/cursor.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/crossFade.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/filter.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/flex.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/flexboxOld.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/gradient.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/grid.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/imageSet.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/logical.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/sizing.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/transition.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/index.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/backgroundClip.js","webpack://web-app//home/runner/work/SpotiFlyer/SpotiFlyer/build/js/node_modules/inline-style-prefixer/es/plugins/position.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","ctor","superCtor","super_","constructor","writable","configurable","TempCtor","Kotlin","_","isBooleanArray","a","Array","isArray","Int8Array","$type$","isByteArray","isShortArray","Int16Array","isCharArray","Uint16Array","isIntArray","Int32Array","isFloatArray","Float32Array","isDoubleArray","Float64Array","isLongArray","isArrayish","ArrayBuffer","isView","arrayToString","toString","String","fromCharCode","map","e","join","arrayEquals","b","length","equals","arrayHashCode","arr","result","hashCode","getCallableRef","f","callableName","getPropertyCallableRef","set","setter","obj","cache","$metadata$","implementedInterface","getPropertyRefMetadata","mutable","immutable","getPropertyRefClass","propertyRefClassMetadataCache","paramCount","buf","bufFloat64","bufFloat32","bufInt32","lowIndex","highIndex","kotlin","reflect","KMutableProperty0","KProperty0","KMutableProperty1","KProperty1","getObjectHashCode","hash","Math","random","throwMarkerError","Error","imul","toShort","toByte","toChar","numberToLong","Long","fromNumber","numberToInt","toInt","doubleToInt","numberToDouble","toBoxedChar","BoxedChar","unboxChar","obj1","obj2","objType","numberHashCode","Number","str","code","charCodeAt","getStringHashCode","identityHashCode","low_","low","high_","high","IntCache_","fromInt","cachedObj","isNaN","ZERO","TWO_PWR_63_DBL_","MIN_VALUE","MAX_VALUE","negate","TWO_PWR_32_DBL_","fromBits","lowBits","highBits","fromString","radix","opt_radix","charAt","substring","indexOf","radixToPower","pow","size","min","parseInt","power","multiply","add","TWO_PWR_16_DBL_","TWO_PWR_24_DBL_","TWO_PWR_31_DBL_","TWO_PWR_48_DBL_","TWO_PWR_64_DBL_","ONE","NEG_ONE","TWO_PWR_24_","toNumber","getLowBitsUnsigned","isZero","isNegative","equalsLong","radixLong","div","rem","subtract","remDiv","digits","getHighBits","getLowBits","getNumBitsAbs","val","bit","isOdd","other","notEqualsLong","lessThan","compare","lessThanOrEqual","greaterThan","greaterThanOrEqual","thisNeg","otherNeg","not","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","b00","approx","shiftRight","shiftLeft","res","max","floor","log2","ceil","log","LN2","delta","approxRes","approxRem","modulo","and","or","xor","numBits","shiftRightUnsigned","compareTo_11rb$","inc","dec","valueOf","unaryPlus","unaryMinus","inv","rangeTo","ranges","LongRange","defineInlineFunction","fun","wrapFunction","apply","arguments","suspendCall","coroutineResult","coroutineReceiver","setCoroutineResult","getReifiedTypeParameterKType","compareTo","typeA","doubleCompareTo","primitiveCompareTo","ia","imulEmulated","doubleToRawBits","doubleFromBits","floatToRawBits","floatFromBits","ensureNotNull","x","throwNPE","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","undefined","lastIndex","sign","trunc","NaN","taylor_2_bound","sqrt","taylor_n_bound","upper_taylor_2_bound","upper_taylor_n_bound","sinh","abs","y","exp","y1","isFinite","cosh","tanh","Infinity","asinh","acosh","atanh","log1p","x2","x3","expm1","hypot","log10","LOG10E","LOG2E","clz32","asUint","__proto__","fill","TypeError","O","len","start","relativeStart","k","end","relativeEnd","finalValue","normalizeOffset","offset","typedArraySlice","begin","subarray","arrays","TypedArray","slice","Function","self","array","callback","totalOrderComparator","sort","compareFunction","Kind","callGetter","thisObject","klass","propertyName","propertyDescriptor","getOwnPropertyDescriptor","getPrototypeOf","isType","proto","kind","OBJECT","klassMetadata","INTERFACE","isInheritanceFromInterface","iface","metadata","interfaces","superPrototype","superConstructor","isNumber","isChar","isComparable","type","Comparable","isCharSequence","CharSequence","ordinal","initValue","fillArrayVal","init","element","index","NoSuchElementException","destination","IntRange","item","toCollection","asCollection","emptySet","setOf","defaultValue","iterator","count","hasNext","next","isEmpty","single","emptyList","listOf","list","optimizeReadOnlyList","j","copyToArray","sortWith","asList","optimizeReadOnlySet","elements","addAll","separator","prefix","postfix","limit","truncated","transform","buffer","to","last","first","step","EMPTY","minimumValue","maximumValue","FilteringSequence","predicate","it","emptySequence","TakeSequence","TransformingSequence","CharIterator","IntIterator","LongIterator","getProgressionLastElement","endInclusive","NotImplementedError","nextByte","nextChar","nextShort","nextInt","nextLong","nextFloat","nextDouble","nextBoolean","CharProgressionIterator","CharProgression","rangeStart","rangeEnd","IntProgressionIterator","IntProgression","LongProgressionIterator","LongProgression","CharRange","mod","differenceModulo","BooleanIterator","ByteIterator","ShortIterator","FloatIterator","DoubleIterator","context","current","v","currentResult","isFailure","currentException","exceptionOrNull","doResume","outcome","exception","completion","Result","createFailure","intercepted","CoroutineImpl","receiver","cause","message","Exception","RuntimeException","src","dst","srcLen","dstLen","source","newSize","checkRadix","ArrayList","fromIndex","toIndex","sortArray","comparator","midPoint","reverseIndex","tmp","toArray","copyToArrayImpl","collection","push","pair","collectionsSort","naturalOrder","startIndex","endIndex","destinationOffset","rangeSize","subrange","throwIndexOverflow","expectedSize","AbstractCollection","AbstractMutableCollection","AbstractMutableList","AbstractMap","AbstractMutableSet","initialCapacity","getStableSortingIsSupported","comparison","mergeSort","_stableSortingIsSupported","median","left","leftIndex","rightIndex","right","leftValue","rightValue","target","checkIsMutable","remove","modified","_index","changed","times","hasPrevious","newValue","oldValue","entries","clear","from","iter","entry","modCount","splice","concat","pop","value1","value2","internalMap","equality","InternalHashCodeMap","loadFactor","createJsMap","keys","original","BaseOutput","BufferedOutput","initialResult","ClassCastException","pairs","NEGATIVE_INFINITY","toRawBits","bits","POSITIVE_INFINITY","isInfinite","hi26","INV_2_26","low27","INV_2_53","KClassImpl","jClass","createEntrySet","chainOrEntry","chain","isChain","chainSize","keyIndex","itemIndex","state","lastEntry","_head","_tail","node","old","newEntry","build","println","outputStream","write","messageString","flush","console","cur","simpleName","jsClass","PrimitiveKClassImpl","classifier","isMarkedNullable","kClass","variance","prefixString","functionClasses","arity","getKClassM","getKClass1","jClasses","ErrorKClass","stringClass","SimpleKClassImpl","content","matches","toUpperCase","uppercase","MIN_HIGH_SURROGATE","MAX_HIGH_SURROGATE","MIN_LOW_SURROGATE","MAX_LOW_SURROGATE","toLowerCase","char","pattern","options","collectionSizeOrDefault","RegExp","match","IndexOutOfBoundsException","reversed","isLowSurrogate","isHighSurrogate","concatToString","string","toInsert","newLength","dstIndex","stringCsq","reset","exec","input","test","findNext","Regex","replace","replacement","lastStart","sb","foundMatch","range","nonGlobalOptions","subSequence","literal","AbstractList","ignoreCase","n1","n2","s1","s2","regionMatches","suffix","regex","regionMatchesImpl","thisOffset","otherOffset","throwOnMalformed","CharacterCodingException","byte1","malformed","bytes","byte2","byte3","byte4","byteIndex","byte","stringBuilder","codePointFrom2","REPLACEMENT_CHAR","codePointFrom3","codePointFrom4","sourceUnit","targetUnit","sourceCompareTarget","isNode","HrTimeSource","MatchGroup","markNow","TimeMark","process","hrtime","AbstractDoubleTimeSource","startedAt","seconds","nanos","performance","now","decimals","round","toFixed","toLocaleString","json","toExponential","createElement","previous","nextIndex","otherIterator","elem","elemOther","AbstractSet","ourValue","minCapacity","newCapacity","arrayCopy","newElements","internalIndex","removeFirst","internalLastIndex","removeLast","decrementedInternalIndex","decrementedHead","tail","shiftedHead","elementsSize","shiftToBack","elementsToShift","shiftedInternalIndex","shiftToFront","oldElement","newTail","oldCapacity","structure","ArrayAsCollection","ArithmeticException","values","contains","isVarargs","IndexingIterator","IndexedValue","checkIndexOverflow","putAll","emptyMap","filterInPlace","predicateResultToRemove","writeIndex","readIndex","removeIndex","SequenceBuilderIterator","nextStep","block","SequenceScope","reverseElementIndex","sequence","throwOnFailure","GeneratorSequence","seedFunction","nextFunction","nextItem","nextState","FlatteningSequence","itemIterator","nextItemIterator","SubSequence","safe","getOrThrow","acc","removed","interceptor","CombinedContext","baseKey","operation","initial","newLeft","initialValue","Random","defaultPlatformRandom","accumulator","until","checkRangeBounds","fastLog2","bitCount","nLow","nHigh","rnd","doubleFromParts","r1","nextDown","steps","remainder","vr","seed","boundsErrorMessage","seed1","seed2","KTypeProjection","v0","takeUpperBits","star","uppercaseChar","newIndent","marginPrefix","isBlank","lines","getIndentFunction","isWhitespace","firstNonWhitespaceIndex","line","indent","int","firstChar","limitBeforeMul","digitOf","digit","limitForMaxRadix","NumberFormatException","padChar","padStart","chars","indices","indexOfAny","charArrayOf","lastIndexOfAny","currentStartIndex","DelimitedRangesSequence","currentIndex","strings","findAnyOf","second","delimiters","currentOffset","delimiter","isLimited","splitToSequence","lineSequence","Duration","nextSearchIndex","groupValues","convertDurationUnit","unit","scale","action","inDays","hoursComponent","minutesComponent","secondsComponent","nanosecondsComponent","inHours","inMinutes","inSeconds","inNanoseconds","absoluteValue","scientific","maxDecimals","absNs","formatScientific","formatUpToDecimals","formatToExactDecimals","shortName","number","hours","nanoseconds","minutes","hasSeconds","hasHours","hasMinutes","nss","AdjustedTimeMark","duration","elapsedNow","mark","adjustment","read","initializer","isInitialized","InitializedLazyImpl","Pair","that","UByte","third","UInt","uintCompare","data","ulongCompare","uintDivide","ulongDivide","uintRemainder","ulongRemainder","UIntProgression","UIntRange","uintToDouble","UIntProgressionIterator","UIntIterator","ULong","nextUInt","nextULong","ULongProgression","ulongToDouble","ulongToString","ULongProgressionIterator","ULongIterator","ac","bc","UShort","uradix","beforeAdding","v1","v2","divisor","dividend","quotient","base","filterNotNullTo","toMutableList","IndexingIterable","reverseOrder","sum","collectionSizeOrNull","fillFrom","arrayCopyResize","booleanArrayIterator","byteArrayIterator","shortArrayIterator","charArrayIterator","intArrayIterator","longArrayIterator","floatArrayIterator","doubleArrayIterator","captureStackTrace","instance","stack","UnsafeLazyImpl","output","delegate","ownerDocument","appendChild","NullPointerException","KTypeImpl","intClass","doubleClass","booleanClass","functionClass","booleanArrayClass","charArrayClass","byteArrayClass","shortArrayClass","intArrayClass","longArrayClass","floatArrayClass","doubleArrayClass","arrayClass","anyClass","throwableClass","toByteOrNull","numberFormatError","toShortOrNull","toIntOrNull","toLongOrNull","option","decodeUtf8","oldChar","newChar","_suppressed","suppressed","getOrImplicitDefault","mapOf","optimizeReadOnlyMap","toMutableMap","toHashSet","ReversedListReadOnly","toSet","createCoroutineUnintercepted","ClosedDoubleRange","MIN_SURROGATE","MAX_SURROGATE","replaceIndentByMargin","replaceIndent","startFound","missingDelimiterValue","rangesDelimitedBy","toUByteOrNull","toUShortOrNull","toUIntOrNull","toULongOrNull","NodeJsOutput","BufferedOutputToConsoleLog","Comparator","Buffer","copyProps","SafeBuffer","arg","encodingOrOffset","alloc","allocUnsafe","allocUnsafeSlow","encoding","SlowBuffer","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","assert","msg","inherits","BN","endian","isBN","negative","words","red","_init","wordSize","window","parseHex4Bits","parseHexByte","lowerBound","parseBase","mul","num","cmp","_initNumber","_initArray","_parseHex","_parseBase","w","strip","limbLen","limbPow","total","word","imuln","_iaddn","copy","dest","clone","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","out","lo","carry","ncarry","rword","maxJ","padding","groupSize","groupBase","modn","idivn","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","q","andln","iushrn","_countBits","_zeroBits","bitLength","hi","zeroBits","toTwos","width","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","uor","iuand","iand","uand","iuxor","ixor","uxor","bytesNeeded","bitsLeft","setn","wbit","iadd","isub","sub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","bhi","diff","qj","divmod","positive","divn","umod","divRound","dm","half","r2","egcd","A","B","C","D","g","isEven","yp","xp","im","jm","gcd","_invmp","x1","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","outLen","prev","mod3","one","nOne","lpow","z","wnd","currentLen","mont","u","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","Uint8Array","byteOffset","fromArrayLike","fromArrayBuffer","isEncoding","actual","isBuffer","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","INSPECT_MAX_BYTES","global","foo","typedArraySupport","poolSize","_augment","species","_isBuffer","pos","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","toHex","checkOffset","ext","checkInt","objectWriteUInt16","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","trim","stringtrim","base64clean","equal","utils","minAssert","minUtils","zero2","encode","getNAF","naf","getJSF","k1","k2","jsf","m8","d1","d2","u1","u2","m14","m24","cachedProperty","computer","parseBytes","intFromLE","isSurrogatePair","htonl","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","default","pool","closed","copied","EOFException","head","writePosition","readPosition","after","release","before","prepareReadFirstHead","headPosition","byteCount","failLongToIntConversion","charset","dstOffset","Transform","StringDecoder","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","update","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","err","_flush","done","fin","ReflectOwnKeys","R","Reflect","ReflectApply","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","emitter","Promise","resolve","reject","errorListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","unshift","warned","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","error","er","originalListener","spliceOne","rawListeners","eventNames","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","pna","objectKeys","Duplex","util","Readable","Writable","method","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","ContentDisposition","HttpStatusCode","formUrlEncodeTo","urlString","Grammar","GrammarRegex","headers","crypto","msCrypto","getRandomValues","generated","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","oneOf","expected","thing","determiner","search","this_len","getBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","accum","assigned","digest","_hash","invoke_3","$receiver","tmp$","package$kotlinext","kotlinext","package$js","js","clone_issdgt$","assign","getOwnPropertyNames_s8jyvk$","invoke_z5wujd$","invoke_dgimx$","invoke_9p99ed$","atomic","capitalize","initialize","actionConsumer","requireValue","bootstrapper","assertOnMainThread","LOG_TAG","AtomicRefImpl","AtomicBooleanImpl","withLogTag","MainThreadId","mainThreadIdRef","getMainThreadId","id","logE","MainThreadIdHolder","isMainThread","readAvailable","clearFrom","padSize","chunk","toBase64","BASE64_PAD","makeShared","delegateIterator","fromPhaseOrContent","fromPhase","phase","rootContinuation","writeFully","MD5","RIPEMD160","sha","alg","objectToString","isBoolean","isNull","isNullOrUndefined","isString","isSymbol","isUndefined","isRegExp","isObject","isDate","isError","isFunction","isPrimitive","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","Reporter","DecoderBuffer","EncoderBuffer","reporter","isEncoderBuffer","isDecoderBuffer","save","restore","skip","raw","fail","_reporterState","forEach","AllPlatforms","CorsProxy","url","corsProxy","DownloadStatus","DownloadResult","contentEquals","contentHashCode","ObservableProperty","feature","attributes","HttpRequest","execute","TypeInfo","executeUnsafe","HttpStatement","fn","asUInt32Array","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","m1","scrub","password","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","beta","_getBeta","_hasDoubles","dbl","asn1","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","tag","certificate","decode","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","signature","$module$react","$module$kotlin_wrappers_kotlin_extensions_jsLegacy","$module$kotlinx_coroutines_core","$$importsForInline$$","Unit","Kind_CLASS","CLASS","Annotation","collections","emptyList_287e2$","listOf_mh5how$","Children","addAll_ye1y7v$","throwCCE","cloneElement","first_2p1efm$","ArrayList_init","ArrayList_init_287e2$","collectionSizeOrDefault_ba2ldo$","ArrayList_init_0","ArrayList_init_ww73n8$","checkIndexOverflow_za3lpa$","IllegalStateException_init","IllegalStateException_init_pdl1vj$","get_js","get_js_1yb8b7$","Component","kotlinx","coroutines","intrinsics","COROUTINE_SUSPENDED","launch_s496o7$","ReadWriteProperty","properties","rawUseEffect","to_ujzrz7$","useEffect","RBuilder","childList","RBuilder$invoke$lambda$lambda","closure$handler","buildElements","closure$value","RBuilder$invoke$lambda$lambda$lambda","RBuilder$invoke$lambda","nodes","tmp$_0","Fragment","RElementBuilder","attrs","attrs_iyt8sk$_0","child$lambda","get_rClass","get_children","children","set_key","set_ref","ref","RComponent","RStateDelegate","setState","state_0","setState_0","child_52psg1$","add_11rb$","unaryPlus_84gpoi$","unaryPlus_pdl1vz$","child_k3oess$","props","child_4dvv5y$","invoke_eb8iu4$","invoke_csqs6z$","$receiver_0","invoke_ory6b3$","node_rwypko$","child_ssazr1$","klazz","child_t7en6a$","getKClass","C_0","isC","childFunction_2656uf$","closure$children","childFunction_khdow9$","node_3ecl1l$","node_e2hqbc$","children_yllgzm$","children_48djri$","renderEach_3b8uhr$","tmp$_1","renderEachIndexed_a4qrr7$","tmp$_0_0","index_0","withKey_s5hl0b$","newKey","indexOf_11rb$","removeAt_za3lpa$","elementWithKey","add_wxm5ur$","withKey_pspxar$","attrs_slhiwc$","ref_5ij4lk$","init_bc6fkx$","init_65a95q$","children_ss14n$","children_tgvp6h$","render","this$RComponent","render_ss14n$","component1","component2","getValue_lrcp0p$","thisRef","setValue_9rddgb$","package$react","react","buildElements_zepujl$","functionalComponent_7g4vsr$","displayName","func","closure$func","fc","closure$props","functionalComponent$lambda$lambda","child_9r8yuv$","component","get_rClass_inwa2g$","get_children_yllgzm$","set_key_38rnt0$","set_ref_jjyqia$","ref_dpkau5$","setState_kpl3tw$","buildState","closure$buildState","builder","RComponent_init_8bz2yq$","$this","useEffect_wrbdb4$","dependencies","effect","closure$effect","rawEffect","onComplete","onNext","ObserverImpl","Dir","createDatabase","getLogger","TokenStore","YoutubeMusic","SpotifyProvider","GaanaProvider","YoutubeProvider","YoutubeMp3","FetchPlatformQueryResult","createHttpClient","logger","Logger","level","JsonFeature","Logging","enableNetworkLogs","serializer","kotlinxSerializer","flow","extension","defaultDir","removeIllegalChars","fileSeparator","subFolder","itemName","epochSeconds","currentPlatform","launch","GlobalScope","Dispatchers","Default","defaultRequest","header","access_token","contentLength","roundToInt","progress","isSuccess","status","close","db","folderType","coverUrl","trackList","youtubeProvider","withContext","token","expiry","TokenData","accessToken","authenticateSpotify","httpClient","TOKEN","format","substringAfter","fullLink","substringAfterLast","gaanaLink","substringBeforeLast","link","PlatformQueryResult","firstOrNull","artist","artworkLink","tracks","custom_artworks","size_480p","track_title","imageCacheDir","album_title","release_date","genre","lyrics_url","downloaded","TrackDetails","finalOutputDir","getToken","substringBefore","track","moreTracks","items","images","getOrNull","albumObject","Album","Image","album","response","artists","duration_ms","href","compareValues","selector","put","putJsonObject","contentType","Json","body","FormDataContent","basic","sendWithoutRequest","username","Auth","fileName","illegalCharArray","durationSec","responseObj","contentBlocks","cBlock","contents","linkBlock","resultBlocks","finalResult","detailArray","detail","availableDetails","YoutubeTrack","videoId","ytTrack","ytTracks","hasCommonWord","trackName","nameWord","FuzzySearch","resultName","artistMatchNumber","trackArtists","trackDurationSec","artistMatch","difference","avgMatch","linksWithMatchValue","toMap","sortedWith","toList","apiKey","override","allTracksStatus","videoID","joinToString","youtubeMusic","searchQuery","downloadTrack","DownloadProgressFlow","dispatcherIO","youtubeMp3","downloadFile","toArrayBuffer","albumArtObj","albumArtURL","albumArt","setFrame","albumName","year","addTag","saveAs","getBlob","Picture","appDeclaration","startKoin","commonModule","KotlinxSerializer","isLenient","ignoreUnknownKeys","lazy","MutableSharedFlow","HashBase","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","config","localStorage","trace","ERR_STREAM_PREMATURE_CLOSE","eos","stream","opts","called","onlegacyfinish","onfinish","writableEnded","finished","readableEnded","endEmitted","onerror","onclose","onrequest","req","setHeader","abort","isRequest","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","Algorithm","sha1","sha224","sha256","sha384","sha512","Stream","PassThrough","CorkedRequest","_this","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","setImmediate","WritableState","internalUtil","deprecate","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","destroy","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","hasInstance","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","Cipher","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_unpad","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","webpackPolyfill","paths","Rand","rand","generate","_rand","getBytes","getByte","randomBytes","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","elliptic","curves","ec","eddsa","pre","PresetCurve","short","edwards","isInfinity","defineCurve","lambda","basis","common","ripemd","hmac","ripemd160","safer","Safer","kStringMaxLength","constants","MAX_LENGTH","MAX_STRING_LENGTH","tags","methods","Node","parent","_baseState","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","_wrap","stateProps","cstate","prop","filter","child","_useArgs","def","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","entity","_use","some","_createEncoderBuffer","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","errors","ReporterError","rethrow","pathLen","inherited","partial","reverse","tagClass","0","1","2","3","tagClassByName","tagByName","sourceIterator","mapCapacity","findAssociatedObject","consumer","attributeName","tagName","encoder","Attribute","trueValue","falseValue","BooleanEncoder","tickerEncode","EnumEncoder","realValue","valuesMap","stringSetDecode","initialValues","HTMLTag","initialAttributes","DelegatingMap","attributeStringString","attributeBooleanTicker","attributeButtonFormEncTypeEnumButtonFormEncTypeValues","attributeButtonFormMethodEnumButtonFormMethodValues","attributeButtonTypeEnumButtonTypeValues","attributeBooleanBooleanOnOff","attributeFormEncTypeEnumFormEncTypeValues","attributeFormMethodEnumFormMethodValues","attributeInputTypeEnumInputTypeValues","attributeInputFormEncTypeEnumInputFormEncTypeValues","attributeInputFormMethodEnumInputFormMethodValues","immutableEntries","StringAttribute","StringSetAttribute","BooleanAttribute","TickerAttribute","EnumAttribute","buttonFormEncTypeValues","buttonFormMethodValues","buttonTypeValues","commandTypeValues","dirValues","draggableValues","formEncTypeValues","formMethodValues","iframeSandboxValues","inputFormEncTypeValues","inputFormMethodValues","inputTypeValues","keyGenKeyTypeValues","runAtValues","textAreaWrapValues","thScopeValues","coerceAtLeast","mappings","maxCode","nullptn","formatptn","colonptn","cursorptn","transformptn","animationptn","propertiesptn","elementptn","selectorptn","andptn","escapeptn","invalidptn","keyframeptn","plcholdrptn","readonlyptn","beforeptn","afterptn","tailptn","whiteptn","pseudoptn","writingptn","supportsptn","propertyptn","selfptn","pseudofmt","dimensionptn","imgsrcptn","webkit","moz","ms","SEMICOLON","CLOSEBRACES","OPENBRACES","OPENPARENTHESES","CLOSEPARENTHESES","NEWLINE","CARRIAGE","SPACE","DASH","STAR","COMMA","COLON","FOWARDSLASH","column","cascade","escape","compress","semicolon","preserve","plugins","plugged","should","unkwn","keyed","nscopealt","nscope","compile","depth","bracket","comment","parentheses","quote","trail","peak","counter","atrule","pseudo","caret","insert","invert","eof","eol","flat","delimited","proxy","select","supports","vendor","selectors","scope","declare","parseFloat","group","parents","at","stylis","PREPS","POSTS","plugin","areInputsEqual","newInputs","lastInputs","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","propIsEnumerable","propertyIsEnumerable","toObject","test1","test2","test3","letter","shouldUseNative","symbols","ThreadLocalSubject","observer","isDisposed","mutableState","disposable","isCompleted","isDraining","dispose","BehaviorSubjectImpl","PublishSubjectImpl","_finalized","throwIfNotStringOrBuffer","ReadableState","EElistenerCount","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","readableObjectMode","pipes","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","addChunk","maybeReadMore","isPaused","setEncoding","howMuchToRead","computeNewHighWaterMark","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","ondrain","ondata","cleanedUp","pipeOnDrain","pause","event","dests","ev","wrap","asyncIterator","_fromList","iterable","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","rState","ERR_INVALID_OPT_VALUE","duplexKey","highWaterMarkFrom","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","err2","K","W","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","T1","T2","H","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","hh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","readableHwm","readableHighWaterMark","needMoreData","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","increasedAwaitDrain","_this2","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","pbkdf2","MAX_ALLOC","iterations","checkParameters","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","DK","block1","destPos","hLen","T","U","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","expand","sTable","substitute","permuteTable","padSplit","DESState","DES","_desState","deriveKeys","shiftTable","kL","kR","inp","inOff","outOff","_encrypt","_decrypt","pad","lStart","rStart","keyL","keyR","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","aes","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","bn","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","rn1","getDivisor","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","move","_move","for","modrn","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","bignum","decoders","encoders","der","pem","DEREncoder","tree","DERNode","encodedTag","encodeTag","lenOctets","unused","relative","ident","objid","time","date","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","_getEncoder","dataBuffer","defaultBuffer","DERDecoder","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","numstr","printstr","identifiers","subident","mon","day","hour","sec","UTC","_getDecoder","createHash","i2ops","paddedMsg","getGlobal","fetch","Headers","Request","Response","CommonLogger","toDouble","componentContext","getStore","instanceKeeper","storeFactory","database","SpotiFlyerMainStoreProvider","showPopUpMessage","provide","StoreHolder","store","isInternetAvailable","mainOutput","accept","category","SimpleBootstrapper","SuspendExecutor","updates","intent","openPlatform","platformID","platformLink","giveDonation","shareApp","DownloadRecord","totalFiles","SpotiFlyerMainImpl","channel","mainContext","Main","CoroutineScope","awaitClose","callbacks","cancel","onResult","onLabel","label","callbackFlow","fetchQuery","downloadProgressFlow","SpotiFlyerListStoreProvider","listOutput","updatedTrackList","collectLatest","finalList","downloadTracks","queryActiveTracks","replayCache","titleList","newTrack","updatedList","SpotiFlyerListImpl","$module$kotlin_wrappers_kotlin_react_jsLegacy","$module$kotlinx_html_js","$module$react_dom","attrsMap","StringBuilder_init","Unsafe","html","TagConsumer","listOf_i5x0yv$","toMap_6hr0sd$","toMutableMap_abgq59$","Kind_OBJECT","PropertyMetadata","RDOMBuilder","RDOMBuilder$consumer$ObjectLiteral","attributesEntries","setProp_4w9ihe$","this$RDOMBuilder","RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral","closure$sb","render$lambda","fixAttributeName","get_11rb$","StringAttr","StringAttr_instance","attribute","get_g0n3bx$","set_hpg2xa$","get_defaultChecked_a2ovwx$","set_defaultChecked_47da7g$","get_values_sktobr$","set_values_d8zj82$","get_value_sktobr$","set_value_g9clh3$","attrs_1wdtl9$","onTagAttributeChange_5n2z71$","onTagComment_6bul2c$","onTagContent_6bul2c$","onTagContentEntity_ws8or7$","append_pdl1vj$","onTagContentUnsafe_kntra7$","__html","dangerouslySetInnerHTML","onTagStart_tkgjla$","onTagEnd_tkgjla$","onTagEvent_azi6uv$","finalize","getValue_pt3q5s$","setValue_wi26v6$","put_xwzc9p$","StringAttr_getInstance","package$dom","dom","render_2955dm$","container","fixAttributeName_61zpoe$","unaryPlus_lvwjq6$","raw_3p81yu$","raw_61zpoe$","raw_ws8or7$","onTagError_cjwpn3$","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","_hyphenateStyleName2","_hyphenateStyleName","insertRule","toSheet","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","reactPropsRegex","getType","payload","isPlainObject","__spreadArrays","il","jl","assignProp","newVal","originalObject","propType","mergeRecursively","origin","newComer","extensions","extend","newObject","reduce","targetVal","newComers","LifecycleRegistry","SpotiFlyerRoot","DefaultStoreFactory","fetchPlatformQueryResult","directories","StyleSheet","circular","Color","aqua","colorPrimary","renderableChild","black","white","margin","App","document","getElementById","onload","initKoin","appScope","initialState","__unique_id","clazz","RenderableComponent","model","models","setAttribute","iconsAndPlatforms","platformIconList","isBadge","badges","iconList","searchbar","coverImage","downloadAllButton","downloadButton","isActive","downloadAll","details","loadingAnim","loadingSpinner","trackItem","navBar","stateFlow","subscription","componentDidMount","form","childNodes","removeChild","appendElement","Message","SearchBar","onLinkChange","IconList","queryResult","LoadingAnim","CoverImage","coverImageURL","coverName","DownloadAllButton","TrackItem","classes","mutableListOf","transparent","RenderableRootComponent","routerState","activeChild","callBacks","NavBar","isBackVisible","popBackToHomeScreen","functionalComponent","makeRow","elementAt","icon","firstElem","placeholder","alert","isClicked","setClicked","LoadingSpinner","onClick","downloadStatus","setDownloadStatus","DownloadButton","nav","LinearDimension","auto","StrictMode","Profiler","Suspense","encodeURIComponent","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","refs","updater","E","isReactComponent","forceUpdate","F","isPureReactComponent","__self","__source","J","defaultProps","$$typeof","_owner","L","P","Q","_status","_result","then","S","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","only","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createFactory","createRef","forwardRef","isValidElement","_payload","memo","useCallback","useContext","useDebugValue","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","PublishSubject","BehaviorSubject","executorFactory","subscribe","handleAction","handleIntent","DefaultStore","reducer","storeName","eventType","valueClassName","valueText","logV","logFormatter","DefaultLogFormatter","LoggerWrapper","newState","LoggingStore","LoggingExecutor","LoggingReducer","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","pipeline","enumerableOnly","sym","_defineProperty","_defineProperties","descriptor","custom","Constructor","_classCallCheck","protoProps","staticProps","_getString","_getBuffer","getOwnPropertyDescriptors","defineProperties","_objectSpread","customInspect","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","promise","lastPromise","wrapForNext","_Object$create","ERR_MISSING_ARGS","destroyer","popCallback","streams","destroys","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","EE","_isStdio","didOnEnd","cleanup","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","documentElement","script","onreadystatechange","attachEvent","task","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","importKey","deriveBits","resolvePromise","prom","catch","checkNative","resp","aesModes","desModes","ebtk","suite","des","instantiate","EDE","modeName","_des","des3","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","PADDING","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","fromArray","_multiply","lsbVi","Vi","Zi","abl","_last","padded","unpad","autoPadding","DH","ENCODINGS","generator","genc","generatePrime","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","hex","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","secret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","sig","EC","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y2","len1","_endoSplit","p1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","endoMul","parse","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","MontCurve","i4","a24","normalize","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","Ah","Bh","Dh","Eh","rh","sh","inner","outer","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","nonce","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","_hmac","kmac","reseed","addEnc","temp","_importPrivate","privEnc","_importPublic","pubEnc","reason","derive","_importDER","Position","place","getLength","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","seq","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","ECParameters","namedCurve","Entity","_createNamed","Generated","_initNamed","PEMEncoder","PEMDecoder","_reverse","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","nonZero","pkcs1","zBuffer","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","maxValue","opcode","AbortController","AbortSignal","SimpleLogger","superErrorClass","JsJodaException","DateTimeException","DateTimeParseException","parsedString","errorIndex","UnsupportedTemporalTypeException","IllegalArgumentException","IllegalStateException","_inheritsLoose","_assertThisInitialized","ReferenceError","assertion","requireNonNull","parameterName","requireInstance","_class","abstractMethodFail","methodName","assert$1","freeze","MathUtil","intDiv","roundDown","safeZero","intMod","floorDiv","floorMod","safeAdd","verifyInt","safeToInt","safeSubtract","safeMultiply","_parseInt","_x","compareNumbers","smi","numbers","_numbers","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","Enum","_name","_proto","TemporalAmount","addTo","temporal","subtractFrom","TemporalUnit","isDurationEstimated","isDateBased","isTimeBased","isSupportedBy","dateTime","periodToAdd","between","temporal1","temporal2","_TemporalAmount","_seconds","_nanos","ofDays","days","_create","LocalTime","SECONDS_PER_DAY","ofHours","SECONDS_PER_HOUR","ofMinutes","SECONDS_PER_MINUTE","ofSeconds","nanoAdjustment","secs","NANOS_PER_SECOND","nos","ofMillis","millis","mos","ofNanos","of","amount","plus","startInclusive","endExclusive","ChronoUnit","SECONDS","isSupported","ChronoField","NANO_OF_SECOND","startNos","getLong","adjustedEnd","with","dayMatch","hourMatch","minuteMatch","secondMatch","fractionMatch","daysAsSecs","_parseNumber","hoursAsSecs","minsAsSecs","negativeSecs","_parseFraction","ex","multiplier","errorText","_createSecondsNanos","_createNegateDaysHoursMinutesSecondsNanos","negated","NANOS","nano","withSeconds","withNanos","nanoOfSecond","checkValidIntValue","plusDuration","durationOrNumber","unitOrNumber","plusAmountUnit","plusSecondsNanos","amountToAdd","DAYS","plusNanos","MICROS","MILLIS","plusMillis","plusSeconds","multipliedBy","plusDays","daysToAdd","plusHours","hoursToAdd","plusMinutes","minutesToAdd","secondsToAdd","millisToAdd","nanosToAdd","epochSec","minus","minusDuration","minusAmountUnit","secsToSubtract","nanosToSubtract","amountToSubtract","minusDays","daysToSubtract","minusHours","hoursToSubtract","minusMinutes","minutesToSubtract","minusSeconds","secondsToSubtract","minusMillis","millisToSubtract","minusNanos","multiplicand","dividedBy","secsMod","toDays","toHours","toMinutes","toMillis","toNanos","totalNanos","otherDuration","nanoString","rval","YearConstants","_TemporalUnit","estimatedDuration","_duration","FOREVER","e2","TemporalField","baseUnit","rangeUnit","rangeRefinedBy","getFrom","adjustInto","ValueRange","minSmallest","minLargest","maxSmallest","maxLargest","_minSmallest","_minLargest","_maxLargest","_maxSmallest","isFixed","minimum","largestMinimum","maximum","smallestMaximum","isValidValue","checkValidValue","field","isValidIntValue","isIntValue","_TemporalField","_baseUnit","_rangeUnit","_range","byName","fieldName","DAY_OF_WEEK","ALIGNED_DAY_OF_WEEK_IN_MONTH","ALIGNED_DAY_OF_WEEK_IN_YEAR","DAY_OF_MONTH","DAY_OF_YEAR","EPOCH_DAY","ALIGNED_WEEK_OF_MONTH","ALIGNED_WEEK_OF_YEAR","MONTH_OF_YEAR","YEAR_OF_ERA","YEAR","ERA","NANO_OF_DAY","MICRO_OF_SECOND","MICRO_OF_DAY","MILLI_OF_SECOND","MILLI_OF_DAY","SECOND_OF_MINUTE","SECOND_OF_DAY","MINUTE_OF_HOUR","MINUTE_OF_DAY","HOUR_OF_AMPM","CLOCK_HOUR_OF_AMPM","HOUR_OF_DAY","CLOCK_HOUR_OF_DAY","AMPM_OF_DAY","TemporalQueries","zoneId","ZONE_ID","chronology","CHRONO","precision","PRECISION","zone","ZONE","OFFSET","localDate","LOCAL_DATE","localTime","LOCAL_TIME","TemporalAccessor","query","_query","queryFrom","TemporalQuery","_Enum","createTemporalQuery","queryFromFunction","ExtendedTemporalQuery","_TemporalQuery","ENUMS","DayOfWeek","_TemporalAccessor","_ordinal","dayOfWeek","style","locale","MONTHS","Month","_value","months","newMonthVal","leapYear","FEBRUARY","APRIL","JUNE","SEPTEMBER","NOVEMBER","minLength","maxLength","firstDayOfYear","leap","JANUARY","MARCH","MAY","JULY","AUGUST","OCTOBER","DECEMBER","firstMonthOfQuarter","IsoChronology","INSTANCE","month","PATTERN","Period","years","_years","_months","_days","ofYears","ofMonths","ofWeeks","weeks","unitAmount","YEARS","startDate","endDate","LocalDate","_parse","yearMatch","monthMatch","weekMatch","withYears","withMonths","withDays","plusYears","yearsToAdd","plusMonths","monthsToAdd","minusYears","yearsToSubtract","minusMonths","monthsToSubtract","scalar","normalized","totalMonths","toTotalMonths","splitYears","splitMonths","ParsePosition","_errorIndex","getIndex","setIndex","getErrorIndex","setErrorIndex","EnumMap","_map","otherMap","containsKey","retainAll","keyList","keyName","keySet","ResolverStyle","STRICT","SMART","LENIENT","TemporalAdjuster","Temporal","minusAmount","plusAmount","endTemporal","withAdjuster","withFieldValue","adjuster","DefaultInterfaceTemporal","_Temporal","ChronoLocalDate","_DefaultInterfaceTemp","fieldOrUnit","ofEpochDay","toEpochDay","formatter","DateTimeFormatter","StringUtil","ZoneId","systemDefault","getAvailableZoneIds","ofOffset","rules","isFixedOffset","Instant","EPOCH","ZoneRules","Fixed","instantOrLocalDateTime","offsetOfInstant","offsetOfLocalDateTime","instant","offsetOfEpochMilli","epochMilli","localDateTime","validOffsets","standardOffset","daylightSavings","isDaylightSavings","isValidOffset","nextTransition","previousTransition","transitions","transitionRules","_ZoneRules","_offset","_proto2","SECONDS_CACHE","ID_CACHE","ZoneOffset","_ZoneId","totalSeconds","_validateTotalSeconds","_totalSeconds","_rules","_buildId","absTotalSeconds","absHours","absMinutes","MINUTES_PER_HOUR","absSeconds","MAX_SECONDS","_validate","offsetId","ofHoursMinutesSeconds","precededByColon","ch1","ch2","ofHoursMinutes","ofTotalSeconds","ofTotalMinutes","totalMinutes","totalSecs","OFFSET_SECONDS","DateTimeBuilder","fieldValues","chrono","leapSecond","excessDays","dtb","_addFieldValue","getFieldValue0","_putFieldValue0","resolverStyle","resolverFields","_mergeDate","_mergeTime","_resolveTimeInferZeroes","_resolveInstant","_checkDate","resolveDate","_addObject","val1","val2","ap","hap","nod","cod","lod","sod","los","_nos","_cos","_los","hod","moh","som","hodVal","mohVal","somVal","nosVal","_hodVal","ofNanoOfDay","_excessDays","ofSecondOfDay","_excessDays2","dateOrTime","offsetSecs","atTime","atZone","INSTANT_SECONDS","_instant","DateTimeParseContext","_constructorSelf","_constructorFormatter","_constructorParam","_caseSensitive","_strict","_parsed","Parsed","_locale","_symbols","_overrideChronology","decimalStyle","_overrideZone","isStrict","setStrict","strict","setLocale","startOptional","currentParsed","endOptional","successful","isCaseSensitive","setCaseSensitive","caseSensitive","subSequenceEquals","cs1","offset1","cs2","offset2","charEquals","charEqualsIgnoreCase","setParsedField","errorPos","successPos","currentParsedFieldValues","setParsedZone","getParsed","toParsed","setParsedLeapSecond","getEffectiveChronology","dateTimeParseContext","cloned","toBuilder","overrideZone","DateTimePrintContext","localeOrFormatter","_temporal","adjust","_optional","getValueQuery","getValue","setDateTime","IsoFields","QUARTER_DAYS","Field","_isIso","_getWeekRangeByLocalDate","wby","_getWeekBasedYear","_getWeekRangeByYear","THURSDAY","WEDNESDAY","isLeapYear","_getWeek","dow0","doy0","dayOfYear","doyThu0","firstMonDoy0","withDayOfYear","week","doy","_dow","DAY_OF_QUARTER_FIELD","_Field","QUARTER_YEARS","qoy","QUARTER_OF_YEAR","moy","curValue","partialTemporal","yearLong","qoyLong","doq","DAY_OF_QUARTER","_qoy","QUARTER_OF_YEAR_FIELD","_Field2","_proto3","WEEK_OF_WEEK_BASED_YEAR_FIELD","_Field3","_proto4","WEEKS","WEEK_BASED_YEARS","wbyLong","WEEK_BASED_YEAR","dowLong","wowby","WEEK_OF_WEEK_BASED_YEAR","dow","plusWeeks","_dow2","WEEK_BASED_YEAR_FIELD","_Field4","_proto5","newWby","resolved","_proto6","added","DecimalStyle","zeroChar","positiveSignChar","negativeSignChar","decimalPointChar","_zeroDigit","_zeroDigitCharCode","_positiveSign","_negativeSign","_decimalSeparator","positiveSign","withPositiveSign","negativeSign","withNegativeSign","zeroDigit","withZeroDigit","decimalSeparator","withDecimalSeparator","convertToDigit","convertNumberToI18N","numericText","convertedText","availableLocales","STANDARD","SignStyle","fixedWidth","NORMAL","ALWAYS","EXCEEDS_PAD","NEVER","NOT_NEGATIVE","TextStyle","isStandalone","FULL_STANDALONE","SHORT_STANDALONE","NARROW_STANDALONE","asStandalone","FULL","SHORT","NARROW","asNormal","CharLiteralPrinterParser","_literal","print","append","CompositePrinterParser","printerParsers","_printerParsers","withOptional","setLength","FractionPrinterParser","minWidth","maxWidth","decimalPoint","fraction","convertToFraction","outputScale","effectiveMin","effectiveMax","minEndPos","maxEndPos","moveLeft","convertFromFraction","_min","decimal","EXCEED_POINTS","NumberPrinterParser","signStyle","subsequentWidth","_field","_minWidth","_maxWidth","_signStyle","_subsequentWidth","withFixedWidth","withSubsequentWidth","_isFixedWidth","contextValue","_getValue","effMinWidth","effMaxWidth","pass","parseLen","_parseLen","_setValue","ReducedPrinterParser","_NumberPrinterParser","baseValue","baseDate","_baseValue","_baseDate","absValue","basePart","isFixedWidth","PATTERNS","OffsetIdPrinterParser","noOffsetText","_checkPattern","bufPos","appendChar","noOffsetLen","arrayIndex","parseText","required","converted","INSTANCE_ID","PadPrinterParserDecorator","printerParser","padWidth","_printerParser","_padWidth","_padChar","preLen","endPos","resultPos","SettingsParser","SENSITIVE","INSENSITIVE","StringLiteralPrinterParser","ZoneRulesProvider","getRules","ZoneRegion","ofId","ZoneIdPrinterParser","description","newContext","nextNextChar","_parsePrefixedOffset","availableZoneIds","zoneIdTree","ZoneIdTree","createTreeMap","maxParseLength","treeMap","parsedZoneId","parseLength","parsedSubZoneId","isLeaf","prefixPos","sortedZoneIds","ZoneIdTreeMap","_treeMap","idLength","subZoneId","subTreeMap","DateTimeFormatterBuilder","_active","_parent","_padNextWidth","_padNextChar","_valueParserIndex","_of","dtFormatterBuilder","parseCaseSensitive","_appendInternalPrinterParser","parseCaseInsensitive","parseStrict","parseLenient","appendValue","_appendValue1","_appendValue2","_appendValue4","_appendValuePrinterParser","pp","appendValueReduced","_appendValueReducedFieldWidthMaxWidthBaseDate","_appendValueReducedFieldWidthMaxWidthBaseValue","activeValueParser","basePP","_appendInternal","appendFraction","appendInstant","fractionalDigits","InstantPrinterParser","appendOffsetId","appendOffset","appendZoneId","appendPattern","_parsePattern","appendZoneText","appendText","appendLocalizedOffset","appendWeekField","FIELD_MAP","padNext","_parseField","_start","appendLiteral","optionalStart","optionalEnd","BASE_DATE","_padNext1","_padNext2","cpp","_toPrinterParser","toFormatter","inSecs","inNanos","inSec","inNano","zeroSecs","ldt","LocalDateTime","ofEpochSecond","_zeroSecs","_hi","_lo","_ldt","minDigits","maxDigits","ISO_LOCAL_DATE","instantSecs","yearParsed","secVal","nanoVal","toEpochSecond","StringBuilder","_str","_decimalStyle","_resolverStyle","_resolverFields","_chrono","_zone","parsedExcessDays","PARSED_EXCESS_DAYS","parsedLeapSecond","PARSED_LEAP_SECOND","ofPattern","withChronology","withLocale","withResolverStyle","_formatTo","appendable","parse1","parse2","_parseToBuilder","_createError","abbr","_parseUnresolved0","parseUnresolved","PARSER","MonthDay","dayOfMonth","_month","_day","zoneIdOrClock","now0","nowZoneId","nowClock","Clock","systemDefaultZone","system","clock","monthOrNumber","ofMonthNumber","ofNumberNumber","parseString","parseStringFormatter","FROM","monthValue","isValidYear","Year","isLeap","withMonth","withDayOfMonth","atYear","isAfter","isBefore","PARSER$1","YearMonth","_year","ofNumberMonth","isSupportedField","isSupportedUnit","PROLEPTIC_MONTH","DECADES","CENTURIES","MILLENNIA","ERAS","_getProlepticMonth","isValidDay","lengthOfMonth","lengthOfYear","adjusterOrField","withYear","newYear","calcMonths","monthsUntil","atDay","atEndOfMonth","PARSER$2","isoYear","parseTextFormatter","isValidMonthDay","monthDay","ofYearDay","atMonth","atMonthMonth","atMonthNumber","atMonthDay","yearsUntil","TemporalAdjusters","firstDayOfMonth","Impl","FIRST_DAY_OF_MONTH","lastDayOfMonth","LAST_DAY_OF_MONTH","firstDayOfNextMonth","FIRST_DAY_OF_NEXT_MONTH","FIRST_DAY_OF_YEAR","lastDayOfYear","LAST_DAY_OF_YEAR","firstDayOfNextYear","FIRST_DAY_OF_NEXT_YEAR","firstInMonth","DayOfWeekInMonth","lastInMonth","dayOfWeekInMonth","RelativeDayOfWeek","nextOrSame","previousOrSame","_TemporalAdjuster","_TemporalAdjuster2","_dowValue","curDow","dowDiff","_temp","_curDow","daysDiff","_TemporalAdjuster3","_this3","_relative","calDow","_daysDiff","prolepticYear","_updateResolveMap","prolepticMonth","yoeLong","era","_y","_y2","_days2","aw","ad","_y3","_weeks","_days3","_aw","_date","OffsetTime","_time","OffsetDateTime","toOffsetTime","clockOrZone","_now","ofInstant","ofTimeAndOffset","ofNumbers","minute","secsOfDay","epochSecond","ISO_OFFSET_TIME","toNanoOfDay","atDate","_toEpochNano","_withLocalTimeOffset","toLocalTime","truncatedTo","nanosUntil","MINUTES","NANOS_PER_MINUTE","HOURS","NANOS_PER_HOUR","HALF_DAYS","withHour","withMinute","withSecond","withNano","withOffsetSameInstant","withOffsetSameLocal","ChronoZonedDateTime","toLocalDate","toInstant","toSecondOfDay","toLocalDateTime","strcmp","thisEpochSec","otherEpochSec","ZonedDateTime","_ChronoZonedDateTime","_dateTime","of2","of3","of8","ofLocal","dt","preferredOffset","trans","offsetAfter","validOffset","ofInstant2","ofInstant3","ofStrict","isGap","ofLenient","zdt","_from","__from","ISO_ZONED_DATE_TIME","_resolveLocal","newDateTime","_resolveOffset","withEarlierOffsetAtOverlap","isOverlap","earlierOffset","offsetBefore","withLaterOffsetAtOverlap","laterOffset","withZoneSameLocal","withZoneSameInstant","withFixedOffsetZone","minusWeeks","ofDateTime","ofDateAndTime","ISO_OFFSET_DATE_TIME","atZoneSameInstant","atZoneSimilarLocal","toZonedDateTime","_withDateTimeOffset","_ChronoLocalDate","epochDay","adjustCycles","doyEst","yearEst","zeroDay","DAYS_PER_CYCLE","marchDoy0","marchMonth0","_resolvePreviousValid","_get0","_prolepticMonth","newMonth","weeksToAdd","mjDay","weeksToSubtract","until1","until2","daysUntil","_monthsUntil","packed1","packed2","calcDate","atTime1","atTime4","_atTimeOffsetTime","atStartOfDay","atStartOfDayWithZone","MIDNIGHT","dateTimeAfter","_compareTo0","otherDate","yearValue","dayValue","ChronoLocalDateTime","_ChronoLocalDateTime","_ofEpochMillis","localSecond","localEpochDay","ISO_LOCAL_DATE_TIME","_withDateTime","newDate","newTime","MICROS_PER_DAY","MILLIS_PER_DAY","_plusWithOverflow","totDays","NANOS_PER_DAY","MINUTES_PER_DAY","HOURS_PER_DAY","totNanos","curNoD","newNoD","timeUntil","endTime","atOffset","_hour","_minute","_second","_nanoOfSecond","_nano","secondOfDay","nanoOfDay","ISO_LOCAL_TIME","ham","unitDur","dur","mofd","newMofd","sofd","newSofd","nofd","newNofd","hourValue","minuteValue","secondValue","nanoValue","systemUTC","ofEpochMilli","ISO_INSTANT","MIN_SECONDS","nval","_nval","_plus","_nanosUntil","toEpochMilli","_secondsUntil","secsDiff","nanosDiff","otherInstant","SystemClock","fixed","fixedInstant","FixedClock","baseClock","OffsetClock","withZone","_Clock","getTime","_Clock2","_zoneId","_Clock3","_baseClock","ZoneOffsetTransition","_transition","_offsetBefore","_offsetAfter","dateTimeBefore","durationSeconds","SystemDefaultZoneRules","offsetInMinutes","getTimezoneOffset","offsetInMinutesBeforePossibleTransition","offsetInMinutesAfterPossibleTransition","_throwNotSupported","SystemDefaultZoneId","ZoneIdFactory","SYSTEM_DEFAULT_ZONE_ID_INSTANCE","isInit","MIN","MAX","NOON","_init$k","isoWeekOfWeekyear","isoWeekyear","MONDAY","TUESDAY","FRIDAY","SATURDAY","SUNDAY","EPOCH_0","SYSTEM","BASIC_ISO_DATE","ISO_OFFSET_DATE","ISO_ORDINAL_DATE","ISO_WEEK_DATE","ToNativeJsConverter","zonedDateTime","toDate","convert","NativeJsTemporal","_epochMilli","nativeJs","jsJoda","jsJodaExports","len1Copy","len2Copy","len1o","matrix","ptrPrev","ptrC","ptrChar2","ptrEnd","c3","char1","len2o","ptr","EditOp","ops","eop","spos","o1","dpos","o2","requireNoNulls","noOfMB","mb","matchingBlocks","MatchingBlock","sbeg","dbeg","finalBlock","numberOfMatchingBlocks","mbIndex","filterNotNull","noOfBlocks","oIndex","OpCode","opCodes","oc","send","dend","oc2","str1","str2","xcost","row","c2p","numCopy","haystack","needle","lensum","cutoff","choices","score","yields","ExtractedResult","toStringFunction","BoundExtractedResult","maxOrNull","extracted","sortedDescending","best","results","SimpleRatio","stringFunction","PartialRatio","TokenSort","TokenSet","WeightedRatio","Extractor","peek","copyOf","copyOfRange","DefaultStringFunction","NO_PROCESS","ratio","stringProcessor","intersection","s1Copy","s2Copy","tokens1","tokens2","sortedInter","diff1to2","diff2to1","sorted1to2","sorted2to1","sorted1","sorted2","inputCopy","take","wordsArray","joined","sorted","col","sep","PriorityQueue","pq","poll","elems","tryPartials","TRY_PARTIALS","UNBASE_SCALE","partialScale","PARTIAL_SCALE","lenRatio","unbaseScale","partialSor","partialSet","tokenSort","tokenSet","shorter","longer","dist","longEnd","longStart","longSubstr","scores","sp","arrayBuffer","frames","_setIntegerFrame","_setStringFrame","_setPictureFrame","pictureType","mimeType","useUnicodeEncoding","_setLyricsFrame","language","_setCommentFrame","_setPrivateFrame","_setUserStringFrame","_setUrlLinkFrame","lyrics","removeTag","Blob","getURL","URL","createObjectURL","revokeURL","revokeObjectURL","XMLHttpRequest","open","responseType","dispatchEvent","MouseEvent","createEvent","initMouseEvent","navigator","userAgent","HTMLAnchorElement","webkitURL","download","rel","location","msSaveOrOpenBlob","autoBom","innerText","HTMLElement","safari","FileReader","onloadend","readAsDataURL","downloadProgressReport","configuration","SpotiFlyerMain","SpotiFlyerList","SpotiFlyerRootImpl","$module$kotlin_css","$module$inline_style_prefixer","$module$kotlin_wrappers_kotlin_react_dom_jsLegacy","$module$styled_components","globalStylesCounter","invoke","css","KeyframesBuilder","invoke_0","StyledElement","endsWith_7epoxm$","removeSuffix","removeSuffix_gsj5wt$","lastIndexOf_8eortd$","CSSBuilder","Kind_INTERFACE","joinToString_fmv235$","LinkedHashMap_init","LinkedHashMap_init_q3lmfv$","isStatic","isLoaded_1mk3xi$_0","StyleSheet$inject$lambda$lambda$lambda","closure$it","ruleSets_8be2vx$","CssHolder","sheet","ruleSets","sheet_0","getClassName_0","StyledBuilder","StyledDOMBuilder","type_redftz$_0","css_en1qsi$_0","injectGlobal","globalStyleComponent","createGlobalStyle","Element","closure$reactElement","closure$element","reactElement","Styled","Styled_instance","cache_0","Styled$wrap$lambda$lambda","_css","dependsOn_tsq8y7$","inject","css_wopuc9$","destination_0","element_0","destination_1","tmp$_2","tmp$_3","destination_2","item_0","tmp$_4","destination_3","item_1","tmp$_5","tmp$_6","$receiver_1","element_1","invoke_32jdrg$","getValue_n5byny$","this$CssHolder","closure$property","allowClasses","styleName","Styled_getInstance","createElement_lnfw8r$","wrap_0","answer","rawStyled","multiRules","declarations","wrappedType","styledProps","className","package$styled","styled","injectGlobal_61zpoe$","rawStyled_za3rmp$","uppercasePattern","msPattern","toHyphenLower","hName","ba","Set","ca","ea","fa","ha","ka","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","removeEmptyString","oa","pa","qa","ma","na","la","removeAttribute","setAttributeNS","xlinkHref","ra","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","La","Na","Oa","Pa","prepareStackTrace","construct","Qa","_render","Ra","Sa","Ta","nodeName","Va","_valueTracker","setValue","stopTracking","Ua","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","$a","ab","eb","fb","selected","defaultSelected","disabled","gb","hb","ib","textContent","kb","lb","ob","MSApp","execUnsafeLocalFunction","namespaceURI","innerHTML","firstChild","pb","lastChild","nodeType","nodeValue","qb","gridArea","lineClamp","tb","setProperty","ub","menuitem","area","embed","img","keygen","meta","param","wbr","vb","wb","is","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","cc","sibling","dc","gc","hc","ic","jc","kc","lc","mc","nc","Map","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","delete","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","priority","hydrate","containerInfo","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","bd","cd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Jd","clipboardData","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","8","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","Od","Alt","Control","Meta","Shift","Pd","Rd","repeat","which","Td","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Zd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","$d","ae","be","documentMode","ce","de","fe","ge","he","le","color","datetime","email","tel","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","De","Ee","Fe","He","Ie","Je","Ke","Le","nextSibling","Ne","HTMLIFrameElement","contentWindow","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","getSelection","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","$e","has","af","bf","cf","df","capture","passive","Nb","ef","ff","parentWindow","gf","hf","je","ke","jf","kf","lf","mf","autoFocus","nf","pf","qf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","Cf","Df","Ef","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","childContextTypes","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","childLanes","tg","firstContext","lanes","ug","vg","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Kg","_reactInternals","Hg","Ig","Jg","Lg","shouldComponentUpdate","Mg","contextType","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","Pg","Qg","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","elementType","Vg","implementation","Wg","Xg","Yg","Zg","$g","ih","memoizedProps","revealOrder","jh","kh","lh","mh","oh","pendingProps","qh","th","uh","_workInProgressVersionPrimary","vh","wh","Fh","Gh","Hh","baseQueue","Ih","Jh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","getSnapshot","setSnapshot","Oh","Ph","Qh","Rh","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","fi","gi","ii","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","qi","getDerivedStateFromError","ri","pendingContext","Bi","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","yi","isBackwards","rendering","renderingStartTime","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onclick","createElementNS","createTextNode","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","WeakMap","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","WeakSet","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","$i","focus","aj","display","bj","onCommitFiberUnmount","componentWillUnmount","cj","dj","ej","fj","gj","insertBefore","_reactRootContainer","hj","ij","jj","kj","lj","mj","nj","oj","pj","X","Y","rj","sj","tj","uj","vj","wj","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","Me","compareDocumentPosition","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","onCommitFiberRoot","fk","gk","pendingChildren","jk","mutableSourceEagerHydrationData","kk","lk","mk","nk","ok","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","hasAttribute","sk","uk","hk","unstable_observedBits","unmount","querySelectorAll","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","yk","isDisabled","supportsFiber","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","ForwardRef","Lazy","Memo","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","getShim","isRequired","ReactPropTypes","symbol","arrayOf","instanceOf","objectOf","oneOfType","shape","exact","checkPropTypes","PropTypes","capitalizeString","prefixProperty","prefixProperties","newStyle","requiredPrefixes","capitalizedProperty","styleProperty","prefixValue","metaData","processedValue","addIfNew","addNewValuesOnly","createPrefixer","_ref","prefixMap","combinedValue","_processedValue","wms","grab","grabbing","alternativeValues","alternativeProps","alignItems","justifyContent","flexWrap","_slicedToArray","_n","_s","sliceIterator","isSimplePositionValue","isComplexSpanValue","alignmentValues","displayValues","grid","propertyConverters","alignSelf","msGridRowAlign","_value$split","_value$split2","_end$split","_end$split2","maybeSpan","maybeNumber","_value$split3","_value$split4","_end$split3","_end$split4","gridTemplateColumns","msGridColumns","gridTemplateRows","msGridRows","justifySelf","msGridColumnAlign","marginBlockStart","marginBlockEnd","marginInlineStart","marginInlineEnd","paddingBlockStart","paddingBlockEnd","paddingInlineStart","paddingInlineEnd","borderBlockStart","borderBlockStartColor","borderBlockStartStyle","borderBlockStartWidth","borderBlockEnd","borderBlockEndColor","borderBlockEndStyle","borderBlockEndWidth","borderInlineStart","borderInlineStartColor","borderInlineStartStyle","borderInlineStartWidth","borderInlineEnd","borderInlineEndColor","borderInlineEndStyle","borderInlineEndWidth","maxHeight","columnWidth","minHeight","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","prefixMapping","Webkit","Moz","WebkitBoxOrient","WebkitBoxDirection","grad","propertyConverter","alternativePropList","propertyPrefixMap","outputValue","multipleValues","singleValue","dashCaseProperty","prefixes","pLen","webkitOutput","mozOutput"],"mappings":"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EpC,IAEA,iC,MAAA,UACA,cAAwC,MAJxC,EAIwC,WAHxC,SAGwC,WAFxC,M,IACA,Q,uCAGuB,G,uEANvB,Q,2DAFJ,a,qBAEI,IAFJ,I,qBAAA,E,MAEI,cACA,qBACA,sBACA,wBACA,mB,sGEvdA,e,0FCtDA,Q,0BACA,W,+DAFJ,K,mBAAA,OACI,E,iBADJ,MACI,sB,OACA,QAFJ,uC,OAAA,O,qBAaI,EADA,sBAGA,MAAuB,KAAO,Y,0GCZ9B,8BAE8B,M,aAE1B,kB,8HC3BR,KAaQ,E,+BACO,Q,yCAIP,E,OACA,E,sBLqhBA,c,MADA,E,WAA0B,gB,WAC1B,S,8EATJ,oB,+BACA,sB,wEACA,6DACA,M,oEANJ,W,yLEpfA,mCtHgLQ,c,MAAQ,E,8CACA,I,0CsHvKZ,KtHqKA,QsHnKJ,wB,kBAKmC,oBAA+C,mC,4BAMX,mC,OpISnE,KoIT4G,kB,mCAMxE,yBAG7B,0B,sOACuB,gC,yRAE9B,M,MADiC,Y,EAAjC,gCAAiC,qE,qCACjC,gC,6gBAAA,qC,oBAAA,wC,qBACuC,c,MAAQ,O,8EAE3C,4B,4CAGA,qB,gBAEA,e,oSI/CmE,sB,eHlCvE,oDAAgD,IvHsN1B,iC,IAAV,EuHpNM,OAAJ,KAA4B,G,SvHqN9B,EAFZ,EuHpNM,gBAKV,4DvHgN0B,EuHhN1B,IvH+MiB,W,OACT,Q,yDACQ,2CuH/MyB,M,6IAKjC,wC,oBAGA,E,WvH+DI,0B,uBuH5DR,c,MACA,E,8EAgBoC,4B,qIAcpC,0BAAuB,c,OACvB,mE,sBACA,W,MAA6B,oCAAS,EAAc,SAAd,a,oLC/BtC,oB,mBAFA,oBAAgC,4JAM1B,6E,+FAJN,oB,+CA4BuE,G,8CA6BW,E,mDAa7E,oCACL,O,KAAA,Q,aAc4E,c,MAd5E,O,2GCxEA,M,gBAGJ,Y,4BAC+C,IAC3C,O,mHA6DA,iB,YAAA,c,8CErF2B,EAM3B,gE,iCAVJ,QFiCA,sC,mBAAA,gFAMa,2C,mCAED,aAAe,uC,oBAR3B,6IAMI,iC,kDAkDA,E,4CAAA,O,iCEzFJ,M,uBAAA,K,qBAKI,WALJ,O,wJC8FyC,cAAa,mBAmBlD,MAnBkD,WAmB1C,K,IAAA,Q,qBAEZ,kB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6PAYH,uC,+RxCmKzD,UAAY,EACZ,KAAI,QADJ,a,+EAmBJ,EAAI,UAAQ,YAAR,E,gCACoB,I,gBAGpB,gBADA,E,uIyC9ZJ,GpK9GG,KDZ4C,MqK8H/C,cAAO,E,gJCgDP,yBAFyB,E,2BAMsC,uB,+BAsF3D,Q,+GACmB,K,uDAWD,6B,iBAAA,E,gGCtRtB,sB,qBAtBsB,OAAe,QAC7B,sB,EAA2B,4BAAnB,EAA0B,gB,8MCoD1C,KAAI,S,0DAY0B,KAAN,+B,EAAA,cAAM,E,sLAmDqB,Q,gCAAA,Q,2BAFnD,aAAyC,S,sFzBzIT,G,0CyBgK1B,c,iDANS,e,wBAAA,gC,gBAOnB,uB,oBAfA,EzBlJoC,I,mFyBkJpC,e,mDC/BY,E,yDAAO,G,yCCzFL,qC,iGAAA,M,kEAAE,e,uHAAA,2B,6HAAZ,uC,iIAAA,mB,+EAyB6B,E,yCAM7B,EAAO,a,8ICjD4D,wC,IAAA,uB,OAAA,sB,4GAiCrD,Q,0Hd+Hd,E,4MAlBF,c,mBAEE,S,8FAEA,gB,0BAaJ,e,MAi9DI,iB,iUADkE,gB,OAAA,2D,iIAd1E,W,OAaqE,8BACjE,yBAAoB,UAAR,8BC/mEyB,W,OAgBrC,KAJwB,a,kCACxB,eAGA,I,iBAAA,IACI,IADJ,gBAEI,cAAwB,I,OACxB,gBAA4B,c,qBAK5B,oD,yLARJ,+BAMsB,W,+CAMmB,E,qBADrB,IAAC,EAAD,gB,4CAEsB,0BAAc,0B,IADvB,qFAAQ,2B,iIAYrB,O,O1BkFpB,E,O0BhFc,S,MACuB,a,yCAErB,EAAI,O,EAA2B,GAAM,K,GACrC,I,oB/JgE6B,EAAM,qB,uH+JrDhB,E,yBAC/B,IADqC,OAAY,S,GAAlB,S,aAE/B,EAAyB,aAAgB,M,wDc5Ec,kC,Id0ExB,E,qB/JqDgB,a,4D+J/CN,yBAAQ,K,wDACjB,K,oD1B2DhC,E0BpDQ,EADE,wBACF,UADE,IACF,aACe,mBAAM,I,2BAMJ,mBAAb,KAAa,OAAY,I,yD/JgCI,E,8C+JzB7C,G,C1BqCA,4B,M0BhCc,E1BiCV,IAAO,G0BjCG,kE,qD/JoB+B,E+JhB7B,EAAI,cACA,S,OAKpB,Y,gC/JUmD,uB,G+JVnD,Q,iB/KlHa,a,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C,MACA,SAAa,SAAO,aAAP,IAAb,M,iBAEwB,yC,yGVpHpB,a,4CAhFJ,kB,iBAWJ,iB,mBAmCQ,E,EAAc,EAAc,gB,MAAd,qB,YA5BqD,kB,ItDgHhE,iBAAP,EAAO,U,8CsD9GX,EAAI,EAAI,wBAAR,e,0BAE+B,QAC3B,kB,UAAA,wBAEG,qBf6CwC,G,qW0BNvC,E,qdAER,E,yCAPyB,qB,UAAA,a,EAAA,kE,yBAAA,E,gBAFuD,uB,KAAA,mD,cAAA,e,+NAEpE,gB,WAqDR,+B,wJACF,a,qRADE,kB,0OAEE,yBAAe,OAAf,qC,oaC5Fe,kCAAU,WAAV,kD,oEAAL,+D,gBAAA,E,OAAA,E,8SADsF,M,mCAAA,E,aAAA,sB,2Od0KvE,2H,EAAA,e,iEAAA,kB,uBAhBf,yE,KAAA,yC,IAAA,e,0KAKK,uB,qGAEb,wC,qDAE6B,e,8DAOpB,I,mBAAA,mC,oIANI,kB,6CAVH,iB,iBAGV,c,wDAHU,M,6JCwE2B,sB,OAAA,qC,OAAA,0B,oYAAc,K,iBAAhB,qC,UAAA,oB,OAAA,e,yCAAA,+B,iBADzB,qD,OAAA,+G,yGAClB,a,eAAA,iC,0JAAA,E,4MARJ,mCAOsB,qBAKuC,E,0FAD7D,0DACsD,4CAEtD,sC,OAAA,0BxBnLA,c,MAAA,E,WAAA,M,yGAQsB,yBAAV,GAAU,iC,kBAAA,c,0UwBwLE,a,WAAA,K,WAAA,kB,2BAAA,kD,sBAAsB,qB,yPAAf,kD,YAAA,I,2FAAL,qB,8GAAF,c,2FAJR,6D,kBAAA,c,KAAA,kF,KAAA,E,2WAAA,iC,0CAAA,kC,oGAThB,SAQI,S,KACA,E,4DAQJ,uE,YzLzRA,iB,MyLqSmC,qC,gMctRnC,oCARA,gB,EAAA,a,kGrB+BA,sE,iCsBnCY,mB,ODYZ,E,mCrBuBA,iC,mBAAA,E,WAoB8C,KsBvDlC,a,MAAA,a,6mBALZ,kB,QAAA,QAUA,OAVA,uC,EAAA,E,EAAA,E,sBAKY,e,WAER,oBAPJ,wBAUA,SrB6DA,O,4UAD0C,0B,wFkBuDlC,sH,2KACF,gB,KACI,EAAe,gB,iFAHrB,kB,6BlBtDA,cAAW,+C,kKAjBf,UAkBA,E,2BAlBA,E,qDAkBA,G,iBAQiB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,G,WAEI,G,qECNA,Q,oBLiEa,E,WAAN,iB,qDAwB6E,6B,2EKxFnE,E,oCZ0OF,iCAAgC,YAAhC,WAAX,I,gDAGK,GAET,G,0CYjOgB,OAAhB,KAAsB,QACtB,SACA,G,qBZ0Ne,e,OAAgC,eAA3C,WAEA,kB,yBAVM,M,CAAA,kB,GAAd,EAAc,gB,aAA2B,uD,eaiJrC,M,KAEgB,mB,mBhBuBX,E,OAAA,G,qDIrRW,uB,oGAqBJ,KAAgB,M,OAChB,Y,GY+QL,eZ5QS,EAAa,IAAb,G,iDAOJ,I,MAEA,e,UAEa,Y,IYkQjB,W,OAAJ,+B,GAGQ,mB,wCZrQY,a,sCAOC,gB,EY2PjB,Q,EAAJ,OACI,EADJ,S,iCAGQ,kB,YACA,c,EAEJ,uC,EANJ,mBAOI,EAPJ,I,EZ3PoB,Q,cYiQhB,W,aZhQgB,I,ea7HO,aAA/B,qCAA+B,Y,sCAmIvB,GAAM,W,kGAUtB,4BAMyD,0B,iGFtL9C,MEoK2D,yC,2DAO1D,iC,wGAhER,8B,gBAAA,iDAhH6B,M,I5BVjC,oB,uEeiIsB,Q,+DAEG,6C,+JfnIzB,2DAGQ,EAHR,e,OAII,KAAO,iB,2BAJX,gBAOA,qD,+DNLA,W,OAAA,wB,IAAA,qCAOyB,gCAET,sBAAM,aAAyB,iBAAzB,qBATtB,gD,qDAAA,QAMS,oBACD,sBAKE,GAIV,gDAhBA,O,4CAAA,Q,2CAAA,Q,GAOgB,kC,IAAS,E,+BAPzB,oB,IASgB,EAAM,mBAAyB,GAT/C,OAUY,K,uBAVZ,sE,mBqBEA,qDJoZa,kBAAc,QIhZX,4BAA8B,W,gBAE9B,qB,wBJ8YZ,GItYJ,+C,MAEA,gE,iBAAA,wB,KAAA,O,CAAA,kG,iNAWI,I,gMACgB,qBADhB,E,kBACgB,I,iIAAZ,E,sED2OJ,qB,IACc,uB,yCCzOQ,8B,0BAsFtB,I,SJ+RS,8B,qBAAA,6B,sBIpXS,a,+CAGM,c,oGAQJ,a,yBAXR,aAeQ,aAAI,gB,qCAEA,8C,uBAIM,gC,cAGN,uC,0FA4EZ,oB,8BAS4B,a,gCAChB,Y,qBAMQ,a,qBAGZ,cAAgB,yBAQpB,oB,yDAI4B,6B,gHAhIpB,uC,qCAMR,uC,kLAcI,W,wIAjBA,gBAAK,EAAL,wD,sRAPZ,uB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FgC,Y,KsCnF5B,M,MAEI,GpRUR,oCoRVQ,Y,iEpRUR,OoRPW,2BpROX,iE,0EoRHJ,G,sCAEA,0BAQI,e,IAAA,Y,OACA,0BtC2EyB,KAAO,UsCzEjB,mBxC9JX,EAAQ,EAAR,UwC8JJ,4BxC7JO,kBwC8JX,iEAEA,qDAQI,QACA,4B,kBAAA,ctCyEyB,YsCvEzB,GAAY,EAAa,U,IAEzB,EAAI,UpR1BJ,0BoR4BoB,e,gBpR5BpB,coR+BW,YACS,K,2DAcpB,c,MAAA,E,WxClMI,Y,WAAuB,I,OwCoM3B,GAAgB,KACpB,cAWI,OATJ,WAQI,OACA,G,+BpR5DA,kBoRsEW,KpRtEX,gCqR43BkE,QrR33BvD,G,yBoRoFX,ExCzOA,EwC2OgBvtC,ExC3OZ,I,IAAuB,YwC2OQ,IAAnC,iBAAgB,G,kDpRvFhB,kBoR4GW,KpR5GX,gCqRk7BgE,QrRj7BrD,G,wEoRiHf,uDAQI,W,2BACA,EtCoHa,gBAAc,EAAd,GsClHC,IxCjRV,YAAQ,KwCiRE,gCxCjRa,SwCkR/B,uBAEA,oC,sDE5PqC,gBAAiC,qBAAe,EAAf,qCAAhC,M,2HAAtC,Q,gBACkD,4DAAQ,M,oBAE1D,uBAAwF,sBpDKrE,O,gCoDWI,EAAuB,OAJ1C,QACA,E/BuC8C,Q+BrCvC,IAAP,IACmB,EAAM,EAAU,OAAhB,K,IAAf,iBAAwD,E7NiOrD,KAAK,O6NjOgD,EAAxD,2B,GACA,G,CAEI,Q,IAAiC,MAAQ,EAAR,E,OACjC,e,oFACQ,EAAQ,EAAR,EAAQ,EAHpB,qBAMkC,e,oGAatB,IAAZ,I,UAGR,QAA0E,gB,8DAI/B,MAAC,oB,6FAE5C,U,UAAA,oBAAsC,wD,sBAAtC,M,yCAAA,c,4B/B4U2B,IAAd,c+B5Ta,IAAlB,IACI,WAAc,KAClB,MAAS,eAAO,EAAP,qC/B0Tb,M+B7TA,I/B8TA,UAAa,E+B9Tb,IAQA,EAAO,G,kBAIP,UAAc,EAAgB,EAAR,MACtB,SAAuB,K,4B5B4KD,IAAV,I,UAEW,Q,EAAA,W,+E4BzKnB,EAAU,EAAM,MAChB,Q/BjCyC,I+BiCxB,E/BjCwC,S,U+BkCnC,I,M/BySjB,O+BvSL,E/BuSW,E+BvSX,G,oCCrFJ,I,wBAEE,c,yFDoFM,W,OAIA,GADI,EAAO,O,G/BmSnB,0CACA,E+BxSI,E/BwSJ,+B,G+B5RwB,M,+BAER,E,UAHJ,sC9NyKuC,E8NnKnC,I9NmKmC,sB,8CkMVvC,Q,sBAGJ,IAAU,aAAV,uC,cAGkB,Q4BrL1B,I,mC5BsL4B,E,MAAA,KH/NU,S,oCG8OlC,UACI,Q,oF4BpKR,IAAI,UAAJ,MACI,KAAW,GAAX,e,I5B4HJ,IAAI,EAAU,E,QACA,S4B5HV,E5B4HU,G,e4B3HG,K/BuQR,qB,c+BpQG,QFiEZ,cAAY,MAER,EAFQ,WpR9DZ,SoR8DY,WpR7DD,IsRPM,a/BwQjB,gBAAa,Y,GACN,I+BzQC,U/ByQD,c,iD+BlQe,mB,+BAC8B,Y,qE5B+HpC,IH3M6B,U,kEGiNrC,c,mBAGkB,Y,sBACd,K,qBAAgB,W,sH4BjI5B,eAAO,E,sBClIH,EAAM,iBD+Jd,uBACI,QAAmC,G,QACnC,sB,iFAFJ,Q,yCAAA,YAK8B,I,IAL9B,sB,4BAK8B,U,CAAqB,QAAQ,EAAR,EAApB,Q,oBAC3B,0B,EAA4C,GAAmB,IAAnB,E,QACA,IAAmB,EAAnB,E,0EAFjB,Q,MAA/B,a,8BAAA,SAKiD,e,8F5BoEM,mB,8C6B9OjD,M,gBDsLuF,E,GAI7D,O,oDC5L5B,E,kCD4L4B,K,IALpB,IAcG,EAdH,I,K5BmEQ,I4BhDJ,E,6C5BkDI,GH3M6B,I,8BGiN3B,iBAGG,kBAAK,SAAoB,EAApB,yC,IACd,M,kDAEI,c,mHASR,G,sGAKA,EAAiB,iB,qFArEzB,GACc,EAA2B,UAAzC,EAAc,e,cAIK,M,E4BNqB,QAEjB,GACK,I,QAEI,MACZ,EADY,wCE7N5B,I,GDUF,KACQ,IAAN,E,yBDkN4B,M,SAJpB,2BAcA,GACA,GAAA0S,EAAA,G5BVA,E,SAGJ,EAAU,EACC,Q,SAAgC,EAA3C,QAEA,I,WACK,E,WAET,GACI,e,M4BKD,IAAe,E,kBCrOtB,Q,KDyOI,GAAM,OADN,KAAAA,EAAA,IAKG,Q,mBGlQ2D,I,EAAA,I,mFAA/B,kB,wGAA+B,E,yDAAtE,4B,QAAuC,MAAA7K,E,kBAA+B,IAAAA,E,kBAAtE,+B,OAEA,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B,U,qDA6CvC,M9CpCkD,aAAR,O8C0C1C,W,wIAGJ,E,WACO,MAtDX,G,8B5O8LA,Y,W4O5LA,I,IGtDgC,G,SHmExB,Q,qBANQ,OAAZ,IACA,OACc,G,0BASD,IAAb,IACA,UAEO,IAAP,I,qCAGJ,e5OoKA,2B6LnEA,+D+CjGA,c,IAII,IACA,uBAAQ,G,kC/CqGJ,UACS,Q+ClGH,eAAW,EAAX,G,MACN,E,SACU,EAAU,a,IAAsB,EAAAA,cAAA,E,WAA1C,O5OgKQ,sC4OhKR,YAII,c,QAGJ,uBAAW,G,6BAIX,Q,kB/CsFI,IAAO,kB,6CAGX,mC,oB+CpFJ,YACA,E,6BI1HJ,QAK2C/sC,EAAA,QlCGzB,IkCHyB,IAAapP,EAAA,sBlCItC,ckCJsC,gBAAa,S,IAAA,IlCK9C,cAAS,EAAT,akCL8C,EAC7D,IAAc,IAAAA,EAAc,G,OAC5B,KAAqB,EAArB,KAGJ,EAqBJ,0BAEA,QAK6B,E,QAJZ,IAAb,I3SPA,E2SQQ,eAA0B,G,I3SP9B,IAda,OAeb,EAAM,gB,I2SQV,QAAe68C,E,KACf,aAAyB,kCAAzB,Y,sBC5CiC,2B,0CFsB0B,Q,ytCHiE3D,oBAEI,EAFJ,iCAKA,IAAa,GAAb,K,wDb1EJ,0CDSA,YCTA,2CDamE,YCX3D,aAAO,+B,YDWD,6C,4ECPd,gC,gBAA6D,QAAN,IAAM,IAAN,axRyD5C,mB,gCwSjEkC,gC,gCACT,gC,gCACuB,gCAAmB,gB,gBACD,gCAAmB,c,oEAHhG,oBAA6C,EAA7C,+BAMA,Q,yuEtDsBA,yB,gFjBgzBI,gC,6PmBxoBA,gB,orBZtHa,yB,WAEK,WAhBkB,S,4DAApC,mB,2GC0EsB,E,uHC/HpB,EACE,kB,wHA2FR,gB,kFAMA,mB,2BAkBI,iBAlBJ,0B,sWE1HI,OAHJ,QC6EA,UAG2F,IAAnB,IV3CpE,Y,ISlC2B,Q,6CzIsT/B,e0InNA,YAG2D,G,EDzG3D,U,6xFc8OkB,QAAd,GAAA5lC,EAAA,G,StB/EsB,IAAN,GAAsC,E,GACxC,OADV,K3KyHO,M2KxHP,Q,IA7CA,EAAI,E,YAgDJ,QAEA,EAAAm7B,EAAA,EsB8EQryC,EAAA,iDAEJ,GAAU,EAAV,mCA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,YAA4C,G,CAC5C,EAAsC,EACtC,SAGA,aACA,G,OACwC,OAAxC,K,cAEA,aAAkD,uB,8HAlBtD,iC,kIAsBJ,qE,iCAIA,iFAEQ,oBAAwB,EAAxB,WrRifE,gBqRjfF,iBtR3HI,aAAY,S,kBACT,e,0DsRwH0B,EAI7B,KAJ6B,M,cEtPZ,4BAEzB,uB,oBACA,G,0EADA,QACA,a,oBADA,qB,6BACA,S,IAAA,c,6EAEiC,c,sDAEC,S,mGCHN,E,WAAC,Y,WAAA,I,IAAwC,Q,qBAAxC,WAAwC,O,mEAAxC,oC,yEAAwC,8B,+EALzE,0BAKiC,yB,wEALjC,oBAKiC,kB,2EAAA,E,WAAwC,a,WALzE,I,0BAgBI,OAhBJ,W,OAgBI,GCXwB,iBAAC,oD,eAwCzB,aAGwC,S,KArCpC,E,YADiB,K,gEAOA,QAIjB,IAAkB,OAHlB,O,GAIA,MAGuC,M,mIAOpB,wBACnB,E,6FAkER,8C,EAAA,K,+GAAA,sC,oCASA,qFATA,Q,mBAAA,+B,8NC1BuB,wC,cAKnB,c,uMAoBA,uB,cCnGA,c,ctVixDgB,QAAAA,M,csVvwDZ,c,mBAmBJ,MAAe,OAJf,QAAmB,Q,uDAGvB,wB,YC/BA,+F,iKCW4B,iB,6CAOF,eAAkCspD,GAAA,WAAjC,a,wFACD,a,2DxViwDN,QAAAtpD,MwVhuDZ,UAAI,E7QCH,e,sD6Q5Be,eAAkCspD,GAAA,WAyBtD,uB9VmCoD,E,e8V3DpD,c,sDAGJ,IAAgD,EAAhD,OACA,I,eAAA,a,CAA6C,e,eACyB,iBAAyB,YAAjB,GAAuC,K,qBAIrH,eAA0D,QAAAtpD,M,IAE1D,E,WAA2D,IAAU,W,cACrE,eAAwD,WAAQ,I,iBACN,eAEX,wBAAY,E,wBAYvD,gB,iExV+tDgB,G,qCAAA,iB,sMyV3wDM,cAEtB,gB,iBACA,kB,EAEA,eAAgB,E,qBA+BhB,KAEQ,E,oBAcZ,M9V8LiC,Q,QMnHgB,EAAM,Q,cNmHtB,e8V7L7B,O9V6L6B,qCAAmB,Q8V7L5B,Y/VuBgC,M+VvBhC,W9VmLpB,G8VnLyB,E9VmLhBqB,O8VlLT,kB,4BCzDJ,O,qJAAA,iC/RiK2C,kB,C+R7Ja,ICDpD,IDCoD,E/R6JS,I+R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S9PvEoC,oE8P2EjE,I,mD6ExD+D,cAIc,8D,6DAAd,4E,sDAAA,gB,uDjGkDvD,kB,iBlSqjDG,yB,4F6Pp6CW,E,yEACV,Y,oFuI1OZ,MAEI,I,IAEA,kBAGA,a,CAGI,I,EAAA,W,uEARJ,G,6GAEA,I,EAAA,E,sBAAA,a,CACI,e,2DpYssDY,c,OAAA,G,qCoY9rDe,EpY+rDxB,EADe,M,mDqYpsD+D,a,gBDWjF,EAAI,OAAiB,KAAqB,EAAc,MACpD,iB,eAAA,O,WpYmwDK,iB,aAAb,qBAAa,coY/vDqB,aAAoB,e,mBAApB,mB,OAG9B,a,oDAGJ,4B,CnS4WuB,GAAhB,E9FrUP,QHktDa,IADb,eACa,a,CAAb,IAAa,eAAAtsB,KAAA,kB,CAAM,GAAO,EGltD1B,S,WiY5BQ,G,OAX0B,G,wCAeW6W,GAAA,U,kBAEyB,E,wEpY6lDtE,E,EAAqC,U,QAAA,M,SACrB,EoY9lD6C,YpY8lD7C,YoY9lD6C,GAAAD,GpY8lD7D,OAAgB,E,iDACT,IAAP,W,+CoY/lD6D,oB,4DAOzD,G,0CAIsB,KAAAxM,M,kBAAA,0BAClB,YAAI,yBACA,eAAO,KAAP,K,8DAOsB,wBAAQ,M,8CAGtC,EACI,eAAI,U,MACOyM,E,mBAIf,E,wDAIA,EAAI,EAAQ,I,OAIZ,a,6CAMA,MACA,+B,QAMA,IAFA,IAAQ,WAER,a,CACa,IAAAD,EAAA,SAAb,IAAa,eAAAA,GACT,e,qDpYyiDR,YAAI,OoYjiDA,I,aAAA,apYkiDY,S,kBAAhB,KAAgB,gBoYliDG,0B,kBpYkiDmC,0B,WoYjiDlD,qB,oDvI8Hc,QACC,e,cAAX,c,uCAEU,6C,wBuIhIlB,O,2DAGI,W,OACA,uB,2CAG0C,wC,cAE9C,qB,kBAAsD,4CAEU,6B,IAAA,E,OAC5D,yBvIuHI,euIvHkB,avIuHtB,mBAAI,K,0HuIvHJ,oC,uBAAA,kC,+CAEA,W,IAAkC,E,iIAET5W,KAAA,aAEzB,mCACI,kDAAS,IAEb,G,2HAIgC,M,qEAEH,2C,yBAEO,aAAU,a,+EAO1C,K,6EAzBwD,a,0CA6BhE,I,YAIgB,8B,YACZ,kB,OACI,OAAO,OAAP,e,OAGJ,gCACA,aAA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AE5C,WACI,kC,0IAIR,uC,+CxY+uDgB,E,MwY5uDZ,G,IxY4uDY,IwY3uDZ,WxY2uDJ,EAAgB,W,KAAA,WwY1uDRgb,EAAA,OAAW,mBAAc,E,OAG7B,EAAO,G,+BAGX,Y,QACI,GAAAnE,GrYcY,GqYXR,EAAO,gBACH,EAAI,W,oCASZ,EAAO,U,qEAIC,E,8CAE4C,aAAT,e,gBAAA,E7YuLlB,EAAA5b,KAAA,W,gHKw5CQ,E,GAAA,S,oBACrB,GwY9kD+C,ExY8kD/D,Q,IAAsB,EwY9kDwD,axY8kD/B,a,KAAA,W,4BAC/C,GAAO,E,8BwY7kD2B,G,uFCrEoB,oB,WACtD,K,yDAQY,E,8CAEqC,aAAS,eAAc,SAAA4W,G,2GzYqoDnC,E,GAAA,S,oBACrB,GyYpoDiD,EzYooDjE,Q,IAAsB,EyYpoD0D,azYooDjC,a,KAAA,W,4BAC/C,GAAO,E,8ByYnoD2B,G,uCAGxB,IAAN,KAAM,iB,yCAIN,MAGJ,wC,MACI,MAG8C,8BAC9C,yBAQA,gC,OAA6B,KAAAo3C,iBAAA,W,oCAGzB,KAAAA,iBAAiB,O,uGAZyB,M,+CAgBlD,OAGS,0B,oBACD,EAAO,O,kBAKH,aACA,gB,0BtYKI,KsYOA,+BAAJ,Y,iBAKA,kB,aAIR,EAAO,eAAP,YxYyDyC,EAAM,K,oJiSxC/C,c,mBrCiJc,sB,WACC,M,4CAED,qB6IjPlB,a7IoPQ,iC,iD6IpPR,M,IAAA,sB,e7I+OQ,e,mC8IzOR,0C,kCAAA,S,4IDLyC,SAAAxjC,GAAA,iDAAAA,M,kEAEP,W,IAAA,E,kFAG9B,E,OACO,4CAAwB,6B,IAA/B,EAAO,E,GACX,K,+BAEA,qCACI,W,yL7ImOc,E,WACC,sB,iBAED,8B,c8IjPiB,qB,8CAMnC,gB,oQACA,sB,e9IwOQ,e,wF+I/OuB,+B,yJDc3B,wBAAa,iBAAsB,U,IAEnC,YACJ,K,kDAQI,a,oCALA,EAAI,OAAQ,KAAK,YAAb9S,KAAA,Q,OACA,YAGJ,GAEJ,G,wCAGI,wBAAW,gB,mM9IiNG,E,WACC,kB,eAED,8B,c+IjPY,qBAC9B,8B/ImPQ,gB+IlPR,gB,oBAEA,E,WAGI,M,0FANJ,2B,kLACA,oE,sCCOI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rB,G,kGF8H+E,mB,mFAAD,iB,SAAA,EAdlF,iB,uBAqCmC,mC,gJASE,uB,8aAoBuB,GAAM,aAAU,4B,+LG9JxE,Q,MAAA,sB,uKAAA,iC,kPA6BoB,Y,oDAGe,Q,kBAAA,qB,iCCtDnC,E,4DACA,4C,uIARJ,YAOI,G,qFCAJ,Slf0HuD,Ekf9FJ,iB,uHAfnD,SAeI,Elf8FmD,iB,kQmf/E3C,eAEmB,mB,sBAAA,sE,wCAeD,2B,OAAA,sB,sJAUK,InfvD/B,EmfuDI,EAAuC,UAAvC,QAA2B,O,InftD3B,eACA,EAAM,W,sImfkE8B,e,MAAC,0B,iEAHzC,K,WA8BJ,kG,kCAfW,O,kBhZxEiF,E,4D2YbtD,c,OACf,EACf,S,eKmFG,G,oBAqBG,IpfgrBY,IAAwB,Q,gCofjrB9C,uBAGA,K1fyFwD,K0fzFpD,8B,iDLtHoD,mCCH5D,+B,4DAMI,oC,qBACA,c,IAAA,qC,kKKwCA,4BL/CJ,+B,IAAA,0Q,kCAgCA,eAG+D,WAAK,QAAI,YAAT,mBKuBU,oBACjE,mB,sBPwDyB,c,MAA0B,E,gEAA1B,E,2CAA0B,a,2CAZ3D,wBAYiC,W,sBAAA,wC,qEAZjC,a,0BAYiC,mD,6CAZjC,a,mCAAA,M,OAAA,yB,GAAA,6BA4BkF,gC,OAAA,sK,wLAAC,c,oUAGnF,c,IAAA,8CQ3IA,uE,OR2IA,kB,IAMoE,EAAQ,E,8CQhJhB,uB,yBRgJQ,mHAEpE,qF,kDAAA,sCQnJA,iC,OAAA,kB,IAAA,ERyJkE,EANlE,S,iNAaI,yBAA+B,oBAA/B,gC,iCAAA,c,4DAUA,sB,0BACA,W,gEAAA,2B,4EAQuC,E,gDAKvC,c,+DAIsD,KGvLP,c,MAC/C,a,WAkBA,K,gBAZA,iE,+TAII,EAAI,c,OACA,+BAAkB,G,sCAEe,8C,wEACrC,mCACO,qB,wLACX,4CAVA,kE,+CAYA,W,4JAG2B,4DAC3B,EAD2B,IAG3B,W,gHAFA,E,wIAEA,E,IAAA,W,wIAAA,oC,mFAAA,yB,0HAAA,gEAAAC,K,iEAAA,uB,wKAE4B,E,IAI5B,W,OAHA,0BAMA,gEAEA,EAFA,IAIA,W,OAEA,8BAIA,yBAAkD,UAAO,eAAP,eAElD,EAFkD,e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AAa,4BAAW,K,iICtGxB,mBAAc,uB,uB9amDH,kCAAU,sBAAsB,EAAtB,2BA5DA,E,gH+asCT,mB,oLDtDoC,QAAD,QAAC,kB,cAA7B,wBAA4B,Y,qIAY/C,iCAEJ,SAFI,WAQA,IAOJ,O,iD9a6DA,E,IAjFA,W,OAwFe,sBAAgC,qC,kBA/EpC,O,qI+abP,a,WAEA,K,WACA,K,wCAGsB,a/asFtB,YAAW,G,4C9EgsBK,OAAAA,K6frxBS,S,K7fqxBT,EAAM,GAANA,KAAA,sB,wDAAoB,iB6frxBuB,mB7fqxBb,O6frxB1C,a7fi9BG,EiG7lBgB,S,KjGm4CP,EAAhB,MAAgBA,KAAA,Y,KAAA,EGxsDhB,G0f3CY,K1f2CZ,kB,iC0f3CmC,M1f2CnC,yF,CHwsDgBA,K,UAAA,SGxsDhB,O,KHwsDgB,E6f/uDc,IAAC,EAAD,MAAC,uBAAD,gC1fuC9B,G0fvCwC,a7f+uDX,E6f9uDjB,K1fsCZ,S0ftCgB,8G1fsChB,gB0ftC4B,E5fmDxB,O4fjDc,E5fkDd,S,KACA,E4fjDQ,qB,Q1fkCZ,M,eAAA,IwD6MgD,8C,YkctO5C,iBAIJ,M,mCAAA,EAKI,mCAiBA,iBAKmC,IAoBvC,G,iBAAA,a,WAEI,K,4JAG0B,MAAM,G,0CADhC,0C1f9BJ,8C0f+BoC,4B,gBAagC,SAb5D,O,KAa4D,yB,KAAA,4E,8SACxD,eAEA,IAAI,8C,YAAJ,iB,mGAUA,2C,MAAA,iD,EAAA,EApE8B,kB,IAAA,EAAkB,qB,OACpD,EAAqB,E5fyBzB,EAAM,kB4f0CE,qC,sDALA,qB,sOASI,2B,6CAIJ,iD,kJALyD,gE,wCAuCzE,wBAcI,a,wDCjLJ,+B,EA4BI,kCAxBA,4BACA,yB,+LDqHQ,G,qCAd4D,kE,YAAA,iB,iLAgBC,oF,MAAA,E,4CAAA,gB,MAAA,E,8GACzD,qF,gCAAA,gB,mDAEqB,aAAL,sB,eAAK,E,sBAAA,6B,gBACP,iC,wDAHd,E,kOAlBR,4BACoC,iC,iMAlBxC,yB,KAAA,EA6CI,G,6BADJ,0JACI,gBAAc,EACd,OAAO,E,gBAI2B,qB,cAClC,KAAY,QAAL,E,kEAIiD,a,MACxD,2BAAgB,Q,yMAlI6C,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CA,gCAAyC,EAEnC,e,YElLV,mBAE6C,uB,oWCQzC,yB,iCH+IJ,qB,WAKI,MA6BI,yC,gBACJ,I,2GApBJ,iC,MAII,uB,sCACA,c,MAAA,E,WACA,kB,2GE3KA,c,2SCaA,Q,0KCCgD,2BAAQ,gBAAK,qB,4DDH7D,wE,+IC0BY,S,2HCoCZ,oCAAuC,6C,iKJjBZ,c,0CAF0B,MAE1B,OAAvB,iB,wDAAuB,G,MAAA,K,gBAAA,O,4EAEJ,8B,2BAAA,qL,UAAA,G,mDxB6FuC,E,+BwB3FlD,K,IxB2F+D,iC,+BQxJnB,M,UAAA,OAGxD,gBAHwD,S,sGRwJW,e,WAAA,+D,qCAAA,8B,GAAA,e,KAAA,e,+GAAL,SAAK,aAAL,Q,kHwBzFzC,IAAT,G,iFARyC,IAE1B,WAAvB,gD,qCADA,0B,gSIUR,M,IAAA,oD,kDJjBI,4EhBlDJ,mDoB2E2C,qB,yC5B8EuB,M,sDwB/F1D,Y,iDIgCD,gB,+LCUH,IAIuC,cAAC,oB,EAAA,K,yCAX5C,mCAMI,4D,cACA,4B,eACA,uB,0DAAA,uB,UvQCA,e,wDwQ4C2C,G,0EA3IZ,eAAgC,UAAuB,IAAvB,IAA/B,G,GAAiB,6EAAc,+B,gBAPnE,QAOoC,+B,iDAPpC,aAOqD,2B,2BHoJjD,oBAxGA,EAwGA,WAnGA,mBAmGA,WA9FA,M,4FA4LA,yFACA,+CACA,eAAe,EAAf,OACA,4CAA+B,UAA/B,kCAEI,YAAJ,YtgBxLA,EsgByLI,UAAW,qB,OtgBzLf,yBsgB2LI,ItgB3LJ,UsgB4LI,G,IAGR,MAFQ,EAAM,W,GAaqB,OAAC,U,8DATpC,aAKI,qE,gFACA,cAAe,wCACf,+C,IACA,MACA,EADA,S,StgBxMO,E,mCsgB4MX,uB,eAOA,GAGI,EAAO,wD,wGIzRP,M,OADA,kBAAkC,4BCHtC,wF,IAAA,0M,yTAKI,oG,CACgC,gBAA7B,cAAc,wB,6DRkDoC,O,SAE1B,4B,SAAA,uB,kBAEJ,0D,qBAAA,8C,gGQpD3B,uF,IAAA,+L,+PAKiC,G,iBAPG,MAA7B,E3gBiEI,G,UmgBdH,UADiD,qBACzB,yC,GAAxB,U,qJACuB,sD,MAAA,yC,cAAA,E,cAEJ,4B,oNxB6FuC,M,0dgCpI9D,+B,yDAfgC,Q,qBRmD5B,G,iBAAA,W,cACA,MAAuB,8D,OAAA,sBAAA0xD,QAAA,4H,6DAEJ,kB,qCAAA,O,oFxB6FoD,G,6NgC5H/E,oF,IAAA,8L,2WAMI,oG,CAEqB,gBAArB,sC,M3gBiCA,kB2gBhCI,uB,mERoBA,uB,gCAAuB,kB,+IAEJ,8C,2FhB3DiC,uBAGxD,2BAAmB,a,oHRqJgD,S,EAAL,2BAAK,a,gDwBzF9C,UAAT,O,iEQ5BT,0B,0BAOP,sC,yCAAA,kF,gFAAA,sD,wJAKI,GA1CgC,gBAA7B,gBA2CY,EA3CZ,wB,wGRmDC,M,2NhBvDJ,+B,6CADwD,Y,EAAA,W,qGRwJW,sB,EAAL,iBAAAnxD,KAAK,S,2BwBzF9C,SAAT,EAAS,c,0BQfrB,IAAO,G,wEAGX,kF,gFAAA,qG,IAAA,M,oQA9CoC,M,ORmD5B,8C,6FxBgG0D,uB,+IQxJN,W,aAAA,iBAGxD,uB,EAHwD,2B,qGRwJW,4B,YAAL,QAAK,G,KwBzF9C,EAAT,G,wEQNZ,GAAO,UACX,E,mJAEA,qG,IAAA,iB,qGAAA,4C,qHAvDoC,kBAA7B,4BRsDoB,wF,MAAf,uBAAe,mC,8FxB6FuC,EwB3FlD,U,ExB2F+D,W,uDQxJnB,2BACxD,iB,0BADwD,iBAGxD,KAAAoxD,S,oFRqJmE,KAAL,U,iEwBzFzC,EAAT,Q,qJQIhB,E,uGAEA,iB,SAAA,4B,+QRZ+B,sF,MAF0B,uBAE1B,mD,mCAEJ,yC,EAAf,EAAe,U,exB6FuC,E,SAAA,KwB3FlD,Y,yBxB2F+D,iB,gJQxJnB,I,EAAA,MAGxD,K,qFRqJmE,UAAL,0BAAK,sB,oNgC1EvE,E,kBAAA,E,mCAAA,uB,+ORtBQ,qF,MADiD,uBACzB,wCADyB,W,EAEjD,+B,EAAuB,yC,EAF0B,Y,eAI9B,S,EAAf,KAAe,mC,gDxB6FuC,U,cAAA,EwB3FlD,QxB2FkD,O,yEQxJN,I,2BAAA,oE,kKRwJM,8BAAK,wB,yDgCpEnE,E,kBAGJ,4B,SAAA,uB,eAAA,6D,sShCiEuE,qC,EAAL,uBAAK,mD,wIgC3DnE,EAAO,W,qDAGX,uG,cAAA,S,OAAA,2C,sJAKI,qBAAiB,IAhGe,S,WRmD5B,I,kBADiD,K,IACjD,E,+EACA,gDAAuB,oG,CAAA,sD,MAAA,yC,cAEJ,O,uFxB6FuC,c,4CAAA,qBwB3FlD,IxB2FkD,EwB3FlD,qE,mEQoDZ,qF,MACA,uB,EAAA,c,EACA,qC,EAAA,uB,qDACA,E,+BAAY,4C,EACZ,2B,gBAAA,Y,EAzG6B,W,EA2G7B,E3gBlDA,O,EAAA,K2gBmDA,YAAS,uB,E3gBnDT,U2gBoDA,kC,E3gBpDA,sB,E2gBhEgC,KAA7B,0B,iERmDC,I,oHAGmB,I,eAAA,M,MAAA,iC,0HxB6FuC,IwB3FlD,MxB2F+D,gD,qGQxJnB,8BACxD,wB,6ERuJmE,4B,+QgCpBnE,oF,MAAA,uB,EACA,c,EAAA,yBAAe,Y,EACf,kD,2DACA,iB,6BAAA,U,iCACA,Y,EAAA,W,EACA,S,EAAA,iBAAuC,U,eA7HV,iBAArB,2B,EA+HR,U3gBtEA,O2gBsEA,K,E3gBtEA,E2gBuEA,eAAS,c,2ERpFL,aADiD,I,0CAEjD,I,4EAEmB,I,cAAA,gB,OAAA,E,iBAAA,W,yFAAA,M,qJxB6FoD,sD,0HAAR,e,eAAA,G,0DAAL,yBAAK,kBAAL,qD,yMgCA9D,qC,EAAA,uB,qDACA,E,+BAAe,iB,6BACf,iB,0BAAA,Y,EACA,W,EAAA,S,EACA,2B,eAAA,iBAAY,2B,EACZ,sB,EAAA,iBAAuC,K,0E3gBxFvC,Q,E2gBhEgC,a,4BRmD5B,I,cAAA,I,0BACA,qBAAuB,I,eAAA,M,MAAA,mC,sBAEJ,E,QAAA,K,cAAA,E,gSxB6FuC,E,qEQxJN,4B,kDRwJW,0J,4VgCoBnE,iB,6BAAA,UAAiB,O,0BACjB,Y,EAAA,W,EACA,S,EAAA,iB,yBACA,2B,mBAAA,sB,EACA,sB,0EAGA,Q,E3gB9GA,iB,wB2gBhEgC,I,kCRkDqB,I,MACjD,qB,mBACA,M,IAAuB,I,cAAA,kB,OAAA,E,iBAAA,W,KAEJ,K,UAAA,8D,OAAA,sBAAAD,QAAA,wB,wNxB6FuC,E,cQxJN,MACxD,gBAAmB,EAAnB,I,SADwD,QAGxD,e,4ERqJmE,qB,yTgCiCvE,kD,kKAOI,W,EAAA,S,EACA,2B,eAAA,iBAAe,U,mBACf,sB,EAAA,iB,+EAGA,Q,eAzL6B,I,wB3gByD7B,I,cAAA,I,+CmgBbI,Q,WAAA,M,uCACA,S,aAAuB,E,QAAA,K,cAAA,E,qEAEJ,U,cAAA,EAAAA,QAAA,4H,CAAA,gBAAAE,cAAA,wB,6ExB6FoD,4B,+CQxJnB,6D,qHRwJW,8C,yUgCqDvE,2B,gGAOI,4C,EAAA,sB,EACA,sB,0EAEA,I,MACA,iB,wBACA,I,cAEA,I,gB3gBtJA,I,MAAA,qB2gBhEgC,Q,qBRmD5B,SADiD,WACzB,kBAAxB,S,WACA,I,kBAAuB,K,UAAA,8D,OAAA,sBAAAF,QAAA,wB,mHAEJ,EAAAE,cAAA,wB,MAAA,yC,mExB6FuC,MwB3FlD,IxB2FkD,GAAArxD,EAAA,Q,kBQxJN,gCACxD,0B,mKwBgOJ,mF,IAAA,mM,2ZAOI,I,MACA,G,EAEA,e,MAAA,M,IACA,O,YAAA,kBAAY,cACZ,S,EAAA,S,W3gBxKA,I,E2gB0KA,I3gB1KA,E2gB0KA,K,K3gB1KA,e2gBhEG,4B3gBiEI,E2gBjEJ,gC,6DRmDC,oG,CAAA,sD,6DACuB,O,sDAEJ,O,uBAAA,G,+KxB6FuC,kB,4BAAK,oF,MAAL,c,mLgCsF3D,4E,yFAOP,cAGoG,IAArB,SAA2B,E3gBnLtG,E2gBmLsG,OAA3B,0C,8CAE/E,yD,cAAA,S,OAAA,sB,WAAA,a,yJAQI,8D,GAAA,MAAuC,I,qJA9I3B,sD,MAxGiB,kBAArB,uB,c3gByDR,E2gBoDA,K,8CRlEqD,QACzB,e,kBACxB,0DAAuB,gG,4JhBzD6B,c,oFAGxD,+B,EAHwD,uB,mKRwJW,yC,EAAL,Y,ewBzFzC,EAAT,O,wFQoMT,wB,+CAKP,S,OAAA,sB,IAAA,qC,uBAAA,Y,+NAQI,oG,6DACG,E,qDArQ0B,O,SAuQ7B,E3gB9MA,0B,+CmgBdqD,GACjD,0D,wGACA,M,OAAuB,8CxB+FmC,EwB3FlD,sExB2FkD,c,MAAa,c,qHQxJnB,uB,yCAAA,uBAGxD,2BAAmB,a,aAHqC,K,+GRwJW,S,EAAL,2BAAK,a,gDwBzF9C,UAAT,O,2DQkNT,E,iCAKP,qC,IAAA,kE,gWAQI,yC,cACG,E,c3gB1NH,E2gB2FA,IAAS,IAAT,kB,SAgII,E3gB3NJ,M2gB2NI,O3gB3NJ,Q,4EmgBbI,gG,QAAA,M,OACA,8CAEI,EAAe,uEAAf,c,sBxB6FsD,uB,4FAAa,uB,qHQxJnB,KACxD,uC,6CADwD,Y,EAAA,W,qGRwJW,sB,EAAL,iBAAAA,KAAK,S,qBwBzF9C,E,iCQqOzB,OALO,Q,KAKP,iB,IAAA,4F,8XAQI,O,SA5HA,EAAY,0B,S3gB3GZ,Q2gB8GA,EAJe,G3gB1Gf,U,e2gByOI,GACJ,gB3gB1OA,gB2gB0OA,0BA1SgC,qBAA7B,I3gBiEI,kB2gBjEJ,qD,qBRmDC,kB,4BADiD,uEAE1B,c,sBAEJ,+D,mBAAA,+B,2BxB6FuC,U,6BAAA,uB,4JQxJN,W,aAAA,iBAGxD,uB,EAHwD,2B,+FRwJW,E,iCgCqJhE,OR9OkB,Q,sBQmPzB,uB,YAAA,2D,IAAA,mB,GAAA,O,6WASO,E,mCAlFH,EAAe,qB,eAMf,G3gB1KA,c2gB2KA,kBAAS,0B3gB3KT,qB2gB4KA,2E,QA4EA,M,qDRtQqD,oF,MAEjD,c,EAAuB,0D,wBAAA,+B,2BAEJ,qC,EAAf,uBAAe,mC,2GxB6FuC,EwB3FlD,U,ExB2F+D,W,uDQxJnB,2BACxD,iB,0BADwD,iBAGxD,KAAAoxD,S,+DRqJmE,QAAL,K,qBgCmK3D,Q,wDAKP,yB,IAAA,mB,GAAA,4F,6TAQI,QAAuC,EAAvC,a,eAvIA,GAGA,cAAY,4CAxLiB,qBAArB,2E,Q3gByDR,M,O2gBsQA,kB3gBtQA,4B,0G2emFmE,gF,EAAL,EAAK,6B,2BwBzF9C,UAAT,O,8IQ0QT,2C,2BAKP,4J,cAAA,S,OAAA,sB,4FAAA,gB,+BAQI,I,kBAAA,KACG,U,iEAlIH,IAAe,EAAf,IAGY,gDA5MiB,qBAArB,8CAAqB,iC,C3gByD7B,c2gBuJA,gBAAS,wB,M3gBvJT,E2gBwJA,gB,qCAxNgC,EAA7B,K,uFRoDwB,0J,qBAEJ,8ChB3DiC,qF,MAAA,c,8IRwJW,qC,EAAL,uBAAK,mD,gDwBzF9C,E,kEQwRlB,W,wFJnVoC,wBAAC,+CAcD,SAAC,6BAcA,IAcD,OAdA,QAAC,KAcA,E,eAcD,YAAC,WAdA,YAcA,S,wBAcD,SAAC,a,GAcD,IAAC,I,EAAD,aA5F3C,GA4F4C,E,KA5F5C,0J,gFAAA,qG,2EAAA,K,sFAQI,gG,QACG,M,OI+GH,kBAAY,4BAGZ,EAPiB,oEAOjB,c,I3gBlDA,I2gBmDA,Y3gBnDA,E2gBoDA,uB3gBpDA,yDugB/DS,iCACT,EvgB8DA,UugB9DA,aIFgC,YAA7B,2B,0HRmDC,6BAAAE,c,EADiD,Y,EAEjD,W,EAAuB,S,EAF0B,iBAE1B,uB,gDAEJ,sB,EAAf,EAAe,6B,qBxB6FuC,E,uDQxJN,e,mERwJW,SAAL,W,iBwBzFzC,IAAT,EAAS,K,UI1DlB,U,2EAKP,oJ,CAAA,qG,IAAA,iB,sQASO,kB,4BIkHY,sF,IAGf,IAAY,YA5HiB,yBAArB,2BAAqB,8BA+H7B,IAJe,6B3gBlEf,O2gBuEA,YAAS,M3gBvET,Y2gBwEA,e3gBxEA,YugBjDS,EvgBiDT,uBugBjDS,mDACT,8CIhBgC,EAA7B,iB3gBiEI,wB,2BmgBdH,W,EADiD,iBACzB,uB,EACxB,4C,EAAuB,sB,EAF0B,iBAE1B,c,qBAEJ,E,wCxB6FuC,a,EQxJN,e,gBAAA,O,YAGxD,OAHwD,2B,+BRwJM,I,EAAK,W,UwBzF9C,IAAT,EAAS,I,2EI5ClB,gD,qGAKP,qG,IAAA,iB,oTAQ2C,wF,IACpC,kGIwHH,iCAGA,IAAY,qBAhJiB,mBAArB,oBAmJR,E3gB1FA,uB2gBsFe,2BAIf,wB3gB1FA,E2gB2FS,iBAAW,Q3gB3FpB,qB2gB4FA,K3gB5FA,oCugBnCS,EvgBmCT,YugBlCA,EvgBkCA,EugBlCA,SI9BgC,IAA7B,O,wFRmDC,wB,EADiD,iBACzB,c,qBACD,E,wCAEJ,QAAf,K,ExB6FmE,e,uBAAb,Y,OQxJN,qBACxD,Q,WADwD,S,sCRwJW,UAAL,yBAAK,qC,awBzF9C,cAAT,kC,qGI9BT,sD,mDAKP,iB,SAAA,4B,SAAA,uB,wUAAA,gBAQI,kF,iCACG,gEIkJH,EAAe,uBAAf,mDAGA,EAAY,EAAZ,0CAxL6B,EAArB,2BAAqB,cA2L7B,E3gBlIA,E2gB2HiB,U3gB3HjB,E2gBmIA,W3gBnIA,I2gBoIA,OJzJS,EvgBqBT,UugBrBS,8BACT,EvgBoBA,UugBpBA,kCI5CgC,YAA7B,Y,sDRmDC,E,wCACuB,QAF0B,K,iCxBiGS,OwB7FtD,YxB6FsD,E,KAAa,0B,+BQxJnB,I,kBAAA,K,qFRwJW,gDAAL,yBAAK,4CAAL,+B,CwBzFzC,cAAT,wC,mDIhBT,M,oBAKP,4B,SAAA,uB,eAAA,G,6NpBrDA,uF,IoB6D2C,gBAAC,kF,iCAR5C,yBAQI,uC,EAAuC,uB,mDACpC,yFI4KH,EAAe,YAGf,EAAY,WAhOiB,WAmO7B,OAPiB,KAOjB,8B3gB1KA,E2gB2KA,iBAAS,2B3gB3KT,O2gB4KA,iBJnLS,EvgBOT,KugBPK,KAAI,qB,qBIzDuB,E,wCRmD5B,QADiD,K,uBAI9B,M,IAAf,OAJ6C,YAI9B,O,4BxB6FuC,iBwB3FlD,G,iChB7D4C,K,UAAA,uBAGxD,WAAmB,EAHqC,0B,GAAA,U,qJRwJW,sD,MAAL,kBAAK,uB,QwBzF9C,E,oBIGzB,4B,SAAA,uB,eAAA,kF,8IIsJgB,kEA5MiB,EA4MjB,e,O3gBnJZ,yDugBOS,wBvgBPT,eugBQA,EvgBRA,e,qCmgBbI,8B,wDACA,kB,yFISR,W,OAAA,gCI2IA,iF,OAtMA,8B,oBJ2DA,a,WAQI,K,WAAA,K,uHI9D6B,c,K3gByD7B,wB2gBuJS,G3gBvJT,gB2gBwJA7xD,KAAA,4BJjJS,avgBPT,EugBQA,S,KIxEgC,E,+CRmD5B,S,GACA,uCAAuB,eAF0B,iBAE1B,qD,kBAEJ,SAAf,S,UxB6FsD,a,EAAA,cwB3FlD,GxB2FkD,iDAAa,kB,2CQxJnB,iBAGxD,4BAHwD,kB,4BRwJW,gD,wBwBzF9C,aAAT,E,kGSjDZ,E,oCL6DG,S,gBAKP,wE,KAAA,mF,iOASO,8B,6DIoFH,gBAAe,E,OAGf,E,iB3gB3GA,sB2gB+GA,G3gB/GA,mB2gBgHA,KJ3FS,avgBrBT,G,sEmgBbI,mB,IADiD,WACzB,G,QAAxB,iC,GACA,wBAAuB,gB,iBAAA,yB,GAAA,oB,8EAEJ,iB,4NhB3DiC,a,kERwJW,kBwBzFvD,cAAS,+D,+DIiBzB,iE,wCAAA,yB,+CAAA,qB,KAAA,uC,CIqFA,oHA9JA,SARA,SRkDI,wB,KAAA,EhBlDJ,O,KAAA,EoByF2C,eAAC,S,OAR5C,mC,CAQI,yBACG,MI7E0B,GAiK7B,aAAe,EAGf,cAAY,8BApKiB,gBAArB,E3gByDR,kB,KAAA,EugBqBS,kBAAJ,SAAI,eAAJ,qBACL,KvgBtBA,mB,E2gBhEgC,sBAA7B,E,iFRmDC,iHADiD,wCACzBA,KAAA,oBACxB,sCAAuB,wBAF0B,uB,eAI9B,S,KAAf,E,uBxB6FsD,a,gBAAa,E,0CQxJnB,iBACxD,mE,yBADwD,E,sERwJW,E,MAAL,iB,OwBzFzC,aAAT,E,iBI0BT,O,QAKP,M,eAAA,kD,6BKnFI,MAFwB,mCAExB,EAC+C,kBAAhB,iBAA/B,qB,uGAqFoB,uB,qEAAA,kD,0BAAA,iB,+GAER,2BAAK,c,6BACK,S,EAAA,iBpQsD6B,uB,EoQtD7B,4C,EAAA,sB,sIAGF,W,uBAAA,E,4BATZ,iB,6LAYQ,yEAAR,kBAAmB,wBAAX,iC,CAAA,sD,MAAA,E,0GACV,uB,eAdF,G,4sBAwCJ,W,uSAKJ,GAXA,0E,kCAWA,E,KJjI2C,K,IAAC,mB,GA0BD,OAAC,U,8DAaD,aAAC,c,uIAiBA,c,2FAqBA,MAiBD,E,kBAzG3C,4B,SAAA,uB,eAAA,6J,mEAAA,+G,IAAA,sJGSA,iCARA,8CRkDI,2HhBlDJ,sEqBU2C,iC,cAAC,S,OAFxC,mCACA,K,MAAA,IAAyB,EACzB,iCAAuC,SGGV,K,M3gByD7B,EwgBzDI,EADJ,a,GxgB0DA,IwgBxDI,G,UxgBwDJ,qBwgBtDa,OAAW,MAAX,4BxgBsDb,KwgBrDI,EAAO,M,gDAGX,qB,6LLoCqD,EAE1B,E,EAAvB,O,SAEI,EAAe,0B,4GhB3DiC,uBACxD,oBAAmB,wBAAnB,MADwD,uB,QAAA,M,qDqBoCrD,+G,kfAdP,c,gGAAA,4B,IAxBA,MAwBA,a,GAxBA,OGSA,UARA,8DRkDI,iK,CAAA,sDhBlDJ,+C,IqBoC2C,M,EAAC,S,SADxC,4B,SACA,uB,eAC8B,GxgBiC9B,cwgBzDI,EAAS,0CxgByDb,qBwgBxDQ,EAAW,4CAAX,6B,QxgBwDR,M,OwgBhCA,ExgBgCA,gB,qSwgB5BJ,4E,EAAA,+C,yGAAA,W,qDAAA,uG,cGlCA,S,OR0CI,wFhBlDJ,mBqBiD2C,QAAC,Y,QAP5C,0BAOI,QAAuC,WGpCV,Q3gByD7BqtB,EAAA,G,IAAA,EwgBlBA,MACA,GG/CgC,SAA7B,Y3gBiEI,I,wCmgBdH,0BADiD,aACzB,I,IACD,S,EAF0B,G,MAI9B,I,gBAAf,O,UxB6FsD,qB,4CAAA,IwB3FlD,ExB2FkD,IAAa,gD,qGQxJnB,8BACxD,wB,qNqBsDJ,gG,QAAA,M,OAAA,kB,4BAAA,+G,IAUI,wC,EAAA,EAAuC,YGrDV,mBAArB,oB3gByDR,EwgBnBS,+BxgBmBT,EwgBlBA,uBAAO,2BxgBkBP,wBwgBFA,0DACA,8CG/DgC,EAA7B,iB3gBiEI,wB,2BmgBdH,W,EADiD,iBACzB,uB,EACxB,4C,EAAuB,sB,EAF0B,iBAE1B,c,qBAEJ,E,0CxB6FuC,uBAAa,Q,2DQxJnB,Q,+BRwJW,MAAL,qBAAK,K,oBwBzFvD,EAAS,E,cKGlB,M,iCAKP,+N,CAAA,qG,IAAA,iB,oTA8BI,sB,yBACA,W,OAAA,uBACA,sBAAuC,+CG3FV,EH2FU,IxgBlCvC,W,OAAA,8F2gBhEgC,E3gBgEhC,e,gCmgBdqD,yBACzB,mCACxB,EADwB,e,OADyB,0BAI9B,gEAAf,EAAe,e,OxB6FuC,8BAAa,kF,sCQxJnB,yBAGxD,mCAHwD,EAGxD,e,iCRqJmE,4DAAL,EAAK,e,OwBzF9C,0B,oBKyClB,E,mFC4BP,sBAa6C,aAb7C,sB,iCAa6C,e,WAAE,Q,mKAlJ/C,I,0BAAA,OAOoC,OAPpC,I,OAAA,G,eAAA,U,QAqBkD,MAAC,Q,yFxQ4F/B,QwQxFwC,K,mDAAG,2BAlBV,oBAAc,EAAd,WAPrD,uBAOqD,iBAeS,sB,+CAG1B,yCAA4B,G,iBAI5B,E,WAAA,S,WAAE,I,uCAAgB,kBAAgB,GApBtE,iBAII,kBlhBkEoD,ENsmapCrtB,KAAA,S,oCanja6B,cAAM,E,6D2gBrFnD,sB,eAGJ,2BAI4B,iBAAd,E,wDAiFd,gB,mBAuB0D,kB,iDAUtD,qC,EAOA,aACA,2BACA,iBAAmB,iB,8DI3JnB,wC,sEC0CJ,E,gJXZI,kF,EAAA,kD,sDAMqD,W,mHAsB7C,2B,6PM1CqC,E,WAAC,sB,iBArB9C,c,MAAiB,E,WAAM,wB,WAAO,I,0CACS,mBAE/B,wB,kBAFJ,eAK0B,yBAAgB,c,WACtC,Q,IAFa,E,iDAGb,sB,iBACI,sCAAmB,EAAY,SAAnB,KAAkC,cAAW,gBAAAmE,SAAA,e,KAG7D,aAPa,SAOb,W,MACI,E,SAGJ,IAFa,kBAAW,sBAExB,EAXa,SAWb,e,GAGoB,oBAAO,Y,OAEd,oBAAwB,iBAAxB,GAAwB,OAAI,eAAY,QAAhB,0G1gBjCqB,c0gBiD7B,8BAKhB,KALgB,WAMrC,K,wCAEA,4B,4CAKI,qB,KAAA,E,Gjc1BJnE,KAAK,U,+DicgCyC,kB,KAC1C,EAM0C,GAN1C,oBAAS,cjcjCbA,KAAK,iBAAI,E,8CicoCT,0BAG8C,yBAAmB,EAC7D,S,KAAA,EjcxCJA,KAAK,iBAAI,E,sCic8CwC,yC,KAC7C,cAAS,a,Kjc/Cb,E,cicqDqD,mB,IAAA,aAAmB,EACpE,S,KAAA,EAMgC,Gjc5DpCA,KAAK,iBAAI,E,6BicyDT,qDAGoC,yBAAmB,EAAe,S,KAAA,EAClE,iD,Kjc7DJ,E,+BicmEsD,yBAAmB,8C,YjcnEpE,IAALA,KAAK,Q,2CicgFwC,aAAmB,sB3gBWnB,iBAAM,I2gBFnD,G,uDAEA,K,YAA0C,E,oBAG9C,4DpSnCkB,K,wCoSgD2B,a,kEpS9C7C,c,UoS8C6D,epSxCzD,+BAAa,KAAb,M,yBACW,E,mEoSuCgC,S,2FAPxB,IAAnB,a,MACA,sB,aAAA,EAOJ,K,oFAWA,mCAZI,cAAO,8BMjJP,KNiJO,WMjJC,K,wCACR,yB,GACe,a,+BAOf,qB,KAAQ,E,UAEJ,GADJ,oBACI,KAAW,EAAX,K,0CAOJ,e,CAAa,GAAb,K,UAAA,c,yBAAa,gBAAQ,EAArB,S,SAEJ,GAFI,e,6CAEJ,kBAMI,kB,KAEA,EACA,MADA,oB,cACA,sB,EACA,iC,SAEA,E,+DAc2B,MAAvB,qBAAY,GAAW,Q,eAK3B,GAQA,G,eALJ,wCAKI,oC,KAAa,EAAb,c,8DAAA,mB,IAAA,e,gCAEJ,S,KAII,E,8BCjEJ,E,+BAOQ,mB,IlhB0HyC,KAAM,U,gEkhBxH/C,a,2BlhBwHyC,S,uHkhBrHjD,GAKyC,O,clhBgHQ,KAAM,U,2DkhBlGvD,oBlhBkGiD,MkhBhGjD,mClhBgGuD,EkhBnFvD,mClhBmFiD,iBAAM,I+gB9HnD,4B,sBAGA,SAAkD,KAAa,IAA/D,G,OAEA,EAEA,EAIA,kBAEA,yFAAwC,c,IAGxC,c,0DAhBA,E,OAAA,0C,+IAGA,gB,IAAA,I,gEAEA,c,qCAAA,8C,sHAEA,E,EAAA,S,SAEA,E,mFAEA,c,4CAAA,gG,wHIZJ,K,oEAuCsC,aAAgB,SAAQ,W,wHAMjB,SAAQ,S,OAOrD,MALA,kC,4BAaI,E,2IAOJ,eH5DI,GAPA,GADA,6BAAwC,EAAxC,wBACA,gBACA,EAFA,S,gBAAA,c,sCAAA,oBAQA,G,sDAAA,2BACI,S,KAKA,EAKA,sBAGsC,EAEtC,mBAGkC,IAElC,aAGkC,E,8FAxBtC,+C,KAAA,E,sJA+B4B,EAG5B,wCAFA,S,KAAA,EACA,uB,4GACA,M,mCAAA,EACI,aAGmC,sBAEnC,iBAGkC,I,uFATtC,0H,IAAA,iC,sKAuBmC,+C,IAA6B,M,yDAA5B,uB,eAA4B,G,mFALpE,0C,6BAAA,wBAKwC,uB,yLXxDd,a,WACtB,K,WACA,KAGI,a,uDAGJ,iC,WAAA,qB,KAAA,2E,GAAA,e,kRAWiC,mC,0DAGlB,yC,UAAA,G,0KAEE,a,sCAAA,c,WAAA,E,gYAhBjB,iB,2CA0BqD,wD,kQACzB,0B,OAAA,kB,iCAAxB,K,yOAEJ,6DAHqD,gE,gSAYjD,E,0IAAwBA,KAAA,qB,SACD,0C,SAAA,0B,qBAEJ,e,cAAA,kB,QAAA,gB,8GxB6FuC,gB,OAAA,QwB3FlD,iB,2FhB7D4C,iB,MAAA,mC,qCRwJW,qB,wDwBzElD,0B,kCAAA,+B,kBAAA,qB,waAXjB,a,6DAaA,G,yDxBiEJ,oBQnJA,ERmJA,WQnJA,eRmJA,WQnJA,I,IgBqEI,Q,sBhBpEwD,QACxD,M,gCADwD,mF,uCRwJM,iC,MwB5EtD,gBACA,cAAO,mBAEE,eAFF,iB,0BAMf,4B,uMAgBc,wB,yGALd,oC,8EA8BA,a,qBxB4B8D,0BAAa,O,0BQxJnB,0B,IAAA,G,iDRwJW,Q,+BAAL,U,sRwB9DxC,sB,eAAA,4E,mGADlB,E,0KAGJ,8CATA,iF,4CASA,O,oDAEA,E,IAAA,W,OAAA,sB,UAAA,6E,gTAWU,E,6DAEF,iF,OAAA,qC,ybAER,8CAMuB,sBAAnB,2D,OtgB+nBG,sBAAmB,eASV,4E,OAAM,KAAI,2B,4DACnB,E,sBsgBzoBH,0B,qCtgB0pDYA,KAAA,wC,MC1tDhB,E,WACI,M,iMqgB2ER,E,eAgBI,4C,4DAEJ,E,IAAA,W,OAAA,uC,2CAAA,kD,+FexIA,2D,6BCWsC,+B,eAIE,mB,kBAIK,iB,wGAgBF,sD,KAIG,M,0CAIT,Q,IAIC,E,EAAA,4C,6CAIS,S,sBC7D/C,gD,IAAA,S,OAAA,K,WAcoC,oBAAS,EAAT,WAK5B,KAL4B,iB,iCACM,WAAQ,O,wBACH,K,sFACF,KAAQ,e,kEAE7C,iD,sQAK6CA,KAAA,a,mIAsB7C,yB,oFCtBA,c,qBCvBJ,OthBsEO,Y,mBqhBhD8B,oC,WAAA,M,IAAA,Q,4HAG/B,8BAFF,+B,+HAGI,O,mNAqBmB,a,kEAAA,0B,oWlClD/B,O,QAAA,wB,qDAEA,gD,yCoCS6B,SAAgD,EAEzE,iB,sBzhByEI,Y,IACA,EAAM,gB,mCyhB5EgB,e,eAU1B,mB,aAAA,S,sCARA,Q,sBAAA,qB,yCAEA,Y,OAAA,oC,QAMA,GAyBA,iB,2FAjB0B,G,gBACJ,W,0CAAA,S,8CAAlB,E,UAGA,WAAkC,EAApB,EAAY,aAA1B,Q,MAKA,GACI,iCAEA,EACA,YAJG,Y,YAJP,G,0MAcJ,oB,EAAA,E,kHAoCoB,kC,IAChB,EAAY,IAAZ,GAAY,S,OACR,uBAAuB,oB,wBAJD,Y,UAS9B,2BACA,oBAUJ,M,OArBA,+C,EAAA,EAMoC,Y,OAAA,U,MANpC,6C,kBAQI,YAKkC,O,gCAAA,I,mBAI1B,SAAAwZ,G,MACA,E,0NAK0D,WAMtE,iB,iBANA,kCAAyD,GAAa,KAYlD,Q,iBAAC,mB,gQCtGW,2CACxB,4BAAmB,EACvB,uB,EAAA,K,wNCVJ,EDkBsB,qD,yBAEN,gCALR,gC,oQvZoRkC,O,yKyZ1R2B,qB,wV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,E,QlkBvEnC,MkkBuEkD,KlkBvElCtkB,cQzGhB,G,2J0jBoLP,W,uCACsB,I,EAAA,EAAX,wBAAW,EAAQ,KAAH,6DAAsEm1D,G,8GAAS,qB,4C/CR1G,2C,2BAAA,OAAuC,K,wFA9I3B,e,cAAA,wC,OAAA,W,iCAxGJ,c,gC3gByDR,oB2gBoDA,K,qDRlEqD,YACzB,W,qBACxB,e,cAAA,4C,OAAA,W,OAAuB,uD,8ZuDiNvB,O,cAAkB,c,sPADtB,gB,MAAA,iB,OAAA,sB,2NCzPJ,W,uCACsD,I,EAAA,E1dasC,GAAAzrE,M,2G0dbjC,0CAA0C,G,iDhDiPjG,iD,2BAAA,OAAuC,K,wFA9I3B,e,cAAA,wC,OAAA,W,iCAxGJ,c,gC3gByDR,oB2gBoDA,K,2DRlEqD,SACzB,iB,qBACxB,e,cAAA,4C,OAAA,W,OAAuB,6D,kbwDxCuB,8BAA3C,gB,iBAAP,OAAO,KAAP,W,8PCEA,gB,YAAsC,IAAA0rE,OAAoB,GAA1D,8D,2JAEA,W,uCACsB,I,EAAA,EAAX,WAAArF,WAAW,EAAM,KAAF,cAAsB,sB,EjDqNhD,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyDlCA,O,cAAkB,c,gPADtB,gB,MAAA,iB,OAAA,sB,2JAIA,W,uCAKsB,I,EAAA,EAAX,WAAAA,WAAW,EAAM,KAAF,iBAAsB,uBAAtB,kBAAgD,kBAAhD,UAA8D,iB,EjD6MxF,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyD1BA,O,cAAkB,c,8PALtB,oB,MAAA,qB,OAAA,sB,uCAMA,oB,YAJI,IAAA3zD,MAAc,QACd,IAAA4E,MAAa,KAHjB,8D,2JAQA,W,uCACsB,I,EAAA,EAAX,WAAA+uD,WAAW,EAAM,KAAF,cAAmB,e,EjDyM7C,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyDtBA,O,cAAkB,c,6OADtB,gB,MAAA,iB,OAAA,sB,2JAIA,W,uCACsB,I,EAAA,EAAX,WAAAA,WAAW,EAAM,KAAF,gBAAqB,e,EjDqM/C,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyDlBA,O,cAAkB,c,+OADtB,gB,MAAA,iB,OAAA,sB,2JAIA,W,uCACsB,I,EAAA,EAAX,WAAAA,WAAW,EAAM,KAAF,aAAkB,e,EjDiM5C,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyDdA,O,cAAkB,c,4OADtB,gB,MAAA,iB,OAAA,sB,2JAIA,W,uCACsB,I,EAAA,EAAX,WAAAA,WAAW,EAAM,KAAF,WAAmB,c,EjD6L7C,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,SAJA,K,YAMA,I3gB1KA,E2gB0KA,K,K3gB1KA,iB,C2gBhEG,+B3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,oEAEJ,S,uBAAA,G,gcAHnB,kD,8DyDVA,O,cAAkB,c,6OADtB,gB,MAAA,iB,OAAA,sB,2JAIA,W,uCACsB,I,EAAA,EAAX,WAAAA,W,EjDyLX,gB,MAAA,O,KACA,O,YAAA,mBAAY,cACZ,S,GAAA,MiD3L0B,gBjDuL1B,K,YAMA,I3gB1KA,E2gB0KA,K,G3gB1KA,G,KAAA,M,C2gBhEG,oC3gBiEI,E2gBjEJ,K,+HRmDC,e,cAAA,wC,OAAA,W,+EACuB,yB,iEAEJ,G,uBAAA,G,qcAHnB,uD,8DyDNA,O,cAAkB,c,gPADtB,gB,MAAA,iB,OAAA,sB,8NE5BA,W,uCAIiC,IAA7B,Q,GAA6B,e,cAAA,4BAAO,mBAAP,wB,OAAA,W,wCAA7B,e,cAAA,yCAAoB,mBAAS,cAA7B,wB,OAAA,W,OAAA,sEAAmD,SAAnD,0CAAgG,IAAM,IAAtG,K,uPAJJ,gB,MAAA,iB,OAAA,sB,2JAMA,W,uCAaW,M,EARgC,EAAX,WAAAA,WAAW,EAAQ,KAAH,wC,8GAAmD,uB,iDnDkOnG,iD,2BAAA,OAAuC,K,wFA9I3B,e,cAAA,wC,OAAA,W,iCAxGJ,c,gC3gByDR,oB2gBoDA,K,2DRlEqD,SACzB,iB,qBACxB,e,cAAA,4C,OAAA,W,OAAuB,6D,kb2DzBvB,MAAuC,cAQvC,OAA0CvjE,GAAnC,eAAA2lE,IAAA,UAAc,MAAd,kB,6OAbX,gB,MAAA,iB,OAAA,sB,2JAgBA,W,uCACsB,I,EAAA,EAAX,WAAApC,WAAW,EAAQ,KAAH,2C,8GAAsD,sC,iDnDsNjF,iD,2BAAA,OAAuC,K,wFA9I3B,e,cAAA,wC,OAAA,W,iCAxGJ,c,gC3gByDR,oB2gBoDA,K,2DRlEqD,SACzB,iB,qBACxB,e,cAAA,4C,OAAA,W,OAAuB,6D,oa2DbvB,O,cAAkB,c,0PADtB,kB,MAAA,mB,OAAA,sB,2DtYwN6C,sC,OAAA,0B,mMuY9Lf,W,uCACtB,MAAAsF,GAAA,EAAgB,sBAAG/uC,MAAnB,YvkBoKR,cAAIt8B,EAAKN,GukBnKe,MAAX,sBAAG4rE,QAAR,GvgB4OD,SAAqBx8C,GAAL,G,CugBzOX,MAAqB,sBAAGwN,MAAN,MAA4BivC,GAAX,sBAAGnD,QAAqB,K,GACxB,e,cAArB,2BAAQoD,aAAa,yBAAiBC,EAAa,sBAA9B,wB,OAAA,W,GAHnC,e,cAAAC,GAAc,wBAAGJ,SAAW,sBAAI,2BAAS,uBAAzC,wB,OAAA,W,qCAGA,MAAmC,cAEnC,GADA1pD,GAAQ0pD,EAAU,MAAQ,sBAAGhvC,OvgBuOlC,MugBtOSgvC,GvgBsOYx8C,GugBtOZw8C,G,CACA,MAAAD,GAAA,EAAgB,sBAAG/uC,MAAnB,Y,GvkB4JhB,cAAI,EAAK,GukB3J4B,e,cAArBqvC,GAAqB,WAAKN,GAAL,wB,OAAA,W,GAErB,e,cAAAK,GAAcJ,EAAS,sBAAI,2BAAS,uBAApC,wB,OAAA,W,cAJJ,e,uBANJ,e,mBAaqB,e,cAArBK,GAAqB,WAAKN,GAAL,wB,OAAA,W,OAdrB,OAcqB,c,0WArBjC,W,uClkB8sDoBhtE,KAAA,WkkBzsDhB,gBlkBysDgB,WAAhB,e,8CAAA,IAAgBA,KAAA,qB,CAAhB,e,SAAgB,MAAAA,KAAA,kB,GkkBxsDZ,e,cAAAonE,GAAYmG,GAAc,GlkBwsDD32D,EkkBxsDC,mCAA1B,wB,OAAA,W,OlkBwsDJ,e,iYkkB7qD8B,W,uCAElB,YADE,cACF,G,IACI2M,GAAQ,sBACJ,e,cAAJ,uBAAI,6BAAqB,cAAG+zB,UAAW,yBAAnC,wB,OAAA,WAER,YALE,cAKF,I,CACI,MAAA01B,GAAA,EAAgB,yBAAM/uC,MAAtB,YvkBmIhB,cAAIt8B,EAAKN,GukBlIOkiB,GAAQ,mBAAmB,yBAAM0a,YAErC,YATE,cASF,G,CACI,MAAA+uC,GAAA,EAAgB,yBAAM/uC,MAAtB,EAA8C,OAAY,cAAG0oC,UvkB+H7E,cAAI,EAAK,GukB9HOpjD,GAAQ,sBAAsB,cAAGojD,SAAzB,OAAwC,yBAAM1oC,OAV1D,e,8CAAA,e,mBAaiB,e,cAArBqvC,GAAqB,WAAKN,GAAL,wB,OAAA,W,OAdrB,OAcqB,c,0WAtBjC,W,0CACiC,e,cAAnB,mBAAQQ,WAAW,2BAAmB,mBAAnB,wB,OAAA,W,qCAA7B,MAA6B,cAC7B,GAAW,MAAPxc,E,CACA,MAAAgc,GAAA,EAAgB,iBAAM/uC,MAAtB,Y,GvkB8IJ,cAAIt8B,EAAKN,GukB7IgB,e,cAArBisE,GAAqB,WAAKN,GAAL,wB,OAAA,W,GAGrB,e,cAAAS,GAAazc,GAAb,kB,OAAA,W,uCAAA,c,uBAA0B,qC,+DAL9B,e,gBAGIztC,GAAQ,sBAHZ,e,sOvYwK6C,sC,OAAA,0B,mEwYvO7C,WAGqC,W,2BAErC,WAAqC,aACjC,KAAAsiD,gBAAkB,qBAAuB,KAAAA,iB,wBAE7C,WAAkC,aAAS,KAAAA,gBACvC,aAAe,KAAAA,iB,+BAEnB,YAA8C,U,qCAE9C,c,wBAEA,c,gCAEA,kB,2JASqB,W,uCACP,IAQ2B,IAP7B,YADE,cACF,G,CACI,6BAAO,UAAE,IGtBzB,IAAI,EAAY,CACR,KHuB2B,GGvB3B,EHwBY,KAA4B6H,GAAV,cAAAp2B,WGxB9B,EHyBY,YAAsB,YAH1B,MGrBT,E,GH0BkC,aAAAq2B,EAAA,eAAzB,e,cAAA,uCAAiB,0BAAjB,EAAgD,gCAAhD,wB,OAAA,WAEJ,YAVE,cAUF,I,IACI,6BAAO,UAAE,IACT,e,cAAA,uCAAiB,0BAAQ,KAAM,gCAA/B,wB,OAAA,WAEJ,YAdE,cAcF,GAdJ,OAckC,6BAAO,UAAE,mBAd3C,EAcI,e,8CAJA,e,gBAVJ,S,OACI,e,uBAeR,S,0WAxBJ,W,4DAKiB,MAAuBD,GAAb,0BACR,e,cAAAD,GAAa,KAAU,wBAAaG,aAApC,kB,OAAA,W,qCAAf,MAAe,c,gCACfC,E,uBAAiB,0D,oUAPrB,kB,MAAA,mB,OAAA,sB,2JA2BA,W,uCAIsC,YAHlC,kBACIC,SAAS,OAAqB,wBAAA7vC,OADlC,kBAEI6vC,SAAS,OjkB3EiD51D,GikB2E5B,wBAAA6xD,UAFlC,kBAGI+D,SAAS,OAAQ,OAAa,0BAAAC,WAAb,EAA0B,I,IACrC,yBAAa,0BAAAC,M5jBkIiE,EAAAhkE,U4jBlIjD,EAAG,GAAhC,mBAJV,kBAI6D8jE,SAAS,OAAT,G,SAAyB,mBAAlF,QAJJ,kBAKIA,SAAS,OAA6BZ,GAAR,wBAAAnD,QAAqB,MALvD,kBAMI+D,SAAS,OAAqB,wBAAA5wD,OAAO/Y,YANzC,kBAOI2pE,SAAS,OAAqB,wBAAA9C,aAC9B,2BARJ,kBAQoB8C,SAAS,OAAT,qBAEpB,kBAAOG,SACP,MAAAjB,GAAA,EAAgB,wBAAa/uC,MAA7B,gB,GxkBoJJ,cAAIt8B,EAAKN,GwkBnJgB,e,cAArBisE,GAAqB,WAAKN,GAAL,wB,OAAA,W,iDACrBkB,GAAO,kBAAOC,UAAcvI,GAAmB,wBAAa3nC,OAAnC,Q,+OAd7B,oB,MAAA,qB,OAAA,sB,kCAiBA,c,+BAEA,cACI,OAAO,IAAAmwC,GAAQpd,I,+BAGnB,YAA+D,a,0BAE/D,cAA4D,a,6DAGxD,WAAQ,0B,0ICjGhB,WACI,sB,0BADJ,+BACI,wB,sBADJ,iBACI,8CADJ,K,sBAAA,0BACI,oC,oBADJ,mHACI,oC,2BCQA,cACI,OAAO,M,qMhBSf,cACI,YADS,IAAAsU,OAA6B,QAAO,IAAA+I,MAAqC,IAClFC,GAAU,oBAGV,OAFI,KACA,kBAAQC,GAAiC,IAC7C,KAHU,S,2wBaPd,gB,YAIA,a,gBAIA,a,qBAIA,a,gKAiCA,oB,MAAA,gB,OAAA,sB,40DbpBwB,IAAAC,EACpBjE,OAAA,GAAK,YAGL,OAFI,EAAAkE,WAAY,EACZ,EAAAC,mBAAoB,EACxB,MAciB,GAAW,YAAC,Y,EIxCP,mC,GIMC,0C,GCLMC,IAAK,WAClC,SAAW,O,YISgC,GAAAvI,YAAYC,Q,GA0BoBuI,GAAkB,G,GvkByB3C,K,iE4kB/FtD,IAAIpvC,EAAW,EAAQ,GACnBqvC,EAAW,EAAQ,IACnB3yC,EAAS,EAAQ,GAAeA,OAEhC4yC,EAAU,IAAI/rE,MAAM,IAExB,SAASurD,IACPugB,EAAStuE,KAAKP,KAAM,IAGpBA,KAAK+uE,GAAK,WACV/uE,KAAKgvE,GAAK,WACVhvE,KAAKivE,GAAK,WACVjvE,KAAKkvE,GAAK,UA+GZ,SAASC,EAAMx+D,EAAG9O,GAChB,OAAQ8O,GAAK9O,EAAM8O,IAAO,GAAK9O,EAGjC,SAASutE,EAAKtsE,EAAG4B,EAAGjE,EAAGC,EAAGF,EAAGkT,EAAGvR,GAC9B,OAAQgtE,EAAMrsE,GAAM4B,EAAIjE,GAAQiE,EAAKhE,GAAMF,EAAIkT,EAAK,EAAGvR,GAAKuC,EAAK,EAGnE,SAAS2qE,EAAKvsE,EAAG4B,EAAGjE,EAAGC,EAAGF,EAAGkT,EAAGvR,GAC9B,OAAQgtE,EAAMrsE,GAAM4B,EAAIhE,EAAMD,GAAMC,GAAOF,EAAIkT,EAAK,EAAGvR,GAAKuC,EAAK,EAGnE,SAAS4qE,EAAKxsE,EAAG4B,EAAGjE,EAAGC,EAAGF,EAAGkT,EAAGvR,GAC9B,OAAQgtE,EAAMrsE,GAAK4B,EAAIjE,EAAIC,GAAKF,EAAIkT,EAAK,EAAGvR,GAAKuC,EAAK,EAGxD,SAAS6qE,EAAKzsE,EAAG4B,EAAGjE,EAAGC,EAAGF,EAAGkT,EAAGvR,GAC9B,OAAQgtE,EAAMrsE,GAAMrC,GAAKiE,GAAMhE,IAAQF,EAAIkT,EAAK,EAAGvR,GAAKuC,EAAK,EA7H/D86B,EAAS8uB,EAAKugB,GAEdvgB,EAAItsD,UAAUugD,QAAU,WAEtB,IADA,IAAI2P,EAAI4c,EACC1uE,EAAI,EAAGA,EAAI,KAAMA,EAAG8xD,EAAE9xD,GAAKJ,KAAKkrD,OAAOlQ,YAAgB,EAAJ56C,GAE5D,IAAI0C,EAAI9C,KAAK+uE,GACTrqE,EAAI1E,KAAKgvE,GACTvuE,EAAIT,KAAKivE,GACTvuE,EAAIV,KAAKkvE,GAEbpsE,EAAIssE,EAAItsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI0uE,EAAI1uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI2uE,EAAI3uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,UAAY,IACtCxtD,EAAI0qE,EAAI1qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIssE,EAAItsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI0uE,EAAI1uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI2uE,EAAI3uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IACtCxtD,EAAI0qE,EAAI1qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIssE,EAAItsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI0uE,EAAI1uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI2uE,EAAI3uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IACvCxtD,EAAI0qE,EAAI1qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IACvCpvD,EAAIssE,EAAItsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,IAAK,WAAY,GACvCxxD,EAAI0uE,EAAI1uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,WAAY,IACvCzxD,EAAI2uE,EAAI3uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IAGvCpvD,EAAIusE,EAAIvsE,EAFR4B,EAAI0qE,EAAI1qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IAEzBzxD,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI2uE,EAAI3uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,GACtCzxD,EAAI4uE,EAAI5uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,UAAY,IACvCxtD,EAAI2qE,EAAI3qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIusE,EAAIvsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI2uE,EAAI3uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,SAAY,GACvCzxD,EAAI4uE,EAAI5uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IACvCxtD,EAAI2qE,EAAI3qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIusE,EAAIvsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,UAAY,GACtCxxD,EAAI2uE,EAAI3uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,WAAY,GACvCzxD,EAAI4uE,EAAI5uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IACtCxtD,EAAI2qE,EAAI3qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIusE,EAAIvsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,IAAK,WAAY,GACvCxxD,EAAI2uE,EAAI3uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,GACtCzxD,EAAI4uE,EAAI5uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IAGtCpvD,EAAIwsE,EAAIxsE,EAFR4B,EAAI2qE,EAAI3qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IAEzBzxD,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI4uE,EAAI5uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI6uE,EAAI7uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IACvCxtD,EAAI4qE,EAAI5qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IACvCpvD,EAAIwsE,EAAIxsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI4uE,EAAI5uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI6uE,EAAI7uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IACtCxtD,EAAI4qE,EAAI5qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IACvCpvD,EAAIwsE,EAAIxsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,IAAK,UAAY,GACvCxxD,EAAI4uE,EAAI5uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI6uE,EAAI7uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IACtCxtD,EAAI4qE,EAAI5qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,SAAY,IACtCpvD,EAAIwsE,EAAIxsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI4uE,EAAI5uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,WAAY,IACvCzxD,EAAI6uE,EAAI7uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,UAAY,IAGvCpvD,EAAIysE,EAAIzsE,EAFR4B,EAAI4qE,EAAI5qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IAExBzxD,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI6uE,EAAI7uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI8uE,EAAI9uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IACvCxtD,EAAI6qE,EAAI7qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIysE,EAAIzsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,IAAK,WAAY,GACvCxxD,EAAI6uE,EAAI7uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,GAAI,WAAY,IACtCzxD,EAAI8uE,EAAI9uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,IAAK,WAAY,IACvCxtD,EAAI6qE,EAAI7qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IACtCpvD,EAAIysE,EAAIzsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI6uE,EAAI7uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,WAAY,IACvCzxD,EAAI8uE,EAAI9uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,WAAY,IACtCxtD,EAAI6qE,EAAI7qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,IAAK,WAAY,IACvCpvD,EAAIysE,EAAIzsE,EAAG4B,EAAGjE,EAAGC,EAAGwxD,EAAE,GAAI,WAAY,GACtCxxD,EAAI6uE,EAAI7uE,EAAGoC,EAAG4B,EAAGjE,EAAGyxD,EAAE,IAAK,WAAY,IACvCzxD,EAAI8uE,EAAI9uE,EAAGC,EAAGoC,EAAG4B,EAAGwtD,EAAE,GAAI,UAAY,IACtCxtD,EAAI6qE,EAAI7qE,EAAGjE,EAAGC,EAAGoC,EAAGovD,EAAE,GAAI,WAAY,IAEtClyD,KAAK+uE,GAAM/uE,KAAK+uE,GAAKjsE,EAAK,EAC1B9C,KAAKgvE,GAAMhvE,KAAKgvE,GAAKtqE,EAAK,EAC1B1E,KAAKivE,GAAMjvE,KAAKivE,GAAKxuE,EAAK,EAC1BT,KAAKkvE,GAAMlvE,KAAKkvE,GAAKxuE,EAAK,GAG5B4tD,EAAItsD,UAAUguD,QAAU,WAEtBhwD,KAAKkrD,OAAOlrD,KAAKwvE,gBAAkB,IAC/BxvE,KAAKwvE,aAAe,KACtBxvE,KAAKkrD,OAAO93C,KAAK,EAAGpT,KAAKwvE,aAAc,IACvCxvE,KAAKuiD,UACLviD,KAAKwvE,aAAe,GAGtBxvE,KAAKkrD,OAAO93C,KAAK,EAAGpT,KAAKwvE,aAAc,IACvCxvE,KAAKkrD,OAAOvP,cAAc37C,KAAKyvE,QAAQ,GAAI,IAC3CzvE,KAAKkrD,OAAOvP,cAAc37C,KAAKyvE,QAAQ,GAAI,IAC3CzvE,KAAKuiD,UAGL,IAAIzpC,EAASojB,EAAOM,YAAY,IAKhC,OAJA1jB,EAAOojC,aAAal8C,KAAK+uE,GAAI,GAC7Bj2D,EAAOojC,aAAal8C,KAAKgvE,GAAI,GAC7Bl2D,EAAOojC,aAAal8C,KAAKivE,GAAI,GAC7Bn2D,EAAOojC,aAAal8C,KAAKkvE,GAAI,IACtBp2D,GAuBTjZ,EAAOD,QAAU0uD,G,6BCzFjB,SAASohB,EAAQ/uE,GAEf,IACE,IAAK63C,EAAOm3B,aAAc,OAAO,EACjC,MAAO/sE,GACP,OAAO,EAET,IAAIoJ,EAAMwsC,EAAOm3B,aAAahvE,GAC9B,OAAI,MAAQqL,GACyB,SAA9B5H,OAAO4H,GAAKsZ,cA5DrBzlB,EAAOD,QAoBP,SAAoBkyD,EAAIvyB,GACtB,GAAImwC,EAAO,iBACT,OAAO5d,EAGT,IAAI3M,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIuqB,EAAO,oBACT,MAAM,IAAIxoE,MAAMq4B,GACPmwC,EAAO,oBAChB9rD,QAAQgsD,MAAMrwC,GAEd3b,QAAQwhC,KAAK7lB,GAEf4lB,GAAS,EAEX,OAAO2M,EAAGriD,MAAMzP,KAAM0P,e,8CCtC1B,IAAImgE,EAA6B,EAAQ,IAAmBhmB,MAAMgmB,2BAgBlE,SAAS/xC,KAmFTj+B,EAAOD,QA7EP,SAASkwE,EAAIC,EAAQC,EAAMv7D,GACzB,GAAoB,mBAATu7D,EAAqB,OAAOF,EAAIC,EAAQ,KAAMC,GACpDA,IAAMA,EAAO,IAClBv7D,EAvBF,SAAcA,GACZ,IAAIw7D,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAI5kB,EAAO37C,UAAU/K,OAAQq5B,EAAO,IAAIj7B,MAAMsoD,GAAOsI,EAAO,EAAGA,EAAOtI,EAAMsI,IAC/E31B,EAAK21B,GAAQjkD,UAAUikD,GAGzBl/C,EAAShF,MAAMzP,KAAMg+B,KAaZS,CAAKhqB,GAAYqpB,GAC5B,IAAIyqB,EAAWynB,EAAKznB,WAA8B,IAAlBynB,EAAKznB,UAAsBwnB,EAAOxnB,SAC9D/lD,EAAWwtE,EAAKxtE,WAA8B,IAAlBwtE,EAAKxtE,UAAsButE,EAAOvtE,SAE9D0tE,EAAiB,WACdH,EAAOvtE,UAAU2tE,KAGpBC,EAAgBL,EAAOrnB,gBAAkBqnB,EAAOrnB,eAAe2nB,SAE/DF,EAAW,WACb3tE,GAAW,EACX4tE,GAAgB,EACX7nB,GAAU9zC,EAASlU,KAAKwvE,IAG3BO,EAAgBP,EAAOjnB,gBAAkBinB,EAAOjnB,eAAeynB,WAE/D9nB,EAAQ,WACVF,GAAW,EACX+nB,GAAgB,EACX9tE,GAAUiS,EAASlU,KAAKwvE,IAG3BS,EAAU,SAAiB1tB,GAC7BruC,EAASlU,KAAKwvE,EAAQjtB,IAGpB2tB,EAAU,WACZ,IAAI3tB,EAEJ,OAAIyF,IAAa+nB,GACVP,EAAOjnB,gBAAmBinB,EAAOjnB,eAAeH,QAAO7F,EAAM,IAAI+sB,GAC/Dp7D,EAASlU,KAAKwvE,EAAQjtB,IAG3BtgD,IAAa4tE,GACVL,EAAOrnB,gBAAmBqnB,EAAOrnB,eAAeC,QAAO7F,EAAM,IAAI+sB,GAC/Dp7D,EAASlU,KAAKwvE,EAAQjtB,SAF/B,GAME4tB,EAAY,WACdX,EAAOY,IAAIpyC,GAAG,SAAU4xC,IAiB1B,OAnEF,SAAmBJ,GACjB,OAAOA,EAAOa,WAAqC,mBAAjBb,EAAOc,MAoDrCC,CAAUf,GAIHvtE,IAAautE,EAAOrnB,iBAE7BqnB,EAAOxxC,GAAG,MAAO2xC,GACjBH,EAAOxxC,GAAG,QAAS2xC,KANnBH,EAAOxxC,GAAG,WAAY4xC,GACtBJ,EAAOxxC,GAAG,QAASkyC,GACfV,EAAOY,IAAKD,IAAiBX,EAAOxxC,GAAG,UAAWmyC,IAOxDX,EAAOxxC,GAAG,MAAOkqB,GACjBsnB,EAAOxxC,GAAG,SAAU4xC,IACD,IAAfH,EAAK1pB,OAAiBypB,EAAOxxC,GAAG,QAASiyC,GAC7CT,EAAOxxC,GAAG,QAASkyC,GACZ,WACLV,EAAOpxC,eAAe,WAAYwxC,GAClCJ,EAAOpxC,eAAe,QAAS8xC,GAC/BV,EAAOpxC,eAAe,UAAW+xC,GAC7BX,EAAOY,KAAKZ,EAAOY,IAAIhyC,eAAe,SAAUwxC,GACpDJ,EAAOpxC,eAAe,MAAOuxC,GAC7BH,EAAOpxC,eAAe,QAASuxC,GAC/BH,EAAOpxC,eAAe,SAAUwxC,GAChCJ,EAAOpxC,eAAe,MAAO8pB,GAC7BsnB,EAAOpxC,eAAe,QAAS6xC,GAC/BT,EAAOpxC,eAAe,QAAS8xC,M,6BClGnC,IAAIv0C,EAAS,EAAQ,GAAUA,OAC3BsD,EAAW,EAAQ,GACnBqvC,EAAW,EAAQ,IAEnBC,EAAU,IAAI/rE,MAAM,IAEpBguE,EAAK,CACP,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAClD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAGhDC,EAAK,CACP,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAClD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAClD,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,IAGhDC,EAAK,CACP,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EACrD,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GACpD,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAGnDC,EAAK,CACP,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GACpD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EACrD,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,IAGlDC,EAAK,CAAC,EAAY,WAAY,WAAY,WAAY,YACtDC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,GAE1D,SAAS7iB,IACPsgB,EAAStuE,KAAKP,KAAM,IAGpBA,KAAK+uE,GAAK,WACV/uE,KAAKgvE,GAAK,WACVhvE,KAAKivE,GAAK,WACVjvE,KAAKkvE,GAAK,UACVlvE,KAAKqxE,GAAK,WAwFZ,SAASlC,EAAMx+D,EAAG9O,GAChB,OAAQ8O,GAAK9O,EAAM8O,IAAO,GAAK9O,EAGjC,SAASyvE,EAAKxuE,EAAG4B,EAAGjE,EAAGC,EAAG6D,EAAG/D,EAAGkT,EAAGvR,GACjC,OAAQgtE,EAAMrsE,GAAK4B,EAAIjE,EAAIC,GAAKF,EAAIkT,EAAK,EAAGvR,GAAKoC,EAAK,EAGxD,SAASgtE,EAAKzuE,EAAG4B,EAAGjE,EAAGC,EAAG6D,EAAG/D,EAAGkT,EAAGvR,GACjC,OAAQgtE,EAAMrsE,GAAM4B,EAAIjE,GAAQiE,EAAKhE,GAAMF,EAAIkT,EAAK,EAAGvR,GAAKoC,EAAK,EAGnE,SAASitE,EAAK1uE,EAAG4B,EAAGjE,EAAGC,EAAG6D,EAAG/D,EAAGkT,EAAGvR,GACjC,OAAQgtE,EAAMrsE,IAAM4B,GAAMjE,GAAMC,GAAKF,EAAIkT,EAAK,EAAGvR,GAAKoC,EAAK,EAG7D,SAASktE,EAAK3uE,EAAG4B,EAAGjE,EAAGC,EAAG6D,EAAG/D,EAAGkT,EAAGvR,GACjC,OAAQgtE,EAAMrsE,GAAM4B,EAAIhE,EAAMD,GAAMC,GAAOF,EAAIkT,EAAK,EAAGvR,GAAKoC,EAAK,EAGnE,SAASmtE,EAAK5uE,EAAG4B,EAAGjE,EAAGC,EAAG6D,EAAG/D,EAAGkT,EAAGvR,GACjC,OAAQgtE,EAAMrsE,GAAK4B,GAAKjE,GAAMC,IAAOF,EAAIkT,EAAK,EAAGvR,GAAKoC,EAAK,EA1G7Di7B,EAAS+uB,EAAWsgB,GAEpBtgB,EAAUvsD,UAAUugD,QAAU,WAE5B,IADA,IAAI1iB,EAAQivC,EACH72D,EAAI,EAAGA,EAAI,KAAMA,EAAG4nB,EAAM5nB,GAAKjY,KAAKkrD,OAAOlQ,YAAgB,EAAJ/iC,GAehE,IAbA,IAAIonC,EAAe,EAAVr/C,KAAK+uE,GACVvvB,EAAe,EAAVx/C,KAAKgvE,GACVpvB,EAAe,EAAV5/C,KAAKivE,GACVnvB,EAAe,EAAV9/C,KAAKkvE,GACVhvB,EAAe,EAAVlgD,KAAKqxE,GAEVM,EAAe,EAAV3xE,KAAK+uE,GACV6C,EAAe,EAAV5xE,KAAKgvE,GACV6C,EAAe,EAAV7xE,KAAKivE,GACV6C,EAAe,EAAV9xE,KAAKkvE,GACV3oB,EAAe,EAAVvmD,KAAKqxE,GAGLjxE,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAI2xE,EACAC,EACA5xE,EAAI,IACN2xE,EAAKT,EAAIjyB,EAAIG,EAAII,EAAIE,EAAII,EAAIrgB,EAAMkxC,EAAG3wE,IAAK+wE,EAAG,GAAIF,EAAG7wE,IACrD4xE,EAAKN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIvrB,EAAI1mB,EAAMmxC,EAAG5wE,IAAKgxE,EAAG,GAAIF,EAAG9wE,KAC5CA,EAAI,IACb2xE,EAAKR,EAAIlyB,EAAIG,EAAII,EAAIE,EAAII,EAAIrgB,EAAMkxC,EAAG3wE,IAAK+wE,EAAG,GAAIF,EAAG7wE,IACrD4xE,EAAKP,EAAIE,EAAIC,EAAIC,EAAIC,EAAIvrB,EAAI1mB,EAAMmxC,EAAG5wE,IAAKgxE,EAAG,GAAIF,EAAG9wE,KAC5CA,EAAI,IACb2xE,EAAKP,EAAInyB,EAAIG,EAAII,EAAIE,EAAII,EAAIrgB,EAAMkxC,EAAG3wE,IAAK+wE,EAAG,GAAIF,EAAG7wE,IACrD4xE,EAAKR,EAAIG,EAAIC,EAAIC,EAAIC,EAAIvrB,EAAI1mB,EAAMmxC,EAAG5wE,IAAKgxE,EAAG,GAAIF,EAAG9wE,KAC5CA,EAAI,IACb2xE,EAAKN,EAAIpyB,EAAIG,EAAII,EAAIE,EAAII,EAAIrgB,EAAMkxC,EAAG3wE,IAAK+wE,EAAG,GAAIF,EAAG7wE,IACrD4xE,EAAKT,EAAII,EAAIC,EAAIC,EAAIC,EAAIvrB,EAAI1mB,EAAMmxC,EAAG5wE,IAAKgxE,EAAG,GAAIF,EAAG9wE,MAErD2xE,EAAKL,EAAIryB,EAAIG,EAAII,EAAIE,EAAII,EAAIrgB,EAAMkxC,EAAG3wE,IAAK+wE,EAAG,GAAIF,EAAG7wE,IACrD4xE,EAAKV,EAAIK,EAAIC,EAAIC,EAAIC,EAAIvrB,EAAI1mB,EAAMmxC,EAAG5wE,IAAKgxE,EAAG,GAAIF,EAAG9wE,KAGvDi/C,EAAKa,EACLA,EAAKJ,EACLA,EAAKqvB,EAAKvvB,EAAI,IACdA,EAAKJ,EACLA,EAAKuyB,EAELJ,EAAKprB,EACLA,EAAKurB,EACLA,EAAK3C,EAAK0C,EAAI,IACdA,EAAKD,EACLA,EAAKI,EAIP,IAAI1wE,EAAKtB,KAAKgvE,GAAKpvB,EAAKkyB,EAAM,EAC9B9xE,KAAKgvE,GAAMhvE,KAAKivE,GAAKnvB,EAAKyG,EAAM,EAChCvmD,KAAKivE,GAAMjvE,KAAKkvE,GAAKhvB,EAAKyxB,EAAM,EAChC3xE,KAAKkvE,GAAMlvE,KAAKqxE,GAAKhyB,EAAKuyB,EAAM,EAChC5xE,KAAKqxE,GAAMrxE,KAAK+uE,GAAKvvB,EAAKqyB,EAAM,EAChC7xE,KAAK+uE,GAAKztE,GAGZitD,EAAUvsD,UAAUguD,QAAU,WAE5BhwD,KAAKkrD,OAAOlrD,KAAKwvE,gBAAkB,IAC/BxvE,KAAKwvE,aAAe,KACtBxvE,KAAKkrD,OAAO93C,KAAK,EAAGpT,KAAKwvE,aAAc,IACvCxvE,KAAKuiD,UACLviD,KAAKwvE,aAAe,GAGtBxvE,KAAKkrD,OAAO93C,KAAK,EAAGpT,KAAKwvE,aAAc,IACvCxvE,KAAKkrD,OAAOvP,cAAc37C,KAAKyvE,QAAQ,GAAI,IAC3CzvE,KAAKkrD,OAAOvP,cAAc37C,KAAKyvE,QAAQ,GAAI,IAC3CzvE,KAAKuiD,UAGL,IAAIzpC,EAASojB,EAAOK,MAAQL,EAAOK,MAAM,IAAM,IAAIL,EAAO,IAM1D,OALApjB,EAAOojC,aAAal8C,KAAK+uE,GAAI,GAC7Bj2D,EAAOojC,aAAal8C,KAAKgvE,GAAI,GAC7Bl2D,EAAOojC,aAAal8C,KAAKivE,GAAI,GAC7Bn2D,EAAOojC,aAAal8C,KAAKkvE,GAAI,IAC7Bp2D,EAAOojC,aAAal8C,KAAKqxE,GAAI,IACtBv4D,GA2BTjZ,EAAOD,QAAU2uD,G,iBClKb3uD,EAAUC,EAAOD,QAAU,SAAc+5D,GAC3CA,EAAYA,EAAUr0C,cAEtB,IAAI2sD,EAAYryE,EAAQ+5D,GACxB,IAAKsY,EAAW,MAAM,IAAI/qE,MAAMyyD,EAAY,+CAE5C,OAAO,IAAIsY,IAGLzjB,IAAM,EAAQ,KACtB5uD,EAAQsyE,KAAO,EAAQ,KACvBtyE,EAAQuyE,OAAS,EAAQ,KACzBvyE,EAAQwyE,OAAS,EAAQ,IACzBxyE,EAAQyyE,OAAS,EAAQ,KACzBzyE,EAAQ0yE,OAAS,EAAQ,K,iBCdzB1yE,EAAUC,EAAOD,QAAU,EAAQ,KAC3B2yE,OAAS3yE,EACjBA,EAAQwoD,SAAWxoD,EACnBA,EAAQyoD,SAAW,EAAQ,IAC3BzoD,EAAQsoD,OAAS,EAAQ,IACzBtoD,EAAQ6hD,UAAY,EAAQ,IAC5B7hD,EAAQ4yE,YAAc,EAAQ,M,gBCL9B,IAAI15D,EAAS,EAAQ,GACjBojB,EAASpjB,EAAOojB,OAGpB,SAASC,EAAWrf,EAAKC,GACvB,IAAK,IAAIpb,KAAOmb,EACdC,EAAIpb,GAAOmb,EAAInb,GAWnB,SAASy6B,EAAYC,EAAKC,EAAkB33B,GAC1C,OAAOu3B,EAAOG,EAAKC,EAAkB33B,GATnCu3B,EAAO1b,MAAQ0b,EAAOK,OAASL,EAAOM,aAAeN,EAAOO,gBAC9D58B,EAAOD,QAAUkZ,GAGjBqjB,EAAUrjB,EAAQlZ,GAClBA,EAAQs8B,OAASE,GAQnBD,EAAUD,EAAQE,GAElBA,EAAW5b,KAAO,SAAU6b,EAAKC,EAAkB33B,GACjD,GAAmB,iBAAR03B,EACT,MAAM,IAAIhpB,UAAU,iCAEtB,OAAO6oB,EAAOG,EAAKC,EAAkB33B,IAGvCy3B,EAAWG,MAAQ,SAAUnyB,EAAMgJ,EAAMspB,GACvC,GAAoB,iBAATtyB,EACT,MAAM,IAAIiJ,UAAU,6BAEtB,IAAIpN,EAAMi2B,EAAO9xB,GAUjB,YATa+G,IAATiC,EACsB,iBAAbspB,EACTz2B,EAAImN,KAAKA,EAAMspB,GAEfz2B,EAAImN,KAAKA,GAGXnN,EAAImN,KAAK,GAEJnN,GAGTm2B,EAAWI,YAAc,SAAUpyB,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAIiJ,UAAU,6BAEtB,OAAO6oB,EAAO9xB,IAGhBgyB,EAAWK,gBAAkB,SAAUryB,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAIiJ,UAAU,6BAEtB,OAAOyF,EAAO6jB,WAAWvyB,K,8BC5D3B,gBA6BA,IAAI49C,EAAM,EAAQ,IAelB,SAASyqB,EAAc1vD,GACrB,IAAI2vD,EAAQ1yE,KAEZA,KAAK0X,KAAO,KACZ1X,KAAK0gB,MAAQ,KACb1gB,KAAK2yE,OAAS,YAolBhB,SAAwBC,EAAS7vD,EAAO+/B,GACtC,IAAIpiC,EAAQkyD,EAAQlyD,MACpBkyD,EAAQlyD,MAAQ,KAChB,KAAOA,GAAO,CACZ,IAAIuoC,EAAKvoC,EAAMjM,SACfsO,EAAM8vD,YACN5pB,EAAGnG,GACHpiC,EAAQA,EAAMhJ,KAEZqL,EAAM+vD,mBACR/vD,EAAM+vD,mBAAmBp7D,KAAOk7D,EAEhC7vD,EAAM+vD,mBAAqBF,EA/lB3BG,CAAeL,EAAO3vD,IAlB1BljB,EAAOD,QAAUyoD,EAwBjB,IAIIH,EAJA8qB,GAAcvpD,EAAQyU,SAAW,CAAC,QAAS,SAASj0B,QAAQwf,EAAQ4U,QAAQhqB,MAAM,EAAG,KAAO,EAAI4+D,EAAejrB,EAAIjqB,SAOvHsqB,EAAS6qB,cAAgBA,EAGzB,IAAI/qB,EAAOrnD,OAAOY,OAAO,EAAQ,KACjCymD,EAAK3oB,SAAW,EAAQ,GAIxB,IAAI2zC,EAAe,CACjBC,UAAW,EAAQ,KAKjBb,EAAS,EAAQ,IAKjBr2C,EAAS,EAAQ,IAAeA,OAChCm3C,EAAgB76B,EAAOvD,YAAc,aAUzC,IA2IIq+B,EA3IAC,EAAc,EAAQ,IAI1B,SAASC,KAET,SAASN,EAAcztD,EAASsqD,GAC9B7nB,EAASA,GAAU,EAAQ,IAE3BziC,EAAUA,GAAW,GAOrB,IAAIguD,EAAW1D,aAAkB7nB,EAIjCloD,KAAK0zE,aAAejuD,EAAQiuD,WAExBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQkuD,oBAK7D,IAAIC,EAAMnuD,EAAQojC,cACdgrB,EAAcpuD,EAAQquD,sBACtBC,EAAa/zE,KAAK0zE,WAAa,GAAK,MAElB1zE,KAAK6oD,cAAvB+qB,GAAe,IAARA,EAAgCA,EAAaH,IAAaI,GAA+B,IAAhBA,GAAyCA,EAAsCE,EAGnK/zE,KAAK6oD,cAAgB9hD,KAAK+G,MAAM9N,KAAK6oD,eAGrC7oD,KAAKg0E,aAAc,EAGnBh0E,KAAKi0E,WAAY,EAEjBj0E,KAAKk0E,QAAS,EAEdl0E,KAAK2oD,OAAQ,EAEb3oD,KAAKqwE,UAAW,EAGhBrwE,KAAK+oD,WAAY,EAKjB,IAAIorB,GAAqC,IAA1B1uD,EAAQ2uD,cACvBp0E,KAAKo0E,eAAiBD,EAKtBn0E,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAKlDr0E,KAAK2E,OAAS,EAGd3E,KAAKs0E,SAAU,EAGft0E,KAAKu0E,OAAS,EAMdv0E,KAAKw0E,MAAO,EAKZx0E,KAAKy0E,kBAAmB,EAGxBz0E,KAAK00E,QAAU,SAAUnuB,IA4R3B,SAAiBwpB,EAAQxpB,GACvB,IAAIxjC,EAAQgtD,EAAOrnB,eACf8rB,EAAOzxD,EAAMyxD,KACbvrB,EAAKlmC,EAAM4xD,QAIf,GAdF,SAA4B5xD,GAC1BA,EAAMuxD,SAAU,EAChBvxD,EAAM4xD,QAAU,KAChB5xD,EAAMpe,QAAUoe,EAAM6xD,SACtB7xD,EAAM6xD,SAAW,EAQjBC,CAAmB9xD,GAEfwjC,GAtCN,SAAsBwpB,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,KAC3ClmC,EAAM8vD,UAEJ2B,GAGFxsB,EAAIjqB,SAASkrB,EAAI1C,GAGjByB,EAAIjqB,SAAS+2C,EAAa/E,EAAQhtD,GAClCgtD,EAAOrnB,eAAeqsB,cAAe,EACrChF,EAAOlxC,KAAK,QAAS0nB,KAIrB0C,EAAG1C,GACHwpB,EAAOrnB,eAAeqsB,cAAe,EACrChF,EAAOlxC,KAAK,QAAS0nB,GAGrBuuB,EAAY/E,EAAQhtD,IAkBdiyD,CAAajF,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,OAAS,CAErD,IAAIonB,EAAW4E,EAAWlyD,GAErBstD,GAAattD,EAAMwxD,QAAWxxD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBACjEC,EAAYpF,EAAQhtD,GAGlByxD,EAEFxB,EAAWoC,EAAYrF,EAAQhtD,EAAOstD,EAAUpnB,GAGhDmsB,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,IA/StCyrB,CAAQ3E,EAAQxpB,IAIlBvmD,KAAK20E,QAAU,KAGf30E,KAAK40E,SAAW,EAEhB50E,KAAKk1E,gBAAkB,KACvBl1E,KAAKq1E,oBAAsB,KAI3Br1E,KAAK6yE,UAAY,EAIjB7yE,KAAKs1E,aAAc,EAGnBt1E,KAAK+0E,cAAe,EAGpB/0E,KAAKu1E,qBAAuB,EAI5Bv1E,KAAK8yE,mBAAqB,IAAIL,EAAczyE,MA0C9C,SAASqoD,EAAS5iC,GAUhB,GATAyiC,EAASA,GAAU,EAAQ,MAStBorB,EAAgB/yE,KAAK8nD,EAAUroD,OAAWA,gBAAgBkoD,GAC7D,OAAO,IAAIG,EAAS5iC,GAGtBzlB,KAAK0oD,eAAiB,IAAIwqB,EAAcztD,EAASzlB,MAGjDA,KAAKwC,UAAW,EAEZijB,IAC2B,mBAAlBA,EAAQhC,QAAsBzjB,KAAKw1E,OAAS/vD,EAAQhC,OAEjC,mBAAnBgC,EAAQgwD,SAAuBz1E,KAAK01E,QAAUjwD,EAAQgwD,QAElC,mBAApBhwD,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,SAEtC,mBAAlBlwD,EAAQq8B,QAAsB9hD,KAAK+hD,OAASt8B,EAAQq8B,QAGjEywB,EAAOhyE,KAAKP,MAgJd,SAAS41E,EAAQ7F,EAAQhtD,EAAO0yD,EAAQliE,EAAKq6C,EAAOlxB,EAAUusB,GAC5DlmC,EAAM6xD,SAAWrhE,EACjBwP,EAAM4xD,QAAU1rB,EAChBlmC,EAAMuxD,SAAU,EAChBvxD,EAAMyxD,MAAO,EACTiB,EAAQ1F,EAAO2F,QAAQ9nB,EAAO7qC,EAAM2xD,SAAc3E,EAAOyF,OAAO5nB,EAAOlxB,EAAU3Z,EAAM2xD,SAC3F3xD,EAAMyxD,MAAO,EA2Df,SAASY,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,GACtConB,GASP,SAAsBN,EAAQhtD,GACP,IAAjBA,EAAMpe,QAAgBoe,EAAMkxD,YAC9BlxD,EAAMkxD,WAAY,EAClBlE,EAAOlxC,KAAK,UAZCg3C,CAAa9F,EAAQhtD,GACpCA,EAAM8vD,YACN5pB,IACA6rB,EAAY/E,EAAQhtD,GActB,SAASoyD,EAAYpF,EAAQhtD,GAC3BA,EAAM0xD,kBAAmB,EACzB,IAAI/zD,EAAQqC,EAAMmyD,gBAElB,GAAInF,EAAO2F,SAAWh1D,GAASA,EAAMhJ,KAAM,CAEzC,IAAIrX,EAAI0iB,EAAMwyD,qBACVz8D,EAAS,IAAI/V,MAAM1C,GACnBy1E,EAAS/yD,EAAM+vD,mBACnBgD,EAAOp1D,MAAQA,EAIf,IAFA,IAAIlJ,EAAQ,EACRu+D,GAAa,EACVr1D,GACL5H,EAAOtB,GAASkJ,EACXA,EAAMs1D,QAAOD,GAAa,GAC/Br1D,EAAQA,EAAMhJ,KACdF,GAAS,EAEXsB,EAAOi9D,WAAaA,EAEpBH,EAAQ7F,EAAQhtD,GAAO,EAAMA,EAAMpe,OAAQmU,EAAQ,GAAIg9D,EAAOnD,QAI9D5vD,EAAM8vD,YACN9vD,EAAMsyD,oBAAsB,KACxBS,EAAOp+D,MACTqL,EAAM+vD,mBAAqBgD,EAAOp+D,KAClCo+D,EAAOp+D,KAAO,MAEdqL,EAAM+vD,mBAAqB,IAAIL,EAAc1vD,GAE/CA,EAAMwyD,qBAAuB,MACxB,CAEL,KAAO70D,GAAO,CACZ,IAAIktC,EAAQltC,EAAMktC,MACdlxB,EAAWhc,EAAMgc,SACjBusB,EAAKvoC,EAAMjM,SAUf,GAPAmhE,EAAQ7F,EAAQhtD,GAAO,EAFbA,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OAEJipD,EAAOlxB,EAAUusB,GACpDvoC,EAAQA,EAAMhJ,KACdqL,EAAMwyD,uBAKFxyD,EAAMuxD,QACR,MAIU,OAAV5zD,IAAgBqC,EAAMsyD,oBAAsB,MAGlDtyD,EAAMmyD,gBAAkBx0D,EACxBqC,EAAM0xD,kBAAmB,EAiC3B,SAASQ,EAAWlyD,GAClB,OAAOA,EAAMmxD,QAA2B,IAAjBnxD,EAAMpe,QAA0C,OAA1Boe,EAAMmyD,kBAA6BnyD,EAAMstD,WAAattD,EAAMuxD,QAE3G,SAAS2B,EAAUlG,EAAQhtD,GACzBgtD,EAAOhuB,QAAO,SAAUe,GACtB//B,EAAM8vD,YACF/vB,GACFitB,EAAOlxC,KAAK,QAASikB,GAEvB//B,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,aACZi2C,EAAY/E,EAAQhtD,MAgBxB,SAAS+xD,EAAY/E,EAAQhtD,GAC3B,IAAImzD,EAAOjB,EAAWlyD,GAQtB,OAPImzD,KAfN,SAAmBnG,EAAQhtD,GACpBA,EAAMuyD,aAAgBvyD,EAAMixD,cACF,mBAAlBjE,EAAOhuB,QAChBh/B,EAAM8vD,YACN9vD,EAAMixD,aAAc,EACpBhsB,EAAIjqB,SAASk4C,EAAWlG,EAAQhtD,KAEhCA,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,eAQds3C,CAAUpG,EAAQhtD,GACM,IAApBA,EAAM8vD,YACR9vD,EAAMstD,UAAW,EACjBN,EAAOlxC,KAAK,YAGTq3C,EAzhBT/tB,EAAK3oB,SAAS6oB,EAAUkqB,GAmHxBW,EAAclxE,UAAU8oD,UAAY,WAGlC,IAFA,IAAInvC,EAAU3b,KAAKk1E,gBACfnzC,EAAM,GACHpmB,GACLomB,EAAI/jB,KAAKrC,GACTA,EAAUA,EAAQjE,KAEpB,OAAOqqB,GAGT,WACE,IACEjhC,OAAOC,eAAemyE,EAAclxE,UAAW,SAAU,CACvDf,IAAKkyE,EAAaC,WAAU,WAC1B,OAAOpzE,KAAK8qD,cACX,6EAAmF,aAExF,MAAOloD,KAPX,GAasB,mBAAXzB,QAAyBA,OAAOi1E,aAAiE,mBAA3C9hE,SAAStS,UAAUb,OAAOi1E,cACzF9C,EAAkBh/D,SAAStS,UAAUb,OAAOi1E,aAC5Ct1E,OAAOC,eAAesnD,EAAUlnD,OAAOi1E,YAAa,CAClD/0E,MAAO,SAAUS,GACf,QAAIwxE,EAAgB/yE,KAAKP,KAAM8B,IAC3B9B,OAASqoD,IAENvmD,GAAUA,EAAO4mD,0BAA0BwqB,OAItDI,EAAkB,SAAUxxE,GAC1B,OAAOA,aAAkB9B,MAqC7BqoD,EAASrmD,UAAUq0E,KAAO,WACxBr2E,KAAK6+B,KAAK,QAAS,IAAI33B,MAAM,+BA8B/BmhD,EAASrmD,UAAUyhB,MAAQ,SAAUmqC,EAAOlxB,EAAUusB,GACpD,IAnOqB1jD,EAmOjBwd,EAAQ/iB,KAAK0oD,eACbhmB,GAAM,EACNszC,GAASjzD,EAAM2wD,aArOEnuE,EAqO0BqoD,EApOxC1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAwP9C,OAlBI2C,IAAU95C,EAAOqZ,SAASqY,KAC5BA,EA3OJ,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GA0OT0oB,CAAoB1oB,IAGN,mBAAblxB,IACTusB,EAAKvsB,EACLA,EAAW,MAGTs5C,EAAOt5C,EAAW,SAAmBA,IAAUA,EAAW3Z,EAAMsxD,iBAElD,mBAAPprB,IAAmBA,EAAKuqB,GAE/BzwD,EAAM4lC,MA7CZ,SAAuBonB,EAAQ9mB,GAC7B,IAAI1C,EAAK,IAAIr/C,MAAM,mBAEnB6oE,EAAOlxC,KAAK,QAAS0nB,GACrByB,EAAIjqB,SAASkrB,EAAI1C,GAyCAgwB,CAAcv2E,KAAMipD,IAAa+sB,GAnCpD,SAAoBjG,EAAQhtD,EAAO6qC,EAAO3E,GACxC,IAAIutB,GAAQ,EACRjwB,GAAK,EAYT,OAVc,OAAVqH,EACFrH,EAAK,IAAIlzC,UAAU,uCACO,iBAAVu6C,QAAgCz8C,IAAVy8C,GAAwB7qC,EAAM2wD,aACpEntB,EAAK,IAAIlzC,UAAU,oCAEjBkzC,IACFwpB,EAAOlxC,KAAK,QAAS0nB,GACrByB,EAAIjqB,SAASkrB,EAAI1C,GACjBiwB,GAAQ,GAEHA,EAqBoDC,CAAWz2E,KAAM+iB,EAAO6qC,EAAO3E,MACxFlmC,EAAM8vD,YACNnwC,EAkDJ,SAAuBqtC,EAAQhtD,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,GAC5D,IAAK+sB,EAAO,CACV,IAAIU,EAtBR,SAAqB3zD,EAAO6qC,EAAOlxB,GAC5B3Z,EAAM2wD,aAAsC,IAAxB3wD,EAAMqxD,eAA4C,iBAAVxmB,IAC/DA,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,IAE7B,OAAOkxB,EAkBU+oB,CAAY5zD,EAAO6qC,EAAOlxB,GACrCkxB,IAAU8oB,IACZV,GAAQ,EACRt5C,EAAW,SACXkxB,EAAQ8oB,GAGZ,IAAInjE,EAAMwP,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OAEvCoe,EAAMpe,QAAU4O,EAEhB,IAAImvB,EAAM3f,EAAMpe,OAASoe,EAAM8lC,cAE1BnmB,IAAK3f,EAAMkxD,WAAY,GAE5B,GAAIlxD,EAAMuxD,SAAWvxD,EAAMwxD,OAAQ,CACjC,IAAIv7D,EAAO+J,EAAMsyD,oBACjBtyD,EAAMsyD,oBAAsB,CAC1BznB,MAAOA,EACPlxB,SAAUA,EACVs5C,MAAOA,EACPvhE,SAAUw0C,EACVvxC,KAAM,MAEJsB,EACFA,EAAKtB,KAAOqL,EAAMsyD,oBAElBtyD,EAAMmyD,gBAAkBnyD,EAAMsyD,oBAEhCtyD,EAAMwyD,sBAAwB,OAE9BK,EAAQ7F,EAAQhtD,GAAO,EAAOxP,EAAKq6C,EAAOlxB,EAAUusB,GAGtD,OAAOvmB,EAtFCk0C,CAAc52E,KAAM+iB,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,IAGpDvmB,GAGT2lB,EAASrmD,UAAU60E,KAAO,WACZ72E,KAAK0oD,eAEX6rB,UAGRlsB,EAASrmD,UAAU80E,OAAS,WAC1B,IAAI/zD,EAAQ/iB,KAAK0oD,eAEb3lC,EAAMwxD,SACRxxD,EAAMwxD,SAEDxxD,EAAMuxD,SAAYvxD,EAAMwxD,QAAWxxD,EAAMstD,UAAattD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBAAiBC,EAAYn1E,KAAM+iB,KAIlIslC,EAASrmD,UAAU+0E,mBAAqB,SAA4Br6C,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASpX,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOrb,SAASyyB,EAAW,IAAIpX,gBAAkB,GAAI,MAAM,IAAIjS,UAAU,qBAAuBqpB,GAEpM,OADA18B,KAAK0oD,eAAe2rB,gBAAkB33C,EAC/B18B,MAUTc,OAAOC,eAAesnD,EAASrmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,eAAeG,iBA8L/BR,EAASrmD,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACrDA,EAAG,IAAI/hD,MAAM,iCAGfmhD,EAASrmD,UAAU0zE,QAAU,KAE7BrtB,EAASrmD,UAAU2R,IAAM,SAAUi6C,EAAOlxB,EAAUusB,GAClD,IAAIlmC,EAAQ/iB,KAAK0oD,eAEI,mBAAVkF,GACT3E,EAAK2E,EACLA,EAAQ,KACRlxB,EAAW,MACkB,mBAAbA,IAChBusB,EAAKvsB,EACLA,EAAW,MAGTkxB,SAAuC5tD,KAAKyjB,MAAMmqC,EAAOlxB,GAGzD3Z,EAAMwxD,SACRxxD,EAAMwxD,OAAS,EACfv0E,KAAK82E,UAIF/zD,EAAMmxD,QAAWnxD,EAAMstD,UA0C9B,SAAqBN,EAAQhtD,EAAOkmC,GAClClmC,EAAMmxD,QAAS,EACfY,EAAY/E,EAAQhtD,GAChBkmC,IACElmC,EAAMstD,SAAUroB,EAAIjqB,SAASkrB,GAAS8mB,EAAOtxC,KAAK,SAAUwqB,IAElElmC,EAAM4lC,OAAQ,EACdonB,EAAOvtE,UAAW,EAjDoBw0E,CAAYh3E,KAAM+iB,EAAOkmC,IAoEjEnoD,OAAOC,eAAesnD,EAASrmD,UAAW,YAAa,CACrDf,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK0oD,gBAGF1oD,KAAK0oD,eAAeK,WAE7B1jD,IAAK,SAAUhE,GAGRrB,KAAK0oD,iBAMV1oD,KAAK0oD,eAAeK,UAAY1nD,MAIpCgnD,EAASrmD,UAAU2zE,QAAUpC,EAAYoC,QACzCttB,EAASrmD,UAAUi1E,WAAa1D,EAAY2D,UAC5C7uB,EAASrmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CjpD,KAAK2T,MACLs1C,EAAGnG,M,uEC3qBL,IAAIxjB,EAAS,EAAQ,GAErB,SAAS63C,EAAO1xD,GACdzlB,KAAKylB,QAAUA,EAEfzlB,KAAKoW,KAAOpW,KAAKylB,QAAQrP,KACzBpW,KAAKgrD,UAAY,EACjBhrD,KAAK+/B,QAEL//B,KAAK8Y,OAAS,IAAI/V,MAAM/C,KAAKgrD,WAC7BhrD,KAAKo3E,UAAY,EAEnBv3E,EAAOD,QAAUu3E,EAEjBA,EAAOn1E,UAAU+9B,MAAQ,aAIzBo3C,EAAOn1E,UAAUmgD,OAAS,SAAgB1sB,GACxC,OAAoB,IAAhBA,EAAK9wB,OACA,GAES,YAAd3E,KAAKoW,KACApW,KAAKq3E,eAAe5hD,GAEpBz1B,KAAKs3E,eAAe7hD,IAG/B0hD,EAAOn1E,UAAUu1E,QAAU,SAAiB9hD,EAAMiJ,GAGhD,IADA,IAAIr0B,EAAMtD,KAAKsD,IAAIrK,KAAK8Y,OAAOnU,OAAS3E,KAAKo3E,UAAW3hD,EAAK9wB,OAAS+5B,GAC7Dt+B,EAAI,EAAGA,EAAIiK,EAAKjK,IACvBJ,KAAK8Y,OAAO9Y,KAAKo3E,UAAYh3E,GAAKq1B,EAAKiJ,EAAMt+B,GAI/C,OAHAJ,KAAKo3E,WAAa/sE,EAGXA,GAGT8sE,EAAOn1E,UAAUw1E,aAAe,SAAsBz1C,EAAKrD,GAGzD,OAFA1+B,KAAKuiD,QAAQviD,KAAK8Y,OAAQ,EAAGipB,EAAKrD,GAClC1+B,KAAKo3E,UAAY,EACVp3E,KAAKgrD,WAGdmsB,EAAOn1E,UAAUs1E,eAAiB,SAAwB7hD,GACxD,IAAIgiD,EAAW,EACXC,EAAY,EAEZlgE,GAAUxX,KAAKo3E,UAAY3hD,EAAK9wB,QAAU3E,KAAKgrD,UAAa,EAC5DjpB,EAAM,IAAIh/B,MAAMyU,EAAQxX,KAAKgrD,WAEV,IAAnBhrD,KAAKo3E,YACPK,GAAYz3E,KAAKu3E,QAAQ9hD,EAAMgiD,GAE3Bz3E,KAAKo3E,YAAcp3E,KAAK8Y,OAAOnU,SACjC+yE,GAAa13E,KAAKw3E,aAAaz1C,EAAK21C,KAKxC,IADA,IAAI7pE,EAAM4nB,EAAK9wB,QAAW8wB,EAAK9wB,OAAS8yE,GAAYz3E,KAAKgrD,UAClDysB,EAAW5pE,EAAK4pE,GAAYz3E,KAAKgrD,UACtChrD,KAAKuiD,QAAQ9sB,EAAMgiD,EAAU11C,EAAK21C,GAClCA,GAAa13E,KAAKgrD,UAIpB,KAAOysB,EAAWhiD,EAAK9wB,OAAQ8yE,IAAYz3E,KAAKo3E,YAC9Cp3E,KAAK8Y,OAAO9Y,KAAKo3E,WAAa3hD,EAAKgiD,GAErC,OAAO11C,GAGTo1C,EAAOn1E,UAAUq1E,eAAiB,SAAwB5hD,GAQxD,IAPA,IAAIgiD,EAAW,EACXC,EAAY,EAEZlgE,EAAQzQ,KAAKiH,MAAMhO,KAAKo3E,UAAY3hD,EAAK9wB,QAAU3E,KAAKgrD,WAAa,EACrEjpB,EAAM,IAAIh/B,MAAMyU,EAAQxX,KAAKgrD,WAG1BxzC,EAAQ,EAAGA,IAChBigE,GAAYz3E,KAAKu3E,QAAQ9hD,EAAMgiD,GAC/BC,GAAa13E,KAAKw3E,aAAaz1C,EAAK21C,GAMtC,OAFAD,GAAYz3E,KAAKu3E,QAAQ9hD,EAAMgiD,GAExB11C,GAGTo1C,EAAOn1E,UAAU8/C,MAAQ,SAAehpC,GACtC,IAAIG,EAIAD,EAMJ,OATIF,IACFG,EAAQjZ,KAAKmiD,OAAOrpC,IAIpBE,EADgB,YAAdhZ,KAAKoW,KACApW,KAAK23E,gBAEL33E,KAAK43E,gBAEV3+D,EACKA,EAAM4H,OAAO7H,GAEbA,GAGXm+D,EAAOn1E,UAAU+tD,KAAO,SAAcj3C,EAAQ4lB,GAC5C,GAAY,IAARA,EACF,OAAO,EAET,KAAOA,EAAM5lB,EAAOnU,QAClBmU,EAAO4lB,KAAS,EAElB,OAAO,GAGTy4C,EAAOn1E,UAAU21E,cAAgB,WAC/B,IAAK33E,KAAK+vD,KAAK/vD,KAAK8Y,OAAQ9Y,KAAKo3E,WAC/B,MAAO,GAET,IAAIr1C,EAAM,IAAIh/B,MAAM/C,KAAKgrD,WAEzB,OADAhrD,KAAKuiD,QAAQviD,KAAK8Y,OAAQ,EAAGipB,EAAK,GAC3BA,GAGTo1C,EAAOn1E,UAAU61E,OAAS,SAAgB/+D,GACxC,OAAOA,GAGTq+D,EAAOn1E,UAAU41E,cAAgB,WAC/Bt4C,EAAOyd,MAAM/8C,KAAKo3E,UAAWp3E,KAAKgrD,UAAW,8BAC7C,IAAIjpB,EAAM,IAAIh/B,MAAM/C,KAAKgrD,WAGzB,OAFAhrD,KAAKw3E,aAAaz1C,EAAK,GAEhB/hC,KAAK63E,OAAO91C,K,gBC3IrB,IAAI+2B,EAAU,EAAQ,KAClBgf,EAAY,EAAQ,KACpBC,EAAQ,EAAQ,KAMpBn4E,EAAQo4E,aAAep4E,EAAQu3E,OAASre,EAAQkf,aAChDp4E,EAAQq4E,eAAiBr4E,EAAQs4E,SAAWpf,EAAQmf,eACpDr4E,EAAQu4E,eAAiBv4E,EAAQw4E,SAAWN,EAAUK,eACtDv4E,EAAQ+6D,iBAAmB/6D,EAAQy4E,WAAaP,EAAUnd,iBAC1D/6D,EAAQ04E,YAAc14E,EAAQ24E,WAR9B,WACE,OAAOz3E,OAAOwgB,KAAKy2D,K,gBCLrB,IAAIS,EAAc,CAChBC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,KAAM,EAAQ,KACdC,KAAM,EAAQ,KACdC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,IAAK,EAAQ,MAGXjB,EAAQ,EAAQ,KAEpB,IAAK,IAAIp2E,KAAOo2E,EACdA,EAAMp2E,GAAK9B,OAAS24E,EAAYT,EAAMp2E,GAAKJ,MAG7C1B,EAAOD,QAAUm4E,G,cCjBjBl4E,EAAOD,QAAU,SAASC,GAoBzB,OAnBKA,EAAOo5E,kBACXp5E,EAAOuzE,UAAY,aACnBvzE,EAAOq5E,MAAQ,GAEVr5E,EAAO8+D,WAAU9+D,EAAO8+D,SAAW,IACxC79D,OAAOC,eAAelB,EAAQ,SAAU,CACvCmB,YAAY,EACZC,IAAK,WACJ,OAAOpB,EAAOQ,KAGhBS,OAAOC,eAAelB,EAAQ,KAAM,CACnCmB,YAAY,EACZC,IAAK,WACJ,OAAOpB,EAAOO,KAGhBP,EAAOo5E,gBAAkB,GAEnBp5E,I,gBCpBR,IAAIqB,EASJ,SAASi4E,EAAKC,GACZp5E,KAAKo5E,KAAOA,EAmBd,GA3BAv5E,EAAOD,QAAU,SAAc2T,GAI7B,OAHKrS,IACHA,EAAI,IAAIi4E,EAAK,OAERj4E,EAAEm4E,SAAS9lE,IAMpB1T,EAAOD,QAAQu5E,KAAOA,EAEtBA,EAAKn3E,UAAUq3E,SAAW,SAAkB9lE,GAC1C,OAAOvT,KAAKs5E,MAAM/lE,IAIpB4lE,EAAKn3E,UAAUs3E,MAAQ,SAAez3E,GACpC,GAAI7B,KAAKo5E,KAAKG,SACZ,OAAOv5E,KAAKo5E,KAAKG,SAAS13E,GAG5B,IADA,IAAI+L,EAAM,IAAIqnC,WAAWpzC,GAChBzB,EAAI,EAAGA,EAAIwN,EAAIjJ,OAAQvE,IAC9BwN,EAAIxN,GAAKJ,KAAKo5E,KAAKI,UACrB,OAAO5rE,GAGW,iBAAT2G,KACLA,KAAKk1C,QAAUl1C,KAAKk1C,OAAOE,gBAE7BwvB,EAAKn3E,UAAUs3E,MAAQ,SAAez3E,GACpC,IAAIiD,EAAM,IAAImwC,WAAWpzC,GAEzB,OADA0S,KAAKk1C,OAAOE,gBAAgB7kD,GACrBA,GAEAyP,KAAKm1C,UAAYn1C,KAAKm1C,SAASC,gBAExCwvB,EAAKn3E,UAAUs3E,MAAQ,SAAez3E,GACpC,IAAIiD,EAAM,IAAImwC,WAAWpzC,GAEzB,OADA0S,KAAKm1C,SAASC,gBAAgB7kD,GACvBA,GAIkB,iBAAXm7B,SAEhBk5C,EAAKn3E,UAAUs3E,MAAQ,WACrB,MAAM,IAAIpyE,MAAM,8BAKpB,IACE,IAAIuiD,EAAS,EAAQ,KACrB,GAAkC,mBAAvBA,EAAOgwB,YAChB,MAAM,IAAIvyE,MAAM,iBAElBiyE,EAAKn3E,UAAUs3E,MAAQ,SAAez3E,GACpC,OAAO4nD,EAAOgwB,YAAY53E,IAE5B,MAAO0C,M,6BC1DX,IAAIsrE,EAA6B,EAAQ,IAAmBhmB,MAAMgmB,2BAgBlE,SAAS/xC,KAmFTj+B,EAAOD,QA7EP,SAASkwE,EAAIC,EAAQC,EAAMv7D,GACzB,GAAoB,mBAATu7D,EAAqB,OAAOF,EAAIC,EAAQ,KAAMC,GACpDA,IAAMA,EAAO,IAClBv7D,EAvBF,SAAcA,GACZ,IAAIw7D,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAI5kB,EAAO37C,UAAU/K,OAAQq5B,EAAO,IAAIj7B,MAAMsoD,GAAOsI,EAAO,EAAGA,EAAOtI,EAAMsI,IAC/E31B,EAAK21B,GAAQjkD,UAAUikD,GAGzBl/C,EAAShF,MAAMzP,KAAMg+B,KAaZS,CAAKhqB,GAAYqpB,GAC5B,IAAIyqB,EAAWynB,EAAKznB,WAA8B,IAAlBynB,EAAKznB,UAAsBwnB,EAAOxnB,SAC9D/lD,EAAWwtE,EAAKxtE,WAA8B,IAAlBwtE,EAAKxtE,UAAsButE,EAAOvtE,SAE9D0tE,EAAiB,WACdH,EAAOvtE,UAAU2tE,KAGpBC,EAAgBL,EAAOrnB,gBAAkBqnB,EAAOrnB,eAAe2nB,SAE/DF,EAAW,WACb3tE,GAAW,EACX4tE,GAAgB,EACX7nB,GAAU9zC,EAASlU,KAAKwvE,IAG3BO,EAAgBP,EAAOjnB,gBAAkBinB,EAAOjnB,eAAeynB,WAE/D9nB,EAAQ,WACVF,GAAW,EACX+nB,GAAgB,EACX9tE,GAAUiS,EAASlU,KAAKwvE,IAG3BS,EAAU,SAAiB1tB,GAC7BruC,EAASlU,KAAKwvE,EAAQjtB,IAGpB2tB,EAAU,WACZ,IAAI3tB,EAEJ,OAAIyF,IAAa+nB,GACVP,EAAOjnB,gBAAmBinB,EAAOjnB,eAAeH,QAAO7F,EAAM,IAAI+sB,GAC/Dp7D,EAASlU,KAAKwvE,EAAQjtB,IAG3BtgD,IAAa4tE,GACVL,EAAOrnB,gBAAmBqnB,EAAOrnB,eAAeC,QAAO7F,EAAM,IAAI+sB,GAC/Dp7D,EAASlU,KAAKwvE,EAAQjtB,SAF/B,GAME4tB,EAAY,WACdX,EAAOY,IAAIpyC,GAAG,SAAU4xC,IAiB1B,OAnEF,SAAmBJ,GACjB,OAAOA,EAAOa,WAAqC,mBAAjBb,EAAOc,MAoDrCC,CAAUf,GAIHvtE,IAAautE,EAAOrnB,iBAE7BqnB,EAAOxxC,GAAG,MAAO2xC,GACjBH,EAAOxxC,GAAG,QAAS2xC,KANnBH,EAAOxxC,GAAG,WAAY4xC,GACtBJ,EAAOxxC,GAAG,QAASkyC,GACfV,EAAOY,IAAKD,IAAiBX,EAAOxxC,GAAG,UAAWmyC,IAOxDX,EAAOxxC,GAAG,MAAOkqB,GACjBsnB,EAAOxxC,GAAG,SAAU4xC,IACD,IAAfH,EAAK1pB,OAAiBypB,EAAOxxC,GAAG,QAASiyC,GAC7CT,EAAOxxC,GAAG,QAASkyC,GACZ,WACLV,EAAOpxC,eAAe,WAAYwxC,GAClCJ,EAAOpxC,eAAe,QAAS8xC,GAC/BV,EAAOpxC,eAAe,UAAW+xC,GAC7BX,EAAOY,KAAKZ,EAAOY,IAAIhyC,eAAe,SAAUwxC,GACpDJ,EAAOpxC,eAAe,MAAOuxC,GAC7BH,EAAOpxC,eAAe,QAASuxC,GAC/BH,EAAOpxC,eAAe,SAAUwxC,GAChCJ,EAAOpxC,eAAe,MAAO8pB,GAC7BsnB,EAAOpxC,eAAe,QAAS6xC,GAC/BT,EAAOpxC,eAAe,QAAS8xC,M,iBCnGnC,kBAAS,EAAQ,KACbgJ,EAAc,EAAQ,IAQ1B,SAASC,EAAMC,GACb,IACIz4E,EADAqS,EAAMomE,EAAKC,QAAQ72C,aAEvB,GACE7hC,EAAI,IAAIu+B,EAAGg6C,EAAYlmE,UAChBrS,EAAEs/B,IAAIm5C,EAAKC,UAAY,IAAM14E,EAAE+tC,KAAK0qC,EAAKE,UAAY34E,EAAE+tC,KAAK0qC,EAAKG,SAC1E,OAAO54E,EAGT,SAAS64E,EAAKx6C,EAAKo6C,GACjB,IAAIK,EAhBN,SAAgBL,GACd,IAAIz4E,EAAIw4E,EAAKC,GAEb,MAAO,CAAEM,QADK/4E,EAAEiwC,MAAM1R,EAAGgV,KAAKklC,EAAKC,UAAUnnC,OAAO,IAAIhT,EAAGk6C,EAAKO,iBAAiB3oC,UACtD4oC,UAAWj5E,EAAEmvC,KAAKspC,EAAKC,UAarCQ,CAAMT,GACfpmE,EAAMomE,EAAKC,QAAQ72C,aACnBs3C,EAAU,IAAI56C,EAAGF,GAAKe,IAAI05C,EAAOC,SAAShrC,KAAK0qC,EAAKC,SACpDU,EAAKD,EAAQlpC,MAAM1R,EAAGgV,KAAKklC,EAAKE,SAChCU,EAAKF,EAAQlpC,MAAM1R,EAAGgV,KAAKklC,EAAKG,SAChCU,EAAOb,EAAKc,YACZv4E,EAAIy3E,EAAKE,OACT32C,EAAIy2C,EAAKG,OACTplB,EAAK4lB,EAAG7nC,OAAOknC,EAAKe,WAAWnpC,UAC/BopC,EAAKJ,EAAG9nC,OAAOknC,EAAKiB,WAAWrpC,UAC/B7D,EAAIgnB,EAAGxvB,KAAKy1C,GAAIxzE,KAAKqzE,GAAMvrC,KAAK/sC,GAAGiF,KAAK+7B,GAC5C,OAAOy3C,EAAG11C,KAAKyI,GAAGvmC,KAAK6yE,EAAOG,WAAWlrC,KAAK0qC,EAAKC,SAAS/2C,YAAY3G,EAAQ,KAAM3oB,GAExFwmE,EAAIL,KAAOA,EAEX75E,EAAOD,QAAUm6E,I,qDChCjB,IAAIc,EAAWj7E,EAEfi7E,EAASx8C,QAAU,EAAQ,KAAmBA,QAC9Cw8C,EAAS79B,MAAQ,EAAQ,IACzB69B,EAASzB,KAAO,EAAQ,IACxByB,EAASzkB,MAAQ,EAAQ,KACzBykB,EAASC,OAAS,EAAQ,IAG1BD,EAASE,GAAK,EAAQ,KACtBF,EAASG,MAAQ,EAAQ,M,6BCVzB,IAsKIC,EAtKAH,EAASl7E,EAETkH,EAAO,EAAQ,IACfsvD,EAAQ,EAAQ,KAGhB92B,EAFQ,EAAQ,IAEDA,OAEnB,SAAS47C,EAAYz1D,GACE,UAAjBA,EAAQrP,KACVpW,KAAKo2D,MAAQ,IAAIA,EAAM+kB,MAAM11D,GACL,YAAjBA,EAAQrP,KACfpW,KAAKo2D,MAAQ,IAAIA,EAAMglB,QAAQ31D,GAE/BzlB,KAAKo2D,MAAQ,IAAIA,EAAM3hB,KAAKhvB,GAC9BzlB,KAAK2vC,EAAI3vC,KAAKo2D,MAAMzmB,EACpB3vC,KAAK6B,EAAI7B,KAAKo2D,MAAMv0D,EACpB7B,KAAK8G,KAAO2e,EAAQ3e,KAEpBw4B,EAAOt/B,KAAK2vC,EAAE4mB,WAAY,iBAC1Bj3B,EAAOt/B,KAAK2vC,EAAErP,IAAItgC,KAAK6B,GAAGw5E,aAAc,2BAI1C,SAASC,EAAY36E,EAAM8kB,GACzB3kB,OAAOC,eAAe+5E,EAAQn6E,EAAM,CAClC8B,cAAc,EACdzB,YAAY,EACZC,IAAK,WACH,IAAIm1D,EAAQ,IAAI8kB,EAAYz1D,GAM5B,OALA3kB,OAAOC,eAAe+5E,EAAQn6E,EAAM,CAClC8B,cAAc,EACdzB,YAAY,EACZK,MAAO+0D,IAEFA,KAbb0kB,EAAOI,YAAcA,EAkBrBI,EAAY,OAAQ,CAClBllE,KAAM,QACNi9B,MAAO,OACPnxC,EAAG,wDACHY,EAAG,wDACH4B,EAAG,wDACH7C,EAAG,wDACHiF,KAAMA,EAAKsrE,OACX1c,MAAM,EACN/lB,EAAG,CACD,wDACA,2DAIJ2rC,EAAY,OAAQ,CAClBllE,KAAM,QACNi9B,MAAO,OACPnxC,EAAG,iEACHY,EAAG,iEACH4B,EAAG,iEACH7C,EAAG,iEACHiF,KAAMA,EAAKsrE,OACX1c,MAAM,EACN/lB,EAAG,CACD,iEACA,oEAIJ2rC,EAAY,OAAQ,CAClBllE,KAAM,QACNi9B,MAAO,KACPnxC,EAAG,0EACHY,EAAG,0EACH4B,EAAG,0EACH7C,EAAG,0EACHiF,KAAMA,EAAKsrE,OACX1c,MAAM,EACN/lB,EAAG,CACD,0EACA,6EAIJ2rC,EAAY,OAAQ,CAClBllE,KAAM,QACNi9B,MAAO,KACPnxC,EAAG,8GAEHY,EAAG,8GAEH4B,EAAG,8GAEH7C,EAAG,8GAEHiF,KAAMA,EAAKurE,OACX3c,MAAM,EACN/lB,EAAG,CACD,8GAEA,iHAKJ2rC,EAAY,OAAQ,CAClBllE,KAAM,QACNi9B,MAAO,KACPnxC,EAAG,2JAGHY,EAAG,2JAGH4B,EAAG,2JAGH7C,EAAG,2JAGHiF,KAAMA,EAAKwrE,OACX5c,MAAM,EACN/lB,EAAG,CACD,2JAGA,8JAMJ2rC,EAAY,aAAc,CACxBllE,KAAM,OACNi9B,MAAO,SACPnxC,EAAG,sEACHY,EAAG,QACH4B,EAAG,IACH7C,EAAG,sEACHiF,KAAMA,EAAKsrE,OACX1c,MAAM,EACN/lB,EAAG,CACD,OAIJ2rC,EAAY,UAAW,CACrBllE,KAAM,UACNi9B,MAAO,SACPnxC,EAAG,sEACHY,EAAG,KACHrC,EAAG,IAEHC,EAAG,sEACHmB,EAAG,sEACHiF,KAAMA,EAAKsrE,OACX1c,MAAM,EACN/lB,EAAG,CACD,mEAGA,sEAKJ,IACEsrC,EAAM,EAAQ,KACd,MAAO12E,GACP02E,OAAM9pE,EAGRmqE,EAAY,YAAa,CACvBllE,KAAM,QACNi9B,MAAO,OACPnxC,EAAG,0EACHY,EAAG,IACH4B,EAAG,IACH7C,EAAG,0EACH6rC,EAAG,IACH5mC,KAAMA,EAAKsrE,OAGX7Z,KAAM,mEACNgjB,OAAQ,mEACRC,MAAO,CACL,CACE14E,EAAG,mCACH4B,EAAG,qCAEL,CACE5B,EAAG,oCACH4B,EAAG,qCAIPgxD,MAAM,EACN/lB,EAAG,CACD,mEACA,mEACAsrC,M,gBC3MJ,IAAIn0E,EAAOlH,EAEXkH,EAAKk2C,MAAQ,EAAQ,IACrBl2C,EAAK20E,OAAS,EAAQ,IACtB30E,EAAK0nD,IAAM,EAAQ,KACnB1nD,EAAK40E,OAAS,EAAQ,KACtB50E,EAAK60E,KAAO,EAAQ,KAGpB70E,EAAKorE,KAAOprE,EAAK0nD,IAAI0jB,KACrBprE,EAAKsrE,OAAStrE,EAAK0nD,IAAI4jB,OACvBtrE,EAAKqrE,OAASrrE,EAAK0nD,IAAI2jB,OACvBrrE,EAAKurE,OAASvrE,EAAK0nD,IAAI6jB,OACvBvrE,EAAKwrE,OAASxrE,EAAK0nD,IAAI8jB,OACvBxrE,EAAK80E,UAAY90E,EAAK40E,OAAOE,W,8BCd7B,YAIA,IAKIj6E,EALAmX,EAAS,EAAQ,GACjBojB,EAASpjB,EAAOojB,OAEhB2/C,EAAQ,GAIZ,IAAKl6E,KAAOmX,EACLA,EAAO7W,eAAeN,IACf,eAARA,GAAgC,WAARA,IAC5Bk6E,EAAMl6E,GAAOmX,EAAOnX,IAGtB,IAAIm6E,EAAQD,EAAM3/C,OAAS,GAC3B,IAAKv6B,KAAOu6B,EACLA,EAAOj6B,eAAeN,IACf,gBAARA,GAAiC,oBAARA,IAC7Bm6E,EAAMn6E,GAAOu6B,EAAOv6B,IAqCtB,GAlCAk6E,EAAM3/C,OAAOl6B,UAAYk6B,EAAOl6B,UAE3B85E,EAAMt7D,MAAQs7D,EAAMt7D,OAASy0B,WAAWz0B,OAC3Cs7D,EAAMt7D,KAAO,SAAUnf,EAAOi7B,EAAkB33B,GAC9C,GAAqB,iBAAVtD,EACT,MAAM,IAAIgS,UAAU,yEAA2EhS,GAEjG,GAAIA,QAAiC,IAAjBA,EAAMsD,OACxB,MAAM,IAAI0O,UAAU,yHAA2HhS,GAEjJ,OAAO66B,EAAO76B,EAAOi7B,EAAkB33B,KAItCm3E,EAAMv/C,QACTu/C,EAAMv/C,MAAQ,SAAUnyB,EAAMgJ,EAAMspB,GAClC,GAAoB,iBAATtyB,EACT,MAAM,IAAIiJ,UAAU,oEAAsEjJ,GAE5F,GAAIA,EAAO,GAAKA,GAAQ,GAAK,GAAK,IAChC,MAAM,IAAI4qC,WAAW,cAAgB5qC,EAAO,kCAE9C,IAAInE,EAAMi2B,EAAO9xB,GAQjB,OAPKgJ,GAAwB,IAAhBA,EAAKzO,OAEa,iBAAb+3B,EAChBz2B,EAAImN,KAAKA,EAAMspB,GAEfz2B,EAAImN,KAAKA,GAJTnN,EAAImN,KAAK,GAMJnN,KAIN41E,EAAME,iBACT,IACEF,EAAME,iBAAmBtyD,EAAQwV,QAAQ,UAAU88C,iBACnD,MAAOx3E,IAMNs3E,EAAMG,YACTH,EAAMG,UAAY,CAChBC,WAAYJ,EAAMhnC,YAEhBgnC,EAAME,mBACRF,EAAMG,UAAUE,kBAAoBL,EAAME,mBAI9Cl8E,EAAOD,QAAUi8E,I,8CC1EjB,MAAM5rB,EAAW,EAAQ,IAAoBA,SACvCE,EAAgB,EAAQ,IAAkBA,cAC1CD,EAAgB,EAAQ,IAAkBA,cAC1C5wB,EAAS,EAAQ,GAGjB68C,EAAO,CACX,MAAO,QAAS,MAAO,QAAS,QAAS,OACzC,UAAW,UAAW,QAAS,OAAQ,MAAO,UAC9C,SAAU,SAAU,UAAW,SAAU,WAAY,SAAU,YAC/D,SAAU,SAAU,WAAY,SAAU,SAAU,UAAW,YAI3DC,EAAU,CACd,MAAO,MAAO,MAAO,WAAY,WAAY,WAAY,MAAO,SAChE,MAAO,YACPv7D,OAAOs7D,GAYT,SAASE,EAAK59B,EAAK69B,EAAQ37E,GACzB,MAAMoiB,EAAQ,GACd/iB,KAAKu8E,WAAax5D,EAElBA,EAAMpiB,KAAOA,EACboiB,EAAM07B,IAAMA,EAEZ17B,EAAMu5D,OAASA,GAAU,KACzBv5D,EAAM47C,SAAW,KAGjB57C,EAAMs2C,IAAM,KACZt2C,EAAMib,KAAO,KACbjb,EAAMy5D,YAAc,KACpBz5D,EAAM05D,OAAS,KACf15D,EAAM25D,UAAW,EACjB35D,EAAM45D,KAAM,EACZ55D,EAAMxd,KAAM,EACZwd,EAAM65D,IAAM,KACZ75D,EAAM85D,WAAa,KACnB95D,EAAMphB,IAAM,KACZohB,EAAe,QAAI,KACnBA,EAAM+5D,SAAW,KACjB/5D,EAAMg6D,SAAW,KACjBh6D,EAAMwJ,SAAW,KAGZxJ,EAAMu5D,SACTv5D,EAAM47C,SAAW,GACjB3+D,KAAKg9E,SAGTn9E,EAAOD,QAAUy8E,EAEjB,MAAMY,EAAa,CACjB,MAAO,SAAU,WAAY,MAAO,OAAQ,cAAe,SAC3D,WAAY,MAAO,MAAO,MAAO,aAAc,MAAO,UAAW,WACjE,WAAY,YAGdZ,EAAKr6E,UAAUu/B,MAAQ,WACrB,MAAMxe,EAAQ/iB,KAAKu8E,WACbW,EAAS,GACfD,EAAWpsB,SAAQ,SAASssB,GAC1BD,EAAOC,GAAQp6D,EAAMo6D,MAEvB,MAAMvvE,EAAM,IAAI5N,KAAKuC,YAAY26E,EAAOZ,QAExC,OADA1uE,EAAI2uE,WAAaW,EACVtvE,GAGTyuE,EAAKr6E,UAAUg7E,MAAQ,WACrB,MAAMj6D,EAAQ/iB,KAAKu8E,WACnBH,EAAQvrB,SAAQ,SAASvI,GACvBtoD,KAAKsoD,GAAU,WACb,MAAM/mB,EAAQ,IAAIvhC,KAAKuC,YAAYvC,MAEnC,OADA+iB,EAAM47C,SAAS3gD,KAAKujB,GACbA,EAAM+mB,GAAQ74C,MAAM8xB,EAAO7xB,cAEnC1P,OAGLq8E,EAAKr6E,UAAU+9B,MAAQ,SAAcyqC,GACnC,MAAMznD,EAAQ/iB,KAAKu8E,WAEnBj9C,EAAwB,OAAjBvc,EAAMu5D,QACb9R,EAAKjqE,KAAKP,MAGV+iB,EAAM47C,SAAW57C,EAAM47C,SAASye,QAAO,SAASC,GAC9C,OAAOA,EAAMd,WAAWD,SAAWt8E,OAClCA,MACHs/B,EAAOyd,MAAMh6B,EAAM47C,SAASh6D,OAAQ,EAAG,sCAGzC03E,EAAKr6E,UAAUs7E,SAAW,SAAiBt/C,GACzC,MAAMjb,EAAQ/iB,KAAKu8E,WAGb5d,EAAW3gC,EAAKo/C,QAAO,SAAS/gD,GACpC,OAAOA,aAAer8B,KAAKuC,cAC1BvC,MACHg+B,EAAOA,EAAKo/C,QAAO,SAAS/gD,GAC1B,QAASA,aAAer8B,KAAKuC,eAC5BvC,MAEqB,IAApB2+D,EAASh6D,SACX26B,EAA0B,OAAnBvc,EAAM47C,UACb57C,EAAM47C,SAAWA,EAGjBA,EAAS9N,SAAQ,SAASwsB,GACxBA,EAAMd,WAAWD,OAASt8E,OACzBA,OAEe,IAAhBg+B,EAAKr5B,SACP26B,EAAsB,OAAfvc,EAAMib,MACbjb,EAAMib,KAAOA,EACbjb,EAAMy5D,YAAcx+C,EAAK15B,KAAI,SAAS+3B,GACpC,GAAmB,iBAARA,GAAoBA,EAAI95B,cAAgBzB,OACjD,OAAOu7B,EAET,MAAMzuB,EAAM,GAOZ,OANA9M,OAAOwgB,KAAK+a,GAAKw0B,SAAQ,SAASlvD,GAC5BA,IAAc,EAANA,KACVA,GAAO,GACT,MAAMN,EAAQg7B,EAAI16B,GAClBiM,EAAIvM,GAASM,KAERiM,OAtHK,CAChB,WAAY,aAAc,OAC1B,aAAc,eAAgB,cAC9B,cAAe,aAAc,cAAe,cAE5C,mBAAoB,aAAc,eAAgB,cAClD,cAAe,aAAc,eAyHrBijD,SAAQ,SAASvI,GACzB+zB,EAAKr6E,UAAUsmD,GAAU,WACvB,MAAMvlC,EAAQ/iB,KAAKu8E,WACnB,MAAM,IAAIr1E,MAAMohD,EAAS,kCAAoCvlC,EAAM07B,SAQvE09B,EAAKtrB,SAAQ,SAASwI,GACpBgjB,EAAKr6E,UAAUq3D,GAAO,WACpB,MAAMt2C,EAAQ/iB,KAAKu8E,WACbv+C,EAAOj7B,MAAMf,UAAUqS,MAAM9T,KAAKmP,WAOxC,OALA4vB,EAAqB,OAAdvc,EAAMs2C,KACbt2C,EAAMs2C,IAAMA,EAEZr5D,KAAKs9E,SAASt/C,GAEPh+B,SAIXq8E,EAAKr6E,UAAU46E,IAAM,SAAa3lE,GAChCqoB,EAAOroB,GACP,MAAM8L,EAAQ/iB,KAAKu8E,WAKnB,OAHAj9C,EAAqB,OAAdvc,EAAM65D,KACb75D,EAAM65D,IAAM3lE,EAELjX,MAGTq8E,EAAKr6E,UAAU06E,SAAW,WAKxB,OAJc18E,KAAKu8E,WAEbG,UAAW,EAEV18E,MAGTq8E,EAAKr6E,UAAUu7E,IAAM,SAAavxE,GAChC,MAAM+W,EAAQ/iB,KAAKu8E,WAMnB,OAJAj9C,EAA4B,OAArBvc,EAAe,SACtBA,EAAe,QAAI/W,EACnB+W,EAAM25D,UAAW,EAEV18E,MAGTq8E,EAAKr6E,UAAU86E,SAAW,SAAkBv8C,GAC1C,MAAMxd,EAAQ/iB,KAAKu8E,WAKnB,OAHAj9C,EAA0B,OAAnBvc,EAAM+5D,UAAwC,OAAnB/5D,EAAMg6D,UACxCh6D,EAAM+5D,SAAWv8C,EAEVvgC,MAGTq8E,EAAKr6E,UAAU+6E,SAAW,SAAkBx8C,GAC1C,MAAMxd,EAAQ/iB,KAAKu8E,WAKnB,OAHAj9C,EAA0B,OAAnBvc,EAAM+5D,UAAwC,OAAnB/5D,EAAMg6D,UACxCh6D,EAAMg6D,SAAWx8C,EAEVvgC,MAGTq8E,EAAKr6E,UAAUuD,IAAM,WACnB,MAAMwd,EAAQ/iB,KAAKu8E,WACbv+C,EAAOj7B,MAAMf,UAAUqS,MAAM9T,KAAKmP,WAOxC,OALAqT,EAAMxd,KAAM,EAEQ,IAAhBy4B,EAAKr5B,QACP3E,KAAKs9E,SAASt/C,GAETh+B,MAGTq8E,EAAKr6E,UAAUL,IAAM,SAAaw/D,GAChC,MAAMp+C,EAAQ/iB,KAAKu8E,WAKnB,OAHAj9C,EAAqB,OAAdvc,EAAMphB,KACbohB,EAAMphB,IAAMw/D,EAELnhE,MAGTq8E,EAAKr6E,UAAU26E,IAAM,WAKnB,OAJc38E,KAAKu8E,WAEbI,KAAM,EAEL38E,MAGTq8E,EAAKr6E,UAAUy6E,OAAS,SAAgBl3E,GACtC,MAAMwd,EAAQ/iB,KAAKu8E,WAQnB,OANAj9C,EAAwB,OAAjBvc,EAAM05D,QACb15D,EAAM05D,OAASl3E,EACfvF,KAAKs9E,SAASx8E,OAAOwgB,KAAK/b,GAAKjB,KAAI,SAAS3C,GAC1C,OAAO4D,EAAI5D,OAGN3B,MAGTq8E,EAAKr6E,UAAUuqB,SAAW,SAAkBtV,GAC1C,MAAM8L,EAAQ/iB,KAAKu8E,WAKnB,OAHAj9C,EAAqB,OAAdvc,EAAM65D,KACb75D,EAAMwJ,SAAWtV,EAEVjX,MAOTq8E,EAAKr6E,UAAUw7E,QAAU,SAAgB/2D,EAAOhB,GAC9C,MAAM1C,EAAQ/iB,KAAKu8E,WAGnB,GAAqB,OAAjBx5D,EAAMu5D,OACR,OAAO71D,EAAMg3D,WAAW16D,EAAM47C,SAAS,GAAG6e,QAAQ/2D,EAAOhB,IAE3D,IAuCIi4D,EAvCA34E,EAASge,EAAe,QACxB46D,GAAU,EAEVC,EAAU,KAKd,GAJkB,OAAd76D,EAAMphB,MACRi8E,EAAUn3D,EAAMo3D,SAAS96D,EAAMphB,MAG7BohB,EAAM25D,SAAU,CAClB,IAAIrjB,EAAM,KAQV,GAPuB,OAAnBt2C,EAAM+5D,SACRzjB,EAAMt2C,EAAM+5D,SACc,OAAnB/5D,EAAMg6D,SACb1jB,EAAMt2C,EAAMg6D,SACS,OAAdh6D,EAAMs2C,MACbA,EAAMt2C,EAAMs2C,KAEF,OAARA,GAAiBt2C,EAAM45D,KAgBzB,GAFAgB,EAAU39E,KAAK89E,SAASr3D,EAAO4yC,EAAKt2C,EAAM45D,KAEtCl2D,EAAM2oC,QAAQuuB,GAChB,OAAOA,MAjBqB,CAE9B,MAAMptB,EAAO9pC,EAAM8pC,OACnB,IACuB,OAAjBxtC,EAAM05D,OACRz8E,KAAK+9E,eAAeh7D,EAAMs2C,IAAK5yC,EAAOhB,GAEtCzlB,KAAKg+E,cAAcv3D,EAAOhB,GAC5Bk4D,GAAU,EACV,MAAOp5E,GACPo5E,GAAU,EAEZl3D,EAAM+pC,QAAQD,IAclB,GAHIxtC,EAAMxd,KAAOo4E,IACfD,EAAUj3D,EAAMw3D,eAEdN,EAAS,CAEX,GAAuB,OAAnB56D,EAAM+5D,SAAmB,CAC3B,MAAMA,EAAW98E,KAAKk+E,WAAWz3D,EAAO1D,EAAM+5D,UAC9C,GAAIr2D,EAAM2oC,QAAQ0tB,GAChB,OAAOA,EACTr2D,EAAQq2D,EAGV,MAAMtpE,EAAQiT,EAAM1S,OAGpB,GAAkB,OAAdgP,EAAM65D,KAAiC,OAAjB75D,EAAM05D,OAAiB,CAC/C,IAAIlsB,EACAxtC,EAAM45D,MACRpsB,EAAO9pC,EAAM8pC,QACf,MAAMia,EAAOxqE,KAAKk+E,WAChBz3D,EACmB,OAAnB1D,EAAMg6D,SAAoBh6D,EAAMg6D,SAAWh6D,EAAMs2C,IACjDt2C,EAAM45D,KAER,GAAIl2D,EAAM2oC,QAAQob,GAChB,OAAOA,EAELznD,EAAM45D,IACR53E,EAAS0hB,EAAMiqC,IAAIH,GAEnB9pC,EAAQ+jD,EAkBZ,GAfI/kD,GAAWA,EAAQ4jD,OAAuB,OAAdtmD,EAAMs2C,KACpC5zC,EAAQ4jD,MAAM5iD,EAAM03D,OAAQ3qE,EAAOiT,EAAM9hB,OAAQ,UAE/C8gB,GAAWA,EAAQ4jD,OAAuB,OAAdtmD,EAAMs2C,KACpC5zC,EAAQ4jD,MAAM5iD,EAAM03D,OAAQ13D,EAAM1S,OAAQ0S,EAAM9hB,OAAQ,WAGtDoe,EAAM45D,MAGR53E,EAD0B,OAAjBge,EAAM05D,OACNz8E,KAAK+9E,eAAeh7D,EAAMs2C,IAAK5yC,EAAOhB,GAEtCzlB,KAAKg+E,cAAcv3D,EAAOhB,IAGjCgB,EAAM2oC,QAAQrqD,GAChB,OAAOA,EAYT,GATKge,EAAM45D,KAAwB,OAAjB55D,EAAM05D,QAAsC,OAAnB15D,EAAM47C,UAC/C57C,EAAM47C,SAAS9N,SAAQ,SAAwBwsB,GAG7CA,EAAMG,QAAQ/2D,EAAOhB,MAKrB1C,EAAMwJ,WAA2B,WAAdxJ,EAAMs2C,KAAkC,WAAdt2C,EAAMs2C,KAAmB,CACxE,MAAM5jC,EAAO,IAAIy6B,EAAcnrD,GAC/BA,EAAS/E,KAAKo+E,QAAQr7D,EAAMwJ,SAAU9F,EAAMmqC,eAAerrD,KACxDi4E,QAAQ/nD,EAAMhQ,IAcrB,OATI1C,EAAMxd,KAAOo4E,IACf54E,EAAS0hB,EAAM43D,YAAYX,IAGX,OAAd36D,EAAMphB,KAA4B,OAAXoD,IAA+B,IAAZ44E,EAEzB,OAAZC,GACPn3D,EAAM63D,QAAQV,GAFdn3D,EAAM83D,SAASX,EAAS76D,EAAMphB,IAAKoD,GAI9BA,GAGTs3E,EAAKr6E,UAAU+7E,eAAiB,SAAuB1kB,EAAK5yC,EAAOhB,GACjE,MAAM1C,EAAQ/iB,KAAKu8E,WAEnB,MAAY,QAARljB,GAAyB,QAARA,EACZ,KACG,UAARA,GAA2B,UAARA,EACdr5D,KAAKw+E,YAAY/3D,EAAO4yC,EAAKt2C,EAAMib,KAAK,GAAIvY,GAC5C,OAAOiB,KAAK2yC,GACZr5D,KAAKy+E,WAAWh4D,EAAO4yC,EAAK5zC,GACpB,UAAR4zC,GAAmBt2C,EAAMib,KACzBh+B,KAAK0+E,aAAaj4D,EAAO1D,EAAMib,KAAK,GAAIjb,EAAMib,KAAK,GAAIvY,GAC/C,UAAR4zC,EACAr5D,KAAK0+E,aAAaj4D,EAAO,KAAM,KAAMhB,GAC7B,YAAR4zC,GAA6B,YAARA,EACrBr5D,KAAK2+E,YAAYl4D,EAAO4yC,EAAK5zC,GACrB,UAAR4zC,EACAr5D,KAAK4+E,YAAYn4D,EAAOhB,GAChB,SAAR4zC,EACAr5D,KAAK6+E,YAAYp4D,EAAOhB,GAChB,YAAR4zC,EACAr5D,KAAKy+E,WAAWh4D,EAAO4yC,EAAK5zC,GACpB,QAAR4zC,GAAyB,SAARA,EACjBr5D,KAAK8+E,WAAWr4D,EAAO1D,EAAMib,MAAQjb,EAAMib,KAAK,GAAIvY,GAE3C,OAAd1C,EAAM65D,IACD58E,KAAKo+E,QAAQr7D,EAAM65D,IAAKn2D,EAAMmqC,eAAerrD,KACjDi4E,QAAQ/2D,EAAOhB,GAEXgB,EAAM6/B,MAAM,gBAAkB+S,IAIzCgjB,EAAKr6E,UAAUo8E,QAAU,SAAiBW,EAAQx5E,GAEhD,MAAMwd,EAAQ/iB,KAAKu8E,WASnB,OAPAx5D,EAAM85D,WAAa78E,KAAKg/E,KAAKD,EAAQx5E,GACrC+5B,EAA8C,OAAvCvc,EAAM85D,WAAWN,WAAWD,QACnCv5D,EAAM85D,WAAa95D,EAAM85D,WAAWN,WAAW5d,SAAS,GACpD57C,EAAMg6D,WAAah6D,EAAM85D,WAAWN,WAAWQ,WACjDh6D,EAAM85D,WAAa95D,EAAM85D,WAAWt7C,QACpCxe,EAAM85D,WAAWN,WAAWQ,SAAWh6D,EAAMg6D,UAExCh6D,EAAM85D,YAGfR,EAAKr6E,UAAUg8E,cAAgB,SAAsBv3D,EAAOhB,GAC1D,MAAM1C,EAAQ/iB,KAAKu8E,WACnB,IAAIx3E,EAAS,KACT6gB,GAAQ,EAmBZ,OAjBA9kB,OAAOwgB,KAAKyB,EAAM05D,QAAQwC,MAAK,SAASt9E,GACtC,MAAM4uD,EAAO9pC,EAAM8pC,OACbptC,EAAOJ,EAAM05D,OAAO96E,GAC1B,IACE,MAAMN,EAAQ8hB,EAAKq6D,QAAQ/2D,EAAOhB,GAClC,GAAIgB,EAAM2oC,QAAQ/tD,GAChB,OAAO,EAET0D,EAAS,CAAEqR,KAAMzU,EAAKN,MAAOA,GAC7BukB,GAAQ,EACR,MAAOrhB,GAEP,OADAkiB,EAAM+pC,QAAQD,IACP,EAET,OAAO,IACNvwD,MAEE4lB,EAGE7gB,EAFE0hB,EAAM6/B,MAAM,uBASvB+1B,EAAKr6E,UAAUk9E,qBAAuB,SAA6BzpD,GACjE,OAAO,IAAI06B,EAAc16B,EAAMz1B,KAAKowD,WAGtCisB,EAAKr6E,UAAUk2D,QAAU,SAAgBziC,EAAM26B,EAAUksB,GACvD,MAAMv5D,EAAQ/iB,KAAKu8E,WACnB,GAAyB,OAArBx5D,EAAe,SAAcA,EAAe,UAAM0S,EACpD,OAEF,MAAM1wB,EAAS/E,KAAKm/E,aAAa1pD,EAAM26B,EAAUksB,GACjD,YAAenrE,IAAXpM,GAGA/E,KAAKo/E,aAAar6E,EAAQqrD,EAAUksB,QAHxC,EAMOv3E,GAGTs3E,EAAKr6E,UAAUm9E,aAAe,SAAgB1pD,EAAM26B,EAAUksB,GAC5D,MAAMv5D,EAAQ/iB,KAAKu8E,WAGnB,GAAqB,OAAjBx5D,EAAMu5D,OACR,OAAOv5D,EAAM47C,SAAS,GAAGzG,QAAQziC,EAAM26B,GAAY,IAAIH,GAEzD,IAAIlrD,EAAS,KAMb,GAHA/E,KAAKowD,SAAWA,EAGZrtC,EAAM25D,eAAqBvrE,IAATskB,EAAoB,CACxC,GAAyB,OAArB1S,EAAe,QAGjB,OAFA0S,EAAO1S,EAAe,QAM1B,IAAI+B,EAAU,KACVu6D,GAAY,EAChB,GAAIt8D,EAAM45D,IAER53E,EAAS/E,KAAKk/E,qBAAqBzpD,QAC9B,GAAI1S,EAAM05D,OACf13E,EAAS/E,KAAKs/E,cAAc7pD,EAAM26B,QAC7B,GAAIrtC,EAAMwJ,SACfzH,EAAU9kB,KAAKo+E,QAAQr7D,EAAMwJ,SAAU+vD,GAAQpkB,QAAQziC,EAAM26B,GAC7DivB,GAAY,OACP,GAAIt8D,EAAM47C,SACf75C,EAAU/B,EAAM47C,SAASr6D,KAAI,SAAS+4E,GACpC,GAA6B,UAAzBA,EAAMd,WAAWljB,IACnB,OAAOgkB,EAAMnlB,QAAQ,KAAM9H,EAAU36B,GAEvC,GAA6B,OAAzB4nD,EAAMd,WAAW56E,IACnB,OAAOyuD,EAAS9J,MAAM,2BACxB,MAAMs3B,EAAUxtB,EAASytB,SAASR,EAAMd,WAAW56E,KAEnD,GAAoB,iBAAT8zB,EACT,OAAO26B,EAAS9J,MAAM,2CAExB,MAAM14C,EAAMyvE,EAAMnlB,QAAQziC,EAAK4nD,EAAMd,WAAW56E,KAAMyuD,EAAU36B,GAGhE,OAFA26B,EAASmuB,SAASX,GAEXhwE,IACN5N,MAAMo9E,QAAO,SAASC,GACvB,OAAOA,KAETv4D,EAAU9kB,KAAKk/E,qBAAqBp6D,QAEpC,GAAkB,UAAd/B,EAAMs2C,KAAiC,UAAdt2C,EAAMs2C,IAAiB,CAElD,IAAMt2C,EAAMib,MAA8B,IAAtBjb,EAAMib,KAAKr5B,OAC7B,OAAOyrD,EAAS9J,MAAM,uBAAyBvjC,EAAMs2C,KAEvD,IAAKt2D,MAAMC,QAAQyyB,GACjB,OAAO26B,EAAS9J,MAAM,sCAExB,MAAM+2B,EAAQr9E,KAAKuhC,QACnB87C,EAAMd,WAAWQ,SAAW,KAC5Bj4D,EAAU9kB,KAAKk/E,qBAAqBzpD,EAAKnxB,KAAI,SAAS2S,GACpD,MAAM8L,EAAQ/iB,KAAKu8E,WAEnB,OAAOv8E,KAAKo+E,QAAQr7D,EAAMib,KAAK,GAAIvI,GAAMyiC,QAAQjhD,EAAMm5C,KACtDitB,SACoB,OAAdt6D,EAAM65D,IACf73E,EAAS/E,KAAKo+E,QAAQr7D,EAAM65D,IAAKN,GAAQpkB,QAAQziC,EAAM26B,IAEvDtrC,EAAU9kB,KAAKu/E,iBAAiBx8D,EAAMs2C,IAAK5jC,GAC3C4pD,GAAY,GAKhB,IAAKt8D,EAAM45D,KAAwB,OAAjB55D,EAAM05D,OAAiB,CACvC,MAAMpjB,EAAyB,OAAnBt2C,EAAMg6D,SAAoBh6D,EAAMg6D,SAAWh6D,EAAMs2C,IACvDmmB,EAAyB,OAAnBz8D,EAAMg6D,SAAoB,YAAc,UAExC,OAAR1jB,EACgB,OAAdt2C,EAAM65D,KACRxsB,EAAS9J,MAAM,wCAEC,OAAdvjC,EAAM65D,MACR73E,EAAS/E,KAAKy/E,iBAAiBpmB,EAAKgmB,EAAWG,EAAK16D,IAQ1D,OAHuB,OAAnB/B,EAAM+5D,WACR/3E,EAAS/E,KAAKy/E,iBAAiB18D,EAAM+5D,UAAU,EAAO,UAAW/3E,IAE5DA,GAGTs3E,EAAKr6E,UAAUs9E,cAAgB,SAAsB7pD,EAAM26B,GACzD,MAAMrtC,EAAQ/iB,KAAKu8E,WAEbp5D,EAAOJ,EAAM05D,OAAOhnD,EAAKrf,MAO/B,OANK+M,GACHmc,GACE,EACA7J,EAAKrf,KAAO,iBACNspE,KAAKC,UAAU7+E,OAAOwgB,KAAKyB,EAAM05D,UAEpCt5D,EAAK+0C,QAAQziC,EAAKp0B,MAAO+uD,IAGlCisB,EAAKr6E,UAAUu9E,iBAAmB,SAAyBlmB,EAAK5jC,GAC9D,MAAM1S,EAAQ/iB,KAAKu8E,WAEnB,GAAI,OAAO71D,KAAK2yC,GACd,OAAOr5D,KAAK4/E,WAAWnqD,EAAM4jC,GAC1B,GAAY,UAARA,GAAmBt2C,EAAMib,KAChC,OAAOh+B,KAAK6/E,aAAapqD,EAAM1S,EAAMy5D,YAAY,GAAIz5D,EAAMib,KAAK,IAC7D,GAAY,UAARq7B,EACP,OAAOr5D,KAAK6/E,aAAapqD,EAAM,KAAM,MAClC,GAAY,YAAR4jC,GAA6B,YAARA,EAC5B,OAAOr5D,KAAK8/E,YAAYrqD,EAAM4jC,GAC3B,GAAY,UAARA,EACP,OAAOr5D,KAAK+/E,cACT,GAAY,QAAR1mB,GAAyB,SAARA,EACxB,OAAOr5D,KAAKggF,WAAWvqD,EAAM1S,EAAMib,MAAQjb,EAAMy5D,YAAY,IAC1D,GAAY,SAARnjB,EACP,OAAOr5D,KAAKigF,YAAYxqD,GACrB,GAAY,YAAR4jC,EACP,OAAOr5D,KAAK4/E,WAAWnqD,EAAM4jC,GAE7B,MAAM,IAAInyD,MAAM,oBAAsBmyD,IAG1CgjB,EAAKr6E,UAAUk+E,UAAY,SAAkB53E,GAC3C,MAAO,YAAYoe,KAAKpe,IAG1B+zE,EAAKr6E,UAAUm+E,YAAc,SAAoB73E,GAC/C,MAAO,6BAA6Boe,KAAKpe,K,6BC1nB3C,MAAMk3B,EAAW,EAAQ,GAEzB,SAASywB,EAASxqC,GAChBzlB,KAAK4wD,eAAiB,CACpBrrD,IAAK,KACL44E,KAAM,GACN14D,QAASA,GAAW,GACpB26D,OAAQ,IA6FZ,SAASC,EAAclC,EAAM5+C,GAC3Bv/B,KAAKm+E,KAAOA,EACZn+E,KAAKsgF,QAAQ/gD,GA5Ff3/B,EAAQqwD,SAAWA,EAEnBA,EAASjuD,UAAUotD,QAAU,SAAiB7pD,GAC5C,OAAOA,aAAe86E,GAGxBpwB,EAASjuD,UAAUuuD,KAAO,WACxB,MAAMxtC,EAAQ/iB,KAAK4wD,eAEnB,MAAO,CAAErrD,IAAKwd,EAAMxd,IAAKg7E,QAASx9D,EAAMo7D,KAAKx5E,SAG/CsrD,EAASjuD,UAAUwuD,QAAU,SAAiB/6B,GAC5C,MAAM1S,EAAQ/iB,KAAK4wD,eAEnB7tC,EAAMxd,IAAMkwB,EAAKlwB,IACjBwd,EAAMo7D,KAAOp7D,EAAMo7D,KAAK9pE,MAAM,EAAGohB,EAAK8qD,UAGxCtwB,EAASjuD,UAAU67E,SAAW,SAAkBl8E,GAC9C,OAAO3B,KAAK4wD,eAAeutB,KAAKngE,KAAKrc,IAGvCsuD,EAASjuD,UAAUs8E,QAAU,SAAiBznE,GAC5C,MAAMkM,EAAQ/iB,KAAK4wD,eAEnB7tC,EAAMo7D,KAAOp7D,EAAMo7D,KAAK9pE,MAAM,EAAGwC,EAAQ,IAG3Co5C,EAASjuD,UAAUu8E,SAAW,SAAkB1nE,EAAOlV,EAAKN,GAC1D,MAAM0hB,EAAQ/iB,KAAK4wD,eAEnB5wD,KAAKs+E,QAAQznE,GACK,OAAdkM,EAAMxd,MACRwd,EAAMxd,IAAI5D,GAAON,IAGrB4uD,EAASjuD,UAAUm8E,KAAO,WACxB,OAAOn+E,KAAK4wD,eAAeutB,KAAK35E,KAAK,MAGvCyrD,EAASjuD,UAAUi8E,YAAc,WAC/B,MAAMl7D,EAAQ/iB,KAAK4wD,eAEb3c,EAAOlxB,EAAMxd,IAEnB,OADAwd,EAAMxd,IAAM,GACL0uC,GAGTgc,EAASjuD,UAAUq8E,YAAc,SAAqBpqC,GACpD,MAAMlxB,EAAQ/iB,KAAK4wD,eAEb5mC,EAAMjH,EAAMxd,IAElB,OADAwd,EAAMxd,IAAM0uC,EACLjqB,GAGTimC,EAASjuD,UAAUskD,MAAQ,SAAe/mB,GACxC,IAAIujB,EACJ,MAAM//B,EAAQ/iB,KAAK4wD,eAEb4vB,EAAYjhD,aAAe8gD,EASjC,GAPEv9B,EADE09B,EACIjhD,EAEA,IAAI8gD,EAAct9D,EAAMo7D,KAAK75E,KAAI,SAASqmB,GAC9C,MAAO,IAAM+0D,KAAKC,UAAUh1D,GAAQ,OACnCnmB,KAAK,IAAK+6B,EAAI5iB,SAAW4iB,EAAKA,EAAI9G,QAGlC1V,EAAM0C,QAAQg7D,QACjB,MAAM39B,EAKR,OAHK09B,GACHz9D,EAAMq9D,OAAOpiE,KAAK8kC,GAEbA,GAGTmN,EAASjuD,UAAUy7E,WAAa,SAAoB14E,GAClD,MAAMge,EAAQ/iB,KAAK4wD,eACnB,OAAK7tC,EAAM0C,QAAQg7D,QAGZ,CACL17E,OAAQ/E,KAAKovD,QAAQrqD,GAAU,KAAOA,EACtCq7E,OAAQr9D,EAAMq9D,QAJPr7E,GAYXy6B,EAAS6gD,EAAen5E,OAExBm5E,EAAcr+E,UAAUs+E,QAAU,SAAiB/gD,GAKjD,GAJAv/B,KAAK2c,QAAU4iB,EAAM,SAAWv/B,KAAKm+E,MAAQ,aACzCj3E,MAAMqxB,mBACRrxB,MAAMqxB,kBAAkBv4B,KAAMqgF,IAE3BrgF,KAAKy4B,MACR,IAEE,MAAM,IAAIvxB,MAAMlH,KAAK2c,SACrB,MAAOpY,GACPvE,KAAKy4B,MAAQl0B,EAAEk0B,MAGnB,OAAOz4B,O,6BCtHT,SAAS0gF,EAAQp8E,GACf,MAAMsJ,EAAM,GAWZ,OATA9M,OAAOwgB,KAAKhd,GAAKusD,SAAQ,SAASlvD,IAErB,EAANA,IAAYA,IACfA,GAAY,GAEd,MAAMN,EAAQiD,EAAI3C,GAClBiM,EAAIvM,GAASM,KAGRiM,EAGThO,EAAQ+gF,SAAW,CACjBC,EAAG,YACHC,EAAG,cACHC,EAAG,UACHC,EAAG,WAELnhF,EAAQohF,eAAiBN,EAAQ9gF,EAAQ+gF,UAEzC/gF,EAAQy5D,IAAM,CACZunB,EAAM,MACN,EAAM,OACN,EAAM,MACN,EAAM,SACN,EAAM,SACN,EAAM,QACN,EAAM,QACN,EAAM,UACN,EAAM,WACN,EAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,UACN,GAAM,cACN,GAAM,MACN,GAAM,MACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,UACN,GAAM,UACN,GAAM,WACN,GAAM,YACN,GAAM,SACN,GAAM,SACN,GAAM,UACN,GAAM,UAERhhF,EAAQqhF,UAAYP,EAAQ9gF,EAAQy5D,M,qV3fsVpC,iC4fnYkB,mBAAC,UAA+D,OAC9E,aADe,iCC6Hf,cAOyC,kBAAE,YApInC,qBACR,UAAuC,EACnC,aACD,UAAiC,UAFpC,oBAEG,oBCHP,cCAA,sFACI,qBACA,mBACA,kBACA,kBACA,mBACA,oBALA,0BACA,0BACA,0BACA,0BACA,0BACA,0B,cCNJ,c,kKJEI,kBACI,EAAU,EAAF,iBAAc,EAAd,KAAoB,GAC5B,SACI,EAAQ,+BAAwB,2BADpC,K,2FCKJ,YACI,OAAO,MAAO,KAAK,aAAY,I,sBAGnC,qBAAM,UAAc,wBAAY,UAAwB,MACpD,I9lB4uDY,E8lB5uDZ,MAsHA,EAAgC,EAAK,EAtHQ,I9lB4uDjD,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,YoG3tD2D,EAAAh4D,M0fjBvD,EAAK,K,sBAGtC,YACI,6BAAY,I,sBAGhB,cACI,sBAAc,EAAyB,I,sBAG3C,cACI,eAAQ,OAAR,EAA2B,I,sBAG/B,qBAAM,UAAc,wBAAY,UAAwB,MACpD,I9lB4tDY,E8lB5tDZ,MAsGA,EAAgC,EAAK,EAtGM,I9lB4tD/C,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,YoG3tD2D,EAAAA,M0fDzD,EAAK,K,sBAGpC,YACI,6BAAY,I,sBAGhB,cACI,sBAAc,EAAyB,I,sBAG3C,cACI,eAAQ,OAAR,EAA2B,I,sBAG/B,qBAAM,UAAc,wBAAY,UAAwB,MACpD,I9lB4sDY,E8lB5sDZ,MAsFA,EAAgC,EAAK,EAtFK,I9lB4sD9C,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,YoG3tD2D,EAAAA,M0fe1D,EAAK,K,sBAGnC,YACI,6BAAY,I,sBAGhB,cACI,sBAAc,EAAyB,I,sBAG3C,cACI,eAAQ,OAAR,EAA2B,I,sBAG/B,qBAAM,UAAc,wBAAY,UAAwB,MACpD,I9lB4rDY,E8lB5rDZ,MAsEA,EAAgC,EAAK,EAtEK,I9lB4rD9C,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,YoG3tD2D,EAAAA,M0f+B1D,EAAK,K,sBAGnC,YACI,6BAAY,I,sBAGhB,cACI,sBAAc,EAAyB,I,sBAG3C,cACI,eAAQ,OAAR,EAA2B,I,sBAG/B,qBAAM,UAAc,wBAAY,UAAwB,MACpD,I9lB4qDY,E8lB5qDZ,MAsDA,EAAgC,EAAK,EAtDM,I9lB4qD/C,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,YoG3tD2D,EAAAA,M0f+CzD,EAAK,K,sBAGpC,YACI,6BAAY,I,sBAGhB,cACI,sBAAc,EAAyB,I,sBAG3C,cACI,eAAQ,OAAR,EAA2B,I,wBAG/B,qBAAQ,UAAc,wBAAY,UAAwB,MACtD,I9lB4pDY,E8lB5pDZ,MAsCA,EAAgC,EAAK,EAtCO,I9lB4pDhD,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uB9lBonDc,coG3tD2D,EAAAA,M0f+DxD,EAAK,K,wBAGrC,YACI,+BAAc,I,wBAGlB,cACI,wBAAgB,EAAyB,I,wBAG7C,cACI,iBAAU,OAAV,EAA6B,I,wBAGjC,uBAEI,UAAc,mBAqBd,I9lBsnDY,E8lBtnDZ,EAAgC,EAAK,EAbjC,I9lBmoDR,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,mBAlBP,I9lBsoDqB,E8lBjoDrB,c1f1FgF,EAAAA,M0fsFhF,EACA,K,yBAOR,yCAOI,IAPJ,E9lB6nDgB,E8lBtnDZ,EAAgC,GAPpC,EAOyC,aAAE,c9lBsnD3C,IAAgB,E8lBrnDZ,kB9lBqnDY,wB,CAAA,eAAa,E8lBpnDd,uBACA,E9lBmnDc,EoG3tD2D,EAAAA,M0fwGzE,U,uFCtIf,YAAmD,U,wBAEnD,yBAAmE,UAAwB,MAA3F,gD,8BAEA,gBACI,qBAAsB,EAAS,EAAK,I,sBAApC,uBADqC,UAAwB,MAAjE,0C,8BAGA,gBACI,qBAAoB,EAAS,EAAK,I,sBAAlC,uBADqC,UAAwB,MAAjE,0C,8BAGA,gBACI,qBAAmB,EAAS,EAAK,I,sBAAjC,uBADqC,UAAwB,MAAjE,0C,8BAGA,gBACI,qBAAmB,EAAS,EAAK,I,sBAAjC,uBADqC,UAAwB,MAAjE,0C,8BAGA,gBACI,qBAAoB,EAAS,EAAK,I,sBAAlC,uBADqC,UAAwB,MAAjE,0C,gCAGA,gBACI,qBAAqB,EAAS,EAAK,I,wBAAnC,uBADuC,UAAwB,MAAnE,4C,4HCpBJ,4C,kBAAA,sB,IAAA,qB,IAAA,mB,IAAA,kB,IAAA,kB,IAAA,mB,IAAA,oB,QAAA,uD,uCECI,YjgByYuB,IigB/XT,EATV,EjgBwYmB,EAAhB,IigBxYH,K/lBoEJ,E+lBpEI,gBAEI,WAFqB,UAAa,GAClC,iBAAO,cAAc,aAAd,MACP,mBACQ,OAAe,EAAQ,GADpB,EAEA,EAAW,EAAQ,EAAR,KALiB,O/lBqE/C,E+lB5DI,eAAO,mBACP,OAAU,YAAV,K/lB4DG,E8FmUqC8C,Y,uR6fnY5C,qDAA8B,SAAK,EAAO,IAA1C,G,4zB9lBo8CJ,8B,ELt5CA,gD,EMuEA,4C,ENkSA,yC,EAAA,+C,EA/LA,yB,EAAA,W,0oBK0vCA,qD,EAAA,4C,EEv9CA,iC,sIELA,8B,4YuDoSA,8B,2c/DhOA,+C,0GXhEA,M,wKM+RA,e,G+GeA,e,GhH7DA,e,GEaA,gB,moE2mB3OA,+B,6CCmDA,mBAKI,gEAAgC,EAAS,IAAzC,EAAuD,GAA0B,EAAW,aAEhG,mBAKI,gEAAgC,EAAS,IAAzC,EAAmD,6BAA0B,GAAc,apmBw3C/F,iBAQW,kDqmBx5CgC,qBAO+D,QAiBlG,GAnBJ,cAHA,2BAKA,0BAA4C,GAAsB,EAAtB,SAA0D,uBAClG,kBAAQ,OAAe,KAAa,YACpC,MACI,GAAsB,kCAAgC,YAAU,YAA1C,IAAtB,QAAsG,+BAC9E,IjnB+mahB,EinB/magB,EAApB,EjnB+maZ,IAAK,EAAL,MAAgB,EAAhB,W,CAAgB,IinB9maA,EjnB8maA,EAAhB,GinB9ma2B,WACX,kBAAQ,EAAE,WAAY,GAE9B,UALsG,KAQ9G,OAFI,kBAAQ,QAAS,GAErB,KAEA,6BACA,kCAGQ,EAAW,SAAQ,EAAoB,OACvC,MAAM,EAAyB,oCAAkC,eAAU,YAA5C,mCAGnC,wBAAuD,EAAzB,EAAX,EAAe,IAE7B,ICtBC,EDsBD,ErmB03CT,OqmB33C4B,wBAAiB,QAAmB,IChDzD,E3mBqBiD,I2mBMxD,IAAU,EAAK,EAAA+8E,iBAAL,a,CAAA,eACN,EAAU,cAAM38E,GAChB,EAAkBwS,EAAA,UAAYpV,G,EAC9BoV,E,YDqBQ,GCrByD,MAAfiY,GAAwBjY,EAAY,kBAAYpV,GDqBtF,MCrBsBqtB,ErmB4DO,MAAM,GomBrC/B,kCAAiC,eAAjC,gCCvBartB,ErmB4DgD,OqmB5D3CqtB,EDwBO,IAAjB,OCxBuBzqB,EDwBY,IAAnC,KpmBoCqDJ,YNyGjF,O2mBrKI4S,EAAYpV,EAAmC4C,G3mBiW5C,IKkwBS,ELlwBT,EAAY,EAAoB48E,E2mB/VhCpqE,E3mB+V4C3M,OKkwBnD,IAAgB,EsmBjmCT2M,E3mB6SAuJ,QKozBS,wB,CAAA,eLpzBa,EKqzBb,YAAgB1J,ELrzBejV,IKqzBUiV,EqmBxkChC,MAAM,OAV3B,6B1mB6RyB,E0mB7RmC,eAAE,SAAG,MAAM,WAAW,W,+EExDtF,yDAGuC,EAAM,EAAN,GAzC3C,WAsCI,EAKA,2DAG0D,SAAM,EAAS,GA9C7E,WA2CI,EAiBJ,iB,GAAmF,EAAS,E,wCAc5F,e,GAAgE,E,wCC9BhE,iBAQI,2BAAsB,GAAuC,IAA7D,EACK,GADsE,GAAL,IAG1E,iBAQI,OAAO,KAAsB,GAAuC,GAGxE,mBAU6C,MADT,ExmBk+CnB,EwmBt+Cb,EAAqB,GAAL,GAChB,EAAiB,EAAK,iBAEjB,EADe,EAAK,UxmB65ClB,EAAM,EAAa8O,EAAwB,OAuElD,IAAa,4B,CAAA,IwmBn+CF,ExmBm+CE,W,EACT3O,E,UwmBp+CO,ExmBo+CmBE,EwmBp+CD,KvmBhB7B,GAAa,MAAT5V,EAEA,MAAM,GumBc2B,kEvmBdM8C,YAEvC,EAAO9C,EDg/CK,OAAZ0V,EAAY,GwmBr+ChB,IAEgC,ECF4B,EDA5D,ExmBs+COA,EwmBh+CP,OAAO,OAJyB,SACD,EAA3B,EAAc,UAAa,OAAU,KAAV,MAAgC,wBAAc,GAMjF,kBAMsB,MAoB6C,EAdxD,EANW,GAAI,E,CACJ,IxmBo9CL,EwmBp9CK,iBAAI,c,gBAAJ,cxmB64CX,EAAM,EAAa2O,EwmB74CtB,ExmB64C8C,KAuElD,IAAa,EwmBp9CT,ExmBo9CS,wB,CAAA,eACT3O,EAAY,UAxEwC8B,EAwE1B5B,IwmBr9CZ,ExmBs9CXF,M,CAzEA,IAuEM,EAvEN,EAAM,EAAa2O,EwmB34CtB,ExmB24C8C,KAuElD,IAAa,EwmBl9CT,ExmBk9CS,wB,CAAA,IwmBl9CW,ExmBk9CX,W,EACT,E,UwmBn9CoB,iBxmBm9CM,IwmBn9CkB,OAAO,KxmBm9CvC,OAAZ,EwmBn9CoB,GAAN,ExmBo9CX,EwmBv9CP,QAOI,KADS,EACT,SADS,EACT,SADS,EACT,SADS,EACT,MAAwE,SAAoB,cAAY,SACxG,KAFS,EAET,MAAkB,SAAkB,cAAY,SAChD,KAHS,EAGT,SAHS,EAGT,SAHS,EAGT,MAAuD,SAAwB,cAAY,SAC3F,KAJS,EAIT,MAAkB,SAAkB,cAAY,GAAI,cAAY,SAChE,KALS,EAKT,SALS,EAKT,SALS,EAKT,MAAuD,SACnD,cAAY,GACZ,cAAY,SAEhB,KATS,EAST,MAAoB,KAAmB,cAAY,GAAI,cAAY,SACnE,KAVS,EAUT,MAAe,KAAe,cAAY,GAAI,cAAY,SAC1D,KAXS,EAWT,MAAiB,KAAiB,cAAY,GAAI,cAAY,GAAI,cAAY,Q,CChCtB,MDkCpD,GAAI,GAAiB,GACjB,OCnCgD,WDmCzC,GAA2B,SAAiB,EAAjB,cAAc,GAAG,WAAjB,SAA4C,cAAY,ICnC1C,UDqC1C,KAAV,EtmBrG0DxN,EsmBqGX,GAArC,SAhBlB,SAjBY,GAAkB,EAAe,EAAW,ICJI,uBDE5B,MA0FpC,cAEW,MADP,OAAI,EAAyB,MACtB,uBAxFA,CAJP,EAIwB,GAAjB,KA+DX,eAqBI,+BAA4B,MExJ5B,eAEuC,MAAnC,OAAW,aAAW,WAAa,uBAA8B,OAAmB,GAG5F,iBAO6B,OAA+B,OAAe,EAAe,GAE1F,iBASkC,OAA+B,OAAmB,EAAe,GAEnG,mBAQkC,OAA+B,OAAiB,EAAa,EAAa,GAE5G,eAG4D,YAE5D,cAK2D,YAE3D,eAG4D,YAE5D,cAI2D,YAE3D,eAG8D,YAE9D,cAI6D,YAE7D,eAG0D,YAE1D,cAIyD,YAEzD,eAG4D,YAE5D,cAI2D,YAE3D,eAG8D,YAE9D,cAI6D,YAE7D,eAGgE,YAEhE,cAI+D,YAE/D,eAGkE,YAElE,cAIiE,YAEjE,eAIkD,YAElD,eAGgE,YAWhE,iBAQ2B,cAA+B,EAAQ,GtmBhKlE,eAMuF,wB,eumBuQ/E,8CACI,oBAA2B,gBAFnC,eAAQ,OvmBtQ2E,QumBsQlE,eACb,oBADa,MChOwC,eAAC,SA1C9D,mB3mBwBI,Q2mBkBA,UAAyD,IjjB8PLuY,GijB5P5C,G3mBlBJ,MAAM,E2mBkByB,oC3mBlBQtsB,Y2mBmB3C,MAAgB,OAA6B,GAE7C,OADU,EAAV,GACO,OACH,EADG,KAGH,EAAU,qBAAa,KACR,EAAf,GACA,GAwC+C,eAAC,SAbxD,qB3mBvDI,Q2mBoEA,UAAmD,IjjB4MCssB,GijB1M5C,G3mBpEJ,MAAM,E2mBoEyB,oC3mBpEQtsB,YAF3C,G2mBuEQ,U3mBrEJ,MAAM,E2mBqE6B,0E3mBrEIA,Y2mBsE3C,MAAgB,OAA6B,GAE7C,OADU,EAAV,GACO,OAAqB,EAAY,EAAM,EAAU,qBAAa,KAAqB,EAAf,GAAyB,GAuF9D,eACtC,kBAGA,iBAMiC,EAEjC,iBAI2C,IAE3C,0BAAiD,IACjD,mBAA8C,IAC9C,gCAAiE,IACjE,gCAAiE,IACjE,gCAAwD,IAgDzB,uBAC/B,4BACA,sBACA,+BAKA,2BAA6C,EAAQ,YACrD,2BAA6D,EAArB,EAAQ,sBAEhD,oB1mBtQkE+T,E0mBsQxB,EAAQ,sBAClD,0BAAqF,GAA3B,EAAQ,4BAClE,0B1mBxQkEA,E0mBwQR,EAAQ,4BAClE,0BAA0E,EAA3B,EAAQ,4BACa,I5mB0xCvD,E4mBxxCsB,EAFiC,EAAZ,EAAb,qB5mBmtCpC,EAAM,EAAawN,EAAwB,OAuElD,IAAa,4B,CAAA,eACT3O,EAAY,U4mB3xC0D,E5mB2xC5CE,E4mB3xC+C,M5mB2xC/CA,E4mB3xC2D,QAAzF,kBAAiG,E5mB4xC1FF,G4mB3xCP,iCAAgF,GAAf,GACjE,yBAA8B,IAAK,kBAAE,YAAa,kCCjRtD,eAoBI,sBAUqB,c,+8I7mB+6CzB,4BASQ,WAA6C,OAAA/W,KAAA,gBAAgBuX,YATrE,yBAUQ,YAAoC,gCAAYX,IAVxD,sC,oDqmB94CI,8C,qEAKA,+C,qDAmCA,cACW,M1mB8HkB,E0mB9HlB,+BAAP,OAAO,U1mB8HkB,uBAAmB,U0mB9Hf,IAAtB,EAA0C,+DAAgC,EAAS,I,qDAG9F,cACY,QInCoE,EJmC5E,OAAO,OAAC,uEAAiB,KAAjB,EAAwC,+DAAgC,EAAS,IInCb,uBJmCrE,M,wajmB7Gf,sBAOI,WAAuC,gCAP3C,sC,qEumBwJmC,WAAQ,Y,mEAMV,WAAQ,Y,sEAsBI,WAAQ,c,wFA2FzC,WAAkC,2BAAe,G,kBAEjD,WACiD,QAAjB,EAA5B,OAA4B,6CAAiB,oDAAtC,0DAAqB,Q,mEC/DxC,kB3mBzLA,Q2mB8MI,UAAgC,UAChC,WAAsB,IAEd,mBAAY,UAAI,G3mB/MxB,MAAM,G2mB+MkC,mD3mB/MDzS,Y2mBgNvC,0BjiBlMC,UiiBkMe,GAChB,gCjiBnMC,UiiBmMqB,GACtB,gCjiBpMC,UiiBoMqB,GACtB,gCjiBrMC,UiiBqMqB,I,oIAmB1B,+C,+CACA,yC,wDACA,kD,sEAKA,gD,sEACA,gD,sEAQA,W,OxgBhPwF,yBAAA9C,S,oCwgBkPxF,YAAkD,OAAa,GAAb,oBAAwB,I,qCAC1E,YAAkD,kDAAW,IAAX,GAAoB,G,2CACtE,YAAmE,OAAmB,GAAnB,0BAA8B,I,0CACjG,YAAkE,OAAmB,GAAnB,0BAA8B,I,uCAChG,YAAsD,OAAmB,GAAnB,0BAA8B,I,oBAEpF,YACI,M,KEnLkB,MALtB,GAAI,OFwLW,E,CExLK,GAAO,EAAP,QACpB,IAAI,SFuLW,EEvLX,I,CAAc,GAAO,EAAP,QAClB,IAAI,kBFsLW,EEtLS,Y,CAAY,GAAO,EAAP,QACpC,IFsLkC,EAA1B,iCADO,EAEa,6B,CEvLI,GAAO,EAAP,QAChC,GAAS,qBFoLM,EEpLiB,c,CAAe,GAAO,EAAP,QACzB,qBAAtB,UAAc,EAAd,Q,CACI,IAAI,oCAAqB,GAAO,WFkLrB,EElLyC,6BAAqB,GAAO,Y,CAAY,GAAO,EAAP,QAC5F,IAAI,oCAAqB,GAAO,KFiLrB,EEjLmC,6BAAqB,GAAO,M,CAAM,GAAO,EAAP,SAEpF,GAAO,Q,GF+KH,U,sBAMJ,WAA+B,yB,sBAE/B,WACI,OAA+B,EAAvB,IAAQ,oBAA4B,KAAiB,gBAAF,IAA0B,SAAtD,UAA2D,mBACtF,gCAAe,GAAM,KAAO,+BAAqB,GAAI,cADiC,O,iJC/Q9F,0CAYA,sBAW2B,c,2EAX3B,0CAsBJ,cAuBoC,cAChC,sBAKwB,c,sBAtCxB,WAEI,OAAO,GAAY,0BAAZ,MAAY,a,sBAGvB,WAC+B,OAAW,EAAX,kB,qIA2B/B,0CAOA,sBAKqB,c,qEALrB,0CAOA,sBAKqB,c,qEALrB,0CAOA,sBAKsB,c,sEALtB,0CAOA,sBAKoB,c,oEALpB,0CAOA,sBAKqB,c,qEALrB,0CAOA,sBAKsB,c,sEALtB,0CAOA,sBAKuB,c,uEALvB,0CAOA,sBAKuB,c,uEALvB,0CAQJ,cAsCoC,cAEhC,sBAKsB,c,wIALtB,0CAOA,sBAWqB,c,qEAXrB,0CAaA,sBAQoB,c,oEARpB,0CAUA,sBAQuB,c,uEARvB,0CAWJ,cAQsC,cAClC,sBAIuB,c,yIAJvB,0CAMA,sBAWqB,c,qEE1PzB,eCEA,e,6BCwRI,2BAII,kBAIoC,EAEpC,mBAIqC,E,6FF/RzC,WAGqC,MAAM,GAAuB,0BAAG,MAAH,8C,+BAElE,WAA4C,U,wBAC5C,WAAsC,a,2BACtC,WAAwC,2D,wBACxC,WAAkC,0D,yBAClC,WAAoC,0D,uBACpC,WAAgC,0D,wBAChC,WAAkC,0D,yBAClC,WAAoC,0D,0BACpC,WAAsC,0D,wBACtC,WAAkC,mD,0BAClC,WAAsC,0D,gCACtC,YAAiE,0D,kCAEjE,YAAyE,a,qDAEzE,cAIO,4CAAwB,I,6CAAxB,gB,YADH,UAAoB,MAHxB,4D,oCAMA,YAA8E,a,kCAE9E,c,0CAGA,cAA6F,6B,uCAC7F,cAAuF,0B,wCACvF,cAAyF,2B,sCACzF,cAAqF,yB,uCACrF,cAAuF,0B,wCACvF,cAAyF,2B,yCACzF,cAA2F,4B,uCAC3F,cAAuF,0B,yCACvF,cAA2F,4B,yCAE3F,cAGa,iCAAa,EAAW,6BAAqB,K,uDAE1D,kBAKO,4CAAwB,EAAc,I,+DAE7C,kBAOI,OAD6B,EAAa,WAAW,YAChB,yBAAqB,qCAAwB,EAAc,GAAoB,mB,2GC1DxH,YAA8E,a,kCAE9E,c,mCAEA,cAMmF,U,iCAEnF,YAII,MAAM,GAAuB,8CAAoB,GAApB,kDAAwD,MAAxD,a,wBAEjC,WACI,MAAM,GAAuB,uC,mCAGjC,YAAmD,yBAAY,I,gCAC/D,YAA6C,yBAAY,I,iCACzD,YAA+C,yBAAY,I,+BAC3D,YAA2C,yBAAY,I,gCACvD,YAA6C,yBAAY,I,iCACzD,YAA+C,yBAAY,I,kCAC3D,YAAiD,yBAAY,I,gCAC7D,YAA6C,yBAAY,Q,kCACzD,YAAiD,yBAAY,I,gCAC7D,cAA8E,yBAAY,I,kCAE1F,YAAyE,a,0CAEzE,gBACwG,2BAAc,EAAY,IAAQ,2BAAc,I,uCACxJ,gBAAkG,2BAAc,EAAY,IAAQ,wBAAW,I,wCAC/I,gBAAoG,2BAAc,EAAY,IAAQ,yBAAY,I,sCAClJ,gBAAgG,2BAAc,EAAY,IAAQ,uBAAU,I,uCAC5I,gBAAkG,2BAAc,EAAY,IAAQ,wBAAW,I,wCAC/I,gBAAoG,2BAAc,EAAY,IAAQ,yBAAY,I,yCAClJ,gBAAsG,2BAAc,EAAY,IAAQ,0BAAa,I,uCACrJ,gBAAkG,2BAAc,EAAY,IAAQ,wBAAW,I,yCAC/I,gBAAsG,2BAAc,EAAY,IAAQ,0BAAa,I,yCAErJ,cAII,OAAI,2BAAc,EAAY,GAAQ,0BAAa,EAAW,6BAAqB,IAAa,M,+CAEpG,kBAMQ,2BAAc,EAAY,IAC1B,qCAAwB,EAAY,I,uDAG5C,kBAMQ,2BAAc,EAAY,IAC1B,6CAAgC,EAAY,I,oHCiKpD,YAMI,SAAa,oBAAY,O,qDAE7B,YAMI,OAD6B,EAAa,WAAW,YAChB,yBAAqB,qCAAwB,GAAmB,mB,oJA2BzG,0C,8BC5QyD,eA2E7D,iBAEI,MAAY,sBAAoB,EAAU,YAA9B,IACZ,MAAM,GACE,QACA,0FAAyF,EAEzF,YAAS,GAAT,qDAAwE,EAAxE,6EAKZ,iBAEuC,MAAnC,UAA0B,OAAS,EAAT,EAAS,YAAT,EAAyB,EAAF,WAAa,G,eCrG1B,eAAC,yBAErC,6BAAkC,EAmCC,mBACnC,4BACA,qBACA,uBAGA,6BAAkC,EAwDE,eAEpC,aAAmB,GACnB,0BAAqC,EAAU,WAAb,QAGT,eAAkC,aAAmB,GAIjD,eAAkC,aAAmB,GAIjD,eAAkC,aAAmB,GAI3D,eAAkC,aAAmB,GAI/C,iBACjC,aAAkB,GAAsB,EAAS,GAEtB,iBAC3B,aAAkB,GAAe,EAAS,GC5H9C,eA4CsE,eAElE,cADA,2BA2B2F,iBAG3F,cAFA,qBACA,uBA2CiD,eAcrB,eAE5B,aAA4C,GAC5C,0BAAkD,OAAyB,EAAoB,YAqCf,iBAGhF,aAAgE,GAFhE,gBAGA,0BAA4C,OAAe,EAAY,YAmBtC,eAA4B,aAA6C,GAC1G,0BAA4C,OAAmB,EAAQ,YAYlC,eAErC,aAAgD,GAEhD,0BAA4C,OAAuB,EAAY,YAYhD,eAE/B,aAA0C,GAE1C,0BAA4C,OAAiB,EAAY,YAYjC,iBAExC,aAAwD,EAAa,GAErE,0BAA4C,OAAuB,EAAY,WAAY,EAAY,YAYrE,iBAElC,aAAkD,EAAa,GAE/D,0BAA4C,OAAiB,EAAY,WAAY,EAAY,YCzN3D,iBAKyD,QAH/F,gBAGA,0BAA4C,GAAsB,EAAtB,SAAmD,uBACpF,IjoBqoaK,EioBroaL,EAAP,WjoBqoaJ,IAAK,EAAL,MAAgB,EAAhB,W,CAAgB,QAAhB,GioBnoaQ,EAA2B,GADjB,MjoBooaWuV,EioBpoaO,KACD,SAC3B,kBjoBkoaqBA,EioBloaV,KAAM,GAEzB,YCpDgC,iBAGhC,aAAgC,EAAM,EAAqB,GAE3D,yBAAiC,EAWL,kDADhC,iBACI,cAAsB,EAAtB,WClBJ,sBAII,0BAA4C,GAA0B,cAAmB,M,gCNkTzF,WAqC2C,U,0CAuD3C,YAMqE,U,+CAoGrE,oB,YAgBI,UAAoB,MAhBxB,sE,uDAmBA,oB,YAcI,UAAoB,MAdxB,8E,kGOtaA,a,qCAsJA,cAOsB,mCAAe,I,6CAErC,cAMI,EAAW,kBAAU,KAAM,I,qDAG/B,cASuC,MAFnC,GAD6B,EAAW,WAAW,WAG/C,OAAO,qCAAwB,uBAAyC,GAIxE,QACA,mBAEA,yBACA,qCAAwB,EAAY,K,0GAsC5C,cAa2F,U,kGNlU3F,cACI,MAAuB,QAA0B,EAAS,GAClD,EAAgB,gBM0b5B,EN1bI,EM0bY,uBAAe,GAC/B,EAAqB,K,IfxY2D,Me0Y5E,EN5bI,4BAAoB,gBAAY,EAAoB,aAAW,YM4bnE,EN3bI,kCAA0B,gBAAY,ETiDkC,uBSjDxE,G,SM4bN,sBACE,EAAK,EACC,GAJV,E,QAOQ,SAAY,EAAU,qBAAa,K,iCN7b3C,YAAqE,QAAgB,gBD6gBrF,EC7gB6D,ED6gB7C,uBAAe,GAC/B,EAAqB,K,ICxfI,QArBrB,KAAyB,MACzB,EAAkB,KAClB,GD6gBO,EC7gBH,qBACA,OAAO,kCD4gBJ,G,ECzgBG,O,CACA,MDwgBH,ECxgBe,2BAAmB,iBAArC,U,KACI,EACI,Q,KAEJ,EACI,IDmgBL,ECngBiB,4BAAoB,gBAAY,GADhD,M,KAGA,EACgB,QAAe,IjnBU3C,GAAI,QAEA,MAAM,EinBZ8C,sDjnBYbzS,YAEvC,EAAO,EinBdK,MACA,MAAiB,QD+ftB,EC/fsD,KACjD,ED8fL,EC9fa,kCAA0B,gBAAY,EAAO,GAHzD,M,QAKQ,MAAM,GACV,oDACS,gBAAa,iBACd,kDAAiD,IAKrE,QAAe,EjnBFnB,GAAI,Q,CACA,MinBCwB,mDAAgD,KjnBAxE,MAAM,EAAyB,EAAQA,YAEvC,EAAO,EgnBkfP,ECpfA,uB,SDqfF,sBACE,EAAK,EACC,GAJV,E,QAOQ,SAAY,EAAU,qBAAa,GCthBkB,U,0CA+B7D,YACI,MAAgB,EAAiB,4BAAoB,gBAAY,GACjE,EAAiB,QAA0B,EAAkB,GAC7D,OAAO,EAAiB,kCAA0B,gBAAY,EAAG,I,qDAGrE,cAQqC,SAAQ,kBAAkB,uBAAe,eAAW,I,qDAGzF,cASI,SAAQ,kBAAkB,uBAAe,eAAW,I,+MCnF1B,WAAQ,e,wEACtC,kD,oCAEA,YAAkD,SAAM,Y,qCACxD,YACS,MAAL,UAAK,KAAL,IAAsB,MAAM,EAA2B,EAAF,8BAArD,U,uCAEJ,YlnBgBA,KknBfY,GAAS,G,ClnBgBjB,MknBhBsB,wBAAwB,gBAAxB,qClnBiBtB,MAAM,EAAyBwY,EAAQxY,YknBhBvC,OAAO,G,2CAGX,YlnBWA,KknBVY,GAAS,G,ClnBWjB,MknBXsB,wBAAwB,gBAAxB,qClnBYtB,MAAM,EAAyBwY,EAAQxY,YknBXvC,OAAO,K,0CAGX,YlnBMA,KknBLY,GAAS,G,ClnBMjB,MknBNsB,wBAAwB,gBAAxB,qClnBOtB,MAAM,EAAyBwY,EAAQxY,YknBNvC,OAAO,wB,oBAGX,YACI,OAAI,OAAS,KACT,mBACA,yBAAqB,EAAM,qBAAqB,kBAAc,EAAM,c,sBAI5E,WACI,OAAsC,GAAb,EAAlB,2BAA+C,EAAX,iBAApC,G,sBAGX,WAAkC,OAAE,gBAAF,IAAc,uBAAd,K,4HAIlC,+C,+DAI8B,WAAQ,e,wEACtC,kD,oCACA,YAAkD,SAAM,Y,qCACxD,YACS,MAAL,UAAK,KAAL,IAAsB,MAAM,EAA2B,EAAF,6BAArD,U,uCAEJ,YlnBxBA,KknByBY,GAAS,G,ClnBxBjB,MknBwBsB,wBAAwB,gBAAxB,qClnBvBtB,MAAM,EAAyBwY,EAAQxY,YknBwBvC,OAAO,G,2CAGX,YlnB7BA,KknB8BY,GAAS,G,ClnB7BjB,MknB6BsB,wBAAwB,gBAAxB,qClnB5BtB,MAAM,EAAyBwY,EAAQxY,YknB6BvC,OAAO,K,0CAGX,YAEiB,IAAN,ElnBpCX,KknBmCY,GAAS,G,ClnBlCjB,MknBkCsB,wBAAwB,gBAAxB,qClnBjCtB,MAAM,EAAyBwY,EAAQxY,YknBkChC,OAAM,EAAQ,G,KACjB,EAAK,qBAAL,M,KACA,EAAK,uBAAL,M,QlnBqEqC,MAAM,EknBpE7B,YlnBoE2DA,YknBvE7E,U,oBAOJ,YACI,OAAI,OAAS,KACT,kBACA,kBAAc,EAAM,eACpB,qBAAiB,EAAM,kBACvB,uBAAmB,EAAM,kB,sBAIjC,WACI,MAAwB,EAAX,iBAGb,OADA,GAAS,IADT,GAAS,GAAK,EAAL,GAA4B,EAAd,oBAAd,GACA,GAA8B,EAAhB,sBAAd,G,sBAIb,WAAkC,OAAE,gBAAF,IAAc,mBAAd,KAA8B,qBAA9B,K,2IAmBlC,+C,kJAIgC,WAAQ,a,wIAIR,WAAQ,a,4IAIR,WAAQ,a,gJAIR,WAAQ,a,gPCzGxC,cAEkB,MAAd,EAAc,iDAAyB,eACvC,EAAyB,uBAAR,GACjB,EAAuB,EAAQ,uBAAe,iBAC9C,GAAI,EAAiB,qBACjB,qBAAQ,EAAkB,EAAS,EAAY,wBAAS,EAAkB,SAE1E,O,CACI,MAAY,EAAiB,2BAAmB,iBAChD,IAAa,IAAT,EAAuC,MAC3C,yBAAY,EAAkB,EAAa,EAAb,EAAoB,GAI1D,OADA,EAAiB,qBAAa,iBACf,oBAAR,I,iCAGX,YAAyD,0BAAM,EAAS,O,gCAExE,cACI,MAAW,EAAQ,6BAAqB,iBAExC,OADQ,2BAAR,EAAsB,GACf,G,iCAGX,yBAA4F,WAAsB,GAAlH,wD,gHAaA,cAII,IAHA,MAAiB,0BAAN,GACX,EAAgB,EAAQ,wBAAgB,gBAAY,GACpD,EAAqB,8BAAN,GACf,EAAc,EAAd,EAAsB,EAAtB,IACI,EAAU,kCAA0B,gBAAY,EAAO,yBAAmB,EAAS,QACvF,EAAU,qBAAa,kB,6BAG3B,kBnnBrCA,KmnBsCY,GAAQ,GnnBpChB,MAAM,EmnBoCe,oDnnBpCkBA,YmnBqCvC,UAAc,EAAd,EAAsB,EAAtB,IACI,yBAAY,EAAS,EAAa,EAAb,EAAoB,GAAsB,I,yCAGvE,kBACY,mBAAR,EAAe,EAAO,EAAQ,kCAA0B,gBAAY,EAAO,4B,oGAa/E,kBAE0B,MnnB3D1B,KmnB0DY,GAAQ,GnnBxDhB,MAAM,EmnBwDe,oDnnBxDkBA,YmnByDjB,EAAO,EAAP,IAAtB,UAAc,EAAd,OAAoC,EAChC,yBAAY,EAAS,EAAa,EAAb,EAAoB,GAAsB,I,yCAGvE,kBAEiB,MADb,EAAe,EAAQ,kCAA0B,gBAAY,EAAO,oBACvD,GAAI,E,CAC0B,MAAvC,EAAQ,2BAAmB,iBnnBlEnC,GE8DM,KinBKoB,EAAQ,EAAR,GnnBjEtB,MAAM,GmnBiE6B,mFjnBLjC,GF5DqCA,YmnBgEI,EjnBHxC,OinBOC,IAAQ,EAAR,EALJ,QAOA,EAAuB,EAAQ,kBAAY,KAAQ,8BAAgB,WAAW,KAA3B,IAC/C,EAAQ,kCAA0B,gBAAY,EAAQ,qBAAyB,GAAR,EAAiB,IAExF,EAAQ,kCAA0B,gBAAY,EAAQ,sBAE1D,EznBuIJ,YynBvIY,EAAO,I,+BAGnB,c3iBpFA,I2iBqFI,MAAiB,0BAAN,GACX,EAAgB,EAAQ,wBAAgB,gBAAY,GACpD,EAAqB,8BAAN,GACf,KAAY,GACZ,E3iBzFY,W,CAAA,I2iB0F4B,I3iB1F5B,E2iByFZ,E3iBzFY,O2iByFQ,E3iBzFQyS,E9EsQgCjV,IynB7KrC,E3iBzFKiV,E9EmRgCvV,MynBzL9C,oCAA0B,iBAAY,gBAAtC,GAA+C,mBAAe,GAC9D,oCAA0B,iBAAY,gBAAtC,GAA+C,qBAAiB,GAE9E,EAAU,qBAAa,kB,0GAO3B,mBAAqC,UAAwB,cAAW,EAAX,GAA7D,+C,6IAeA,+C,+BAEA,YAAgD,mB,4BAChD,YAA+C,kB,mCAC/C,cAA4D,yBAAe,I,sCAE3E,YnnBV6C,MAAM,EmnBWzC,6EnnBXuE8C,a,2BmnBajF,gBnnBb6C,MAAM,EmnBczC,8EnnBduEA,a,qBmnBgBjF,WAAwC,OAAQ,qBAAR,e,+BAaxC,cACI,MAAiB,0BAAN,GACX,EAAgB,EAAQ,wBAAgB,gBAAY,GACpD,yBAAa,EAAW,EAAO,GAC/B,EAAU,qBAAa,kB,iCAG3B,YAA0D,0BAAM,EAAS,O,kJASzE,+C,kCAEA,YAAoD,iB,sCACpD,YAAsE,2B,qBACtE,WAA6C,O1nB5FG,K,+B0nB6FhD,YAAqD,e,4BAErD,YAC6D,YAAyC,gB,6BAEtG,YAA8D,UAAe,GAAL,K,mCACxE,cAAiE,yBAAe,I,2BAChF,gBACI,cAAI,EAAO,I,kJAOf,+C,kCACA,YAA6C,e,sCAC7C,YAAyD,qB,qBACzD,WAAuC,O1nB/GS,K,+B0nBgHhD,YAA+C,e,4BAC/C,YAAgD,U,6BAChD,YAAiD,kDAAyB,GAAU,I,mCACpF,cAA2D,yBAAe,I,2BAC1E,gBAA2D,cAAI,EAAO,I,6IAQtE,+C,kCACA,YAA4C,e,sCAC5C,YAAwD,qB,qBACxD,WAA2C,OxnB/IS,M,+BwnBgJpD,YAAmD,e,4BACnD,YAAmD,U,6BACnD,YAAoD,kDAA6B,GAAc,I,mCAC/F,gB,2BACA,gBAA+D,YAAI,I,iJAQnE,+C,kCACA,YAA4C,e,sCAC5C,YAAwD,qB,qBACxD,WAAqC,Y,+BACrC,YAA6C,e,4BAC7C,YAA6C,U,6BAC7C,YAA8C,kDAAuB,GAAQ,I,mCAC7E,gB,2BACA,gBAAyD,YAAI,I,2IAQ7D,+C,kCACA,YAA+C,e,sCAC/C,YAAyE,OznBiHW,EAAAmc,QAAQ/I,Y,qBynBhH5F,WAA8C,Y,+BAC9C,YAAsD,e,4BACtD,YAAyD,U,6BACzD,YAA0D,kDAAgC,GAAc,I,mCACxG,gB,wCACA,kBznBhBA,cynBgB8F,EAAK,I,iJAQnG,+C,kCACA,YAA+C,e,sCAC/C,YAAyE,OznBiGW,EAAA+I,QAAQ/I,Y,qBynBhG5F,WAAwC,a,+BACxC,YAAgD,e,4BAChD,YAAmD,U,6BACnD,YAAoD,kDAA0B,GAAQ,I,mCACtF,gB,wCACA,kBznBhCA,cynBgCwF,EAAK,I,2IC5N7F,+C,+BAQA,cACI,MAAmB,GAAP,cAAe,GAC3B,IAAa,IAAT,EACA,MAAM,GACA,EAAF,mCAA8B,gBAAW,WAAvC,oBAC+B,GAAP,gBAGlC,EAAQ,mBAAW,gBAAY,I,iCAGnC,YACI,MAAY,EAAQ,mBAAW,iBAC/B,IAAqB,GAAP,eAAV,oBACA,MAAM,GACA,EAAF,kCAA6B,gBAAW,WAAtC,gCACwB,cAAO,QAGzC,OAAO,cAAO,I,sBAGlB,WAAkC,uDAAiD,gBAAW,WAA5D,K,sICvElC,6C,sBAEA,WAA+B,OAAmB,GAAb,iCAAN,G,oBAE/B,YAA4C,M,KR2FtB,MALtB,GAAI,OQtFmD,E,CRsFnC,GAAO,EAAP,QACpB,IAAI,SQvFmD,ERuFnD,I,CAAc,GAAO,EAAP,QAClB,IAAI,kBQxFmD,ERwF/B,Y,CAAY,GAAO,EAAP,QACpC,IQzFuD,EACnC,WACiB,EAAzB,sCAF2C,EAEY,kC,CRuFnC,GAAO,EAAP,QAChC,GAAS,qBQ1F8C,ER0FvB,c,CAAe,GAAO,EAAP,QACzB,qBAAtB,UAAc,EAAd,Q,CACI,IAAI,oCAAqB,GAAO,WQ5FmB,ER4FC,6BAAqB,GAAO,Y,CAAY,GAAO,EAAP,QAC5F,IAAI,oCAAqB,GAAO,KQ7FmB,ER6FL,6BAAqB,GAAO,M,CAAM,GAAO,EAAP,SAEpF,GAAO,Q,GQ/FqC,U,wGAQxC,WACyD,OAAQ,mC,qEAEvB,WrnB6GD,MAAM,EqnB7GS,crnB6GqBpT,e,+BqnB3G7E,crnB2GyC,MAAM,EqnB1GrC,crnB0GmEA,a,iCqnBvG7E,YrnBuGyC,MAAM,EqnBtGrC,crnBsGmEA,a,4GsnB/HjF,+C,+BAEA,cACY,MAAR,OAAQ,EAAR,EAAQ,qBAAa,mB,oBAAuB,EhoB+LfsxB,O,iCgoB5LjC,YACI,OhoBgS+B,OgoBhSxB,EAAQ,qBAAa,iBAAY,c,+EAXhD,0CAeA,sBAII,0BAA4C,GAA0B,eAAqB,M,qEAA3F,+C,+BAEA,cACY,MAAR,OAAQ,EAAR,EAAQ,qBAAa,mB,qBAAwB,EjhB2LdA,O,iCihBxLnC,YACI,OjhBgSkC,OihBhS3B,EAAQ,qBAAa,iBAAY,e,gFAXhD,0CAeA,sBAII,0BAA4C,GAA0B,eAAqB,M,qEAA3F,+C,+BAEA,cACY,MAAR,OAAQ,EAAR,EAAQ,qBAAa,mB,qBAAwB,EjoByHdA,O,iCioBtHnC,YACI,OjoBoNkC,OioBpN3B,EAAQ,qBAAa,iBAAY,e,gFAXhD,0CAeA,sBAII,0BAA4C,GAA0B,gBAAuB,M,qEAA7F,+C,+BAEA,cACY,MAAR,OAAQ,EAAR,EAAQ,qBAAa,mB,sBAAyB,E/nBqHbA,O,iC+nBlHrC,YACI,O/nBkNqC,O+nBlN9B,EAAQ,qBAAa,iBAAY,gB,iFAXhD,0CE7CA,sBAI8B,cAC1B,iCAAoD,G,4EAApD,sD,iCAEA,c,wBAEA,a,mCAEA,c,gCACA,c,iCACA,c,+BACA,c,gCACA,c,iCACA,c,kCACA,c,gCACA,c,kCACA,c,gCACA,gB,kFApBJ,0CCK0C,eAAC,oBACvC,0BAA4C,OAA4B,kBAAW,YA6B7C,eACtC,wBAGA,0BAAkC,sBAAS,WAAa,IACxD,2BAAiD,GAAT,uBCjCJ,iBAAqB,wBACzD,0BAA4C,GAAsB,EAAtB,SlBsChD,eAIsB,MAFlB,GAAI,eAAqB,OAAO,cAChC,MAAa,GAAgB,iBACX,kBAAlB,UAAU,EAAV,Q,CACI,MAAU,yBAAe,GAAzB,E9hBXC,UAAI7e,G8hBaT,OAAO,EAMX,eAKI,iC/mBqKO,SAAqB,EAAAe,USrGW,KAAhC,GD5H2DO,EAAY,GumB4D9E,QAAqD,GAczD,eACI,MAAM,GACF,2BAAyB,cAAzB,0FAOR,eAC8B,QAAM,EAAQ,aACxC,kBxmB0C6C,MAAM,GwmBzCrC,8CAA2C,IxmByCwB/T,YwmB3CvD,OACV,IADU,sBKnFqB,wBAE/C,UAA2D,MAD3D,4BACA,6BACA,+BAKA,cAAoB,E7nBVmC,IAI1C,E6nBgBiC,E7nBpBS,EAAa,G6nBW1C,oB7nBPb,EAAAqQ,EAAM,OAAO,EAAb,EAAb,IAAK,IAAL,EAAU,EAAV,SACIA,EAAMpU,G6nBMiC,kBAA3C,a7nBJOoU,E6nBKP,6BAAoC,WAAuC,mBAAvC,MAEpC,wBACyD,KACzD,2BAAkC,eAAa,oBAG/C,uBACyC,IAAK,kBAAE,6BAChD,gCACgC,GAAK,8BAAE,uFzlBxBI,IylBwBN,QAErC,gDACkE,GAAK,8BACnE,4F,C1nBy/VG,IA+UM,EA/UN,EAAM,EAAa,UA+U1B,IAAK,EAAL,mB,CAAa,MAAb,KACIuC,EAAY,UAAcE,E0nBz0WiC,YAA3D,E1nB00WGF,O0nB10WH,cAAwE,OADL,QAIvE,yBAC8B,GAAK,8BAAE,YAAa,qCAAf,QA4EvC,iBAEI,MAAwB,EAAX,cACb,GAAS,GAAK,EAAL,GAAyB,GAAX,GAAd,EACT,I9mB6lDgB,E8mB7lDhB,EAAyB,M9mB4lDrBiY,EymB5kDQ,EzmB6kDZ,IAAgB,E8mB5lDA,E9mB4lDA,wB,CAAA,I6JxsDqB,E4c2HH,KzmB6kDYA,EymB7kDZ,EAA8B,EzmB6kDhD,S8mB5lD2C,W9mB4lDrCA,EymB7kDY,G5c3HG,8BAAoB,G4c2HvB,EKflC,I9mB4lDgB,E8mB5lDhB,E9mB6lDOA,EAFH,EymB5kDQ,EzmB6kDZ,IAAgB,E8mB3lDD,E9mB2lDC,wB,CAAA,I6JxsDqB,E4c2HH,KzmB6kDY,EymB7kDZ,EAA8B,EzmB6kDhD,S8mB3lD0C,K9mB2lDpC,EymB7kDY,G5c3HG,8BAAoB,G4c2HvB,EKXlC,OADA,GAAS,IADT,GAAS,GAAK,EAAL,GAAc,EAAd,GACA,G9mB0lDF,E8mB1lDE,E,8BcpHb,sBAQI,aAAiE,M,qEFHjE,+C,+BAEA,cACQ,SACA,EAAQ,oBACR,EAAQ,gCAAwB,kBAAY,IAE5C,EAAQ,c,iCAIhB,YACI,OAAW,EAAQ,oBAAqB,EAAQ,gCAAwB,mBAAiB,EAAQ,c,oBAGrG,Y,MACI,OAAI,OAAS,KACT,SAAiB,+EAAe,OACpC,sBACI,oBAAc,EAAM,gB,sBAI5B,WACI,OAAkB,EAAX,oB,4IASX,+C,sEACA,gD,qEAEI,WAAQ,Y,oBAEZ,YACI,OAAI,OAAS,KACT,kBACA,wBAAY,EAAM,mB,sBAI1B,WACI,OAAS,sBAAF,gB,sBAGX,WACI,OAA6B,GAAb,EAAT,0B,sEAnBX,uD,wEAAA,yD,mEAAA,oD,+DAAA,gD,2CAAA,2E,0CAAA,0E,qCAAA,qE,oCAAA,oE,uCAAA,uE,wJC7BA,+C,+BAEA,cACI,EAAQ,uBAAe,iBAAY,qBAAa,kB,iCAGpD,YAEI,OADA,EAAQ,uBAAe,iBAAY,qBAAa,iBACzC,uB,0HbVX,+C,wDAEA,kD,+DAE8B,WAAQ,e,sEACK,WAAQ,iDAAoB,O,sEAS1B,WAAQ,sBAAQ,Q,oEAE7D,W,O1gBUwF,uBAAA3tB,S,6E0gBRxF,W,O1gBQwF,gCAAAA,S,2F0gBLxF,W,O1gBKwF,gDAAAA,S,sE0gBAxF,W,O1gBAwF,yBAAAA,S,gC0gBGxF,mBAAoC,WAAsB,GACtD,cAAM,6CAAW,EACjB,2BAAoB,cAAS,EAC7B,6BAAsB,cAAS,M,oCAGnC,Y3mB2DO,Q2mB1DQ,6BAAsB,cAC7B,GAAI,Q,CACA,MAAa,EAAsB,GACnC,6BAAsB,cAAS,EAFnC,EAGI,OAHJ,EAKI,EANR,EASK,UAAI,I,yCAGb,YACQ,gCACA,wBAAmB,EAAU,IAEjC,4BAAmB,UAAI,I,0CAG3B,YACI,OAAwB,GAAjB,wBAA4B,GAAO,Y,uCAG9C,YAAsD,OAAoB,GAApB,2BAA+B,I,2CACrF,YAC0B,MAAtB,cAAsB,KAAtB,6BAAiC,IAAjC,EAA2C,K,oCAC/C,YAAkD,OAAM,GAAN,aAAiB,I,qCACnE,YAAkD,+CAAQ,IAAR,GAAiB,G,4BAEnE,WAEc,MADV,EAAc,KACJ,eAAV,6B,CACI,MAAQ,aAAM,GAAd,EnnBkKR,YAAIM,EmnBlKwB,GAExB,OAAO,G,oBAGX,YAA4C,M,KAuBtB,MALtB,GAAI,OAlBmD,E,CAkBnC,GAAO,EAAP,QACpB,IAAI,SAnBmD,EAmBnD,I,CAAc,GAAO,EAAP,QAClB,IAAI,kBApBmD,EAoB/B,Y,CAAY,GAAO,EAAP,QACpC,IApB6B,EAAzB,sCADmD,EACI,kC,CAoB3B,GAAO,EAAP,QAChC,GAAS,qBAtB8C,EAsBvB,c,CAAe,GAAO,EAAP,QACzB,qBAAtB,UAAc,EAAd,Q,CACI,IAAI,oCAAqB,GAAO,WAxBmB,EAwBC,6BAAqB,GAAO,Y,CAAY,GAAO,EAAP,QAC5F,IAAI,oCAAqB,GAAO,KAzBmB,EAyBL,6BAAqB,GAAO,M,CAAM,GAAO,EAAP,SAEpF,GAAO,Q,GA3BqC,U,sBAI5C,WAA+B,yB,sBAE/B,WACI,OAAuB,EAAhB,eAAQ,QAAqB,KAAQ,gBAAF,IAAgB,SAAnC,UAAwC,mBAC3D,SAAG,IAAM,KAAO,+BAAqB,EAAG,OAAO,cADY,O,8He3EnE,WAAgE,W,8KDAhE,YAA+C,iB,6BAC/C,YAAuD,cAAiB,I,mBACxE,WAAkC,qBAAU,I,yCAE5C,kBACI,EAAQ,eAAO,EAAQ,0BAAkB,gBAAY,K,iCAGzD,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,0BAAkB,gBAAY,EAAG,EAAQ,K,uFApB7D,0CAyBgC,eAE5B,cAEA,cAAgC,EAChC,wBAA6B,EAAe,OAIxC,4BAAe,IAiBvB,sBAQI,aAAqE,M,mEA7BrE,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,uGAcrC,YAAgD,iB,6BAChD,YAAyD,cAAkB,I,mBAC3E,WAAmC,sBAAW,I,yCAE9C,kBACI,EAAQ,eAAO,EAAQ,2BAAmB,gBAAY,K,iCAG1D,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,2BAAmB,gBAAY,EAAG,EAAQ,K,wFApB9D,0CAyBiC,eAE7B,cAEA,cAAiC,EACjC,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAQI,aAA6D,M,mEA5B7D,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,wGAarC,YAA8C,iB,6BAC9C,YAAqD,cAAgB,I,mBACrE,WAAiC,sBAAS,I,yCAE1C,kBACI,EAAQ,eAAO,EAAQ,yBAAiB,gBAAY,K,iCAGxD,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,yBAAiB,gBAAY,EAAG,EAAQ,K,sFApB5D,0CAyB+B,eAE3B,cAEA,cAA+B,EAC/B,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAQI,aAAiE,M,mEA5BjE,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,sGAarC,YAA+C,iB,6BAC/C,YAAuD,cAAiB,I,mBACxE,WAAkC,mBAAU,I,yCAE5C,kBACI,EAAQ,eAAO,EAAQ,0BAAkB,gBAAY,K,iCAGzD,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,0BAAkB,gBAAY,EAAG,EAAQ,K,uFApB7D,0CAyBgC,eAE5B,cAEA,cAAgC,EAChC,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAQI,aAAqE,M,mEA5BrE,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,uGAarC,YAAgD,iB,6BAChD,YAAyD,cAAkB,I,mBAC3E,WAAmC,wBAAW,I,yCAE9C,kBACI,EAAQ,eAAO,EAAQ,2BAAmB,gBAAY,K,iCAG1D,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,2BAAmB,gBAAY,EAAG,EAAQ,K,wFApB9D,0CAyBiC,eAE7B,cAEA,cAAiC,EACjC,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAQI,aAAyE,M,mEA5BzE,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,wGAarC,YAAiD,iB,6BACjD,YAA2D,cAAmB,I,mBAC9E,WAAoC,wBAAY,I,yCAEhD,kBACI,EAAQ,eAAO,EAAQ,4BAAoB,gBAAY,K,iCAG3D,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,4BAAoB,gBAAY,EAAG,EAAQ,K,yFApB/D,0CAyBkC,eAE9B,cAEA,cAAkC,EAClC,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAQI,aAAiE,M,mEA5BjE,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,yGAarC,YAA+C,iB,6BAC/C,YAAuD,cAAiB,I,mBACxE,WAAkC,mBAAU,I,yCAE5C,kBACI,EAAQ,eAAe,GAAR,EAAQ,0BAAkB,gBAAY,M,iCAGzD,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,0BAAkB,gBAAY,EAAG,EAAQ,K,uFApB7D,0CAyBgC,eAE5B,cAEA,cAAgC,EAChC,wBAA6B,EAAe,OAIxC,4BAAe,IAgBvB,sBAMI,aAA6E,M,mEA1B7E,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,uGAWrC,YAAkD,iB,6BAClD,YAA6D,cAAoB,I,mBACjF,WAAqC,sBAAa,I,yCAElD,kBACI,EAAQ,eAAO,EAAQ,6BAAqB,gBAAY,K,iCAG5D,gBACI,UAAU,EAAV,EAAkB,EAAlB,IACI,EAAQ,6BAAqB,gBAAY,EAAG,EAAQ,K,6FAlBhE,0CAuBmC,eAE/B,cAEA,cAAmC,EACnC,wBAA6B,EAAe,OAIxC,4BAAe,IErWiB,iBACpC,4BACA,sBAYJ,iBAEI,OAGJ,YAEsB,MADlB,EAAW,GAAoB,KAC/B,IAAkB,4B,CAAA,eACd,EAAwC,GAAvB,KAAU,aAE3B,GAAe,GAAX,EADgB,UAAS,GACqB,IAAoB,GAAX,EAAkB,GAAyB,GAClG,MAAM,EAIF,GAJ2B,oIAEV,EAFU,wBAEkC,GAAX,GAFvB,2HAVvC,CAAU,GACH,OAA0B,EAAY,GAkBjD,eAEI,mCAAoB,KAApB,qBAEJ,sBACiC,yBAAqB,OAAiB,cAAe,G,mEF0TlF,2C,IAAA,yC,4CAOA,YACQ,cAAO,OAAO,IACd,cAAgB,GAAP,cAA+B,GAAjB,EAA6C,EAAd,cAAO,OAAP,M,4BAG9D,YAEW,MADP,8BACA,eAAO,oCAAP,IAAqB,G,mBAGzB,WAAuB,OAAO,GAAP,cAAc,gB,6HEjXrC,+C,+CACA,yC,wEAEgC,WAAQ,Y,oCACxC,YAAkD,uB,qCAClD,YAAkD,uB,uCAClD,YAAsD,uB,0CACtD,YAAkE,uB,2CAClE,YAAmE,uB,sBACnE,WAAkC,6BAAsB,gBAAtB,K,qBAClC,WAA+B,MAAM,EAAsB,gD,mJA4B9B,yD,iCAAA,oE,+BAAA,sE,+EADjC,0CAGA,sBAEI,0BAA4C,OAA0B,iBAA1B,M,qEAA5C,+C,+BACA,cAAiE,EAAQ,sBAAc,I,iCACvF,YAAsD,SAAQ,iB,kFAJlE,0CAOA,sBAEI,0BAA4C,OAA0B,cAA1B,M,qEAA5C,+C,+BACA,cAA8D,EAAQ,mBAAW,I,iCACjF,YAAmD,SAAQ,c,+EAJ/D,0CAOA,sBAEI,0BAA4C,OAA0B,eAA1B,M,qEAA5C,+C,+BACA,cAA+D,EAAQ,oBAAY,I,iCACnF,YAAoD,SAAQ,e,gFAJhE,0CAOA,sBAEI,0BAA4C,OAA0B,aAA1B,M,qEAA5C,+C,+BACA,cAA6D,EAAQ,kBAAU,I,iCAC/E,YAAkD,SAAQ,a,8EAJ9D,0CAOA,sBAEI,0BAA4C,OAA0B,cAA1B,M,qEAA5C,+C,+BACA,cAA8D,EAAQ,mBAAW,I,iCACjF,YAAmD,SAAQ,c,+EAJ/D,0CAOA,sBAEI,0BAA4C,OAA0B,eAA1B,M,qEAA5C,+C,+BACA,cAA+D,EAAQ,oBAAY,I,iCACnF,YAAoD,SAAQ,e,gFAJhE,0CAOA,sBAEI,0BAA4C,OAA0B,gBAA1B,M,qEAA5C,+C,+BACA,cAAgE,EAAQ,qBAAa,I,iCACrF,YAAqD,SAAQ,gB,iFAJjE,0CAOA,sBAEI,0BAA4C,OAA0B,cAA1B,M,qEAA5C,+C,+BACA,cAA8D,EAAQ,mBAAW,I,iCACjF,YAAmD,SAAQ,c,+EAJ/D,0CAOA,sBAEI,0BAA4C,OAA0B,gBAA1B,M,qEAA5C,+C,+BACA,cAAgE,EAAQ,qBAAa,I,iCACrF,YAAqD,SAAQ,gB,uFAJjE,0CC3HA,cAyII,uBroBlDgD,IqoBmEpD,cAE0C,cAQ1C,cA+HI,wBroB5MgD,IqoB0NhD,qBAAmB,EASvB,cAE0C,cCrTO,iBAC7C,uBACA,yBA+CmC,iBASkF,QANrH,aAA0C,EAAe,GAGzD,0BAG4C,GAAsB,+BAAtB,SAAyE,oBAGrH,OAFI,kBAAQ,MAAO,EAAc,YAC7B,kBAAQ,QAAS,EAAgB,YACrC,KARiC,iBAAC,qBAAqB,uBAgBxB,iBAIuD,QADtF,aAAqC,EAAe,GACpD,0BAA4C,GAA2B,cAA3B,IAA0C,oBAGtF,OAFI,kBAAQ,QAAS,EAAc,YAC/B,kBAAQ,SAAU,EAAgB,YACtC,KASoC,mBAMoD,MALxF,qBACA,qBACA,qBAGA,0BAA4C,GAA2B,gBAA3B,IAA4C,mBAIxF,OAHI,kBAAQ,QAAS,gBAAY,YAC7B,kBAAQ,SAAU,gBAAY,YAC9B,kBAAQ,QAAS,gBAAY,YACjC,KCtGJ,eA+F+B,qBAK3B,cAJA,0BACA,4BACA,mCACA,kC,eClGsC,eAAC,kBCJ3C,iBACI,IAAc,MAAV,oBAAmB,MAAM,OAA0B,SAAQ,EAAR,kBAA6B,OACpF,OAAO,EAAI,GAGf,iBACI,IAAc,MAAV,oBAAmB,MAAM,OAA0B,SAAQ,EAAR,kBAA6B,OACpF,OAAO,EAAI,GAEf,eAEsE,MAApB,EAAzC,EAAL,cAAK,KAAL,EAAK,KAAL,EAA8C,kBAAoB,EAAZ,GAAR,GAAoB,WAApB,+BAElD,iBAAoG,OjoBP9BuW,EAAY,GioBSlF,iBAAmE,SAAO,mBAAW,GAErF,eACI,MAAM,GACF,2BAAyB,cAAzB,gNAMR,iBAKiC,MACe,EAHrC,E,IACG,MhCELkpE,GAAqB,EAArB,OgCDwB,EAArB,eAAqB,uBACrB,eAAwB,SAAY,EAAZ,EAAY,mBAAY,EAAZ,SAAZ,UAChB,K,SAGZ,OAPJ,SAWJ,eAAwE,iC,4EJtBhE,WAAQ,a,uCAEZ,cAEI,MAAM,GAAuB,8CAAoB,GAApB,kDAAwD,MAAxD,a,oCAEjC,YAAsD,MAAM,GAAuB,0B,qCACnF,cAAiE,+BAAkB,EAAK,I,sCACxF,cAAmE,+BAAkB,EAAK,I,uCAC1F,cAAqE,+BAAkB,EAAK,I,sCAC5F,cAAmE,+BAAkB,EAAK,I,uCAC1F,cAAqE,+BAAkB,EAAK,I,wCAC5F,cAAuE,+BAAkB,EAAK,I,yCAC9F,cAAyE,+BAAkB,EAAK,I,sCAChG,cAAmE,+BAAkB,EAAK,Q,wCAC1F,cAAuE,+BAAkB,EAAK,I,sCAE9F,gBAIU,+BAAkB,EAAK,I,wCAEjC,cACI,YAAa,iBAAb,M,kCAEJ,YACI,uCAAmB,cAAU,I,qCAIjC,cACI,MAAe,oBAAL,EAAY,GAEtB,OADA,mBAAQ,IACD,G,+BAGX,a,wBACA,WAAuC,4BAAiB,gB,mCACxD,YAAyD,iCAAoB,cAAU,I,gCACvF,YAAmD,8BAAiB,cAAU,I,iCAC9E,YAAqD,+BAAkB,cAAU,I,+BACjF,YAAiD,6BAAgB,cAAU,I,gCAC3E,YAAmD,8BAAiB,cAAU,I,iCAC9E,YAAqD,+BAAkB,cAAU,I,kCACjF,YAAuD,gCAAmB,cAAU,I,gCACpF,YAAmD,8BAAiB,cAAU,I,kCAC9E,YAAuD,gCAAmB,cAAU,I,gCAEpF,cAGU,8BAAiB,cAAU,EAAgB,I,oCAErD,YAA8E,a,kCAE9E,YACQ,uBroBgJiDzpE,WqoB/IjD,cAEJ,uBAAU,I,+BAGd,c,0CAKA,gBACI,iCAA+B,oBAAX,EAAkB,GAAQ,I,uCAElD,gBACI,8BAA4B,oBAAX,EAAkB,GAAQ,I,wCAE/C,gBACI,+BAA6B,oBAAX,EAAkB,GAAQ,I,sCAEhD,gBACI,6BAA2B,oBAAX,EAAkB,GAAQ,I,uCAE9C,gBACI,8BAA4B,oBAAX,EAAkB,GAAQ,I,wCAE/C,gBACI,+BAA6B,oBAAX,EAAkB,GAAQ,I,yCAEhD,gBACI,gCAA8B,oBAAX,EAAkB,GAAQ,I,uCAEjD,gBACI,8BAA4B,oBAAX,EAAkB,GAAQ,I,yCAE/C,gBACI,gCAA8B,oBAAX,EAAkB,GAAQ,I,yCAEjD,cAII,OAAO,gCAA8B,oBAAX,EAAkB,GAAQ,EAAW,6BAAqB,K,+CAGxF,kBAMQ,6BAAc,EAAY,IAC1B,qCAAwB,EAAY,I,uDAG5C,kBAOQ,6BAAc,EAAY,IAC1B,6CAAgC,EAAY,I,qEAKhD,WAAQ,OAAS,GAAT,2B,2EAER,WAAQ,OAAS,GAAT,2B,2BAEZ,YACI,uBAAS,UAAI,I,oBAGjB,WACI,GAAI,uBroBmEiDA,UqoBhEjD,MAAM,GAAuB,yCAHjC,OACI,uBAAS,iBAAkB,GAAT,0B,iGAQ1B,cAAiE,2BAAO,yBAAY,EAAM,K,4BAC1F,YAA+D,MAAZ,gCAAY,kCAAoB,GAAI,I,iCACvF,cAAmF,SAAW,uBAAe,I,iCAC7G,cACI,OpkBkHsD,IokBlHlD,EpkBkHwChT,OokBlHlB,EAAiB,EAAF,IAAc,G,kJAMvD,WAAQ,a,qCAIZ,YAEI,MAAM,GAAuB,0BAAG,MAAH,8C,2CAEjC,YAAgE,U,oCAChE,YAA0D,a,uCAE1D,YAA4D,6DAAkB,IAAlB,O,oCAC5D,YAAsD,4DAAkB,IAAlB,O,qCACtD,YAAwD,4DAAkB,IAAlB,O,mCACxD,YAAoD,4DAAkB,IAAlB,O,oCACpD,YAAsD,qDAAkB,GAAlB,e,qCACtD,YAAwD,4DAAkB,IAAlB,O,sCACxD,YAA0D,4DAAkB,IAAlB,O,oCAC1D,YAAsD,qDAAkB,IAAlB,O,sCACtD,YAA0D,4DAAkB,IAAlB,O,sCAC1D,cACI,4DAAkB,IAAlB,O,wCAEJ,cAA+F,YAAa,iBAAb,M,6CAE/F,cACI,4CAAwB,I,kCAK5B,YACI,uCAAmB,cAAU,I,+BAEjC,WAGqB,yCAAoB,OAAO,EAA5C,MAAiB,EACjB,OAAO,mCAAwB,I,wBAGnC,WAA4C,a,2BAE5C,WAA8C,sCAAoB,gB,wBAClE,WAAwC,mCAAiB,gB,yBACzD,WAA0C,oCAAkB,gB,uBAC5D,WAAsC,kCAAgB,gB,wBACtD,WAAwC,mCAAiB,gB,yBACzD,WAA0C,oCAAkB,gB,0BAC5D,WAA4C,qCAAmB,gB,wBAC/D,WAAwC,mCAAiB,gB,0BACzD,WAA4C,qCAAmB,gB,gCAE/D,YAAuE,qCAAiB,cAAU,I,oCAElG,YAA8E,a,kCAE9E,c,0CAIA,cACI,sCAA+B,oBAAX,EAAkB,K,uCAE1C,cACI,mCAA4B,oBAAX,EAAkB,K,wCAEvC,cACI,oCAA6B,oBAAX,EAAkB,K,sCAExC,cACI,kCAA2B,oBAAX,EAAkB,K,uCAEtC,cACI,mCAA4B,oBAAX,EAAkB,K,wCAEvC,cACI,oCAA6B,oBAAX,EAAkB,K,yCAExC,cACI,qCAA8B,oBAAX,EAAkB,K,uCAEzC,cACI,mCAA4B,oBAAX,EAAkB,K,yCAEvC,cACI,qCAA8B,oBAAX,EAAkB,K,yCAEzC,cAGa,uCAA8B,oBAAX,EAAkB,GAAQ,EAAW,6BAAqB,K,uDAE1F,kBAMI,+BAAoB,oBAAX,EAAkB,IAAQ,0BAAE,yCAAwB,EAAc,MAAxC,W,+DAEvC,kBAMI,+BAAoB,oBAAX,EAAkB,IAAQ,0BAC/B,OAAI,sBAAqB,kCACrB,EACA,GACG,kBAJwB,W,gCAOvC,cACI,mBAAQ,GACR,MAAQ,IAKR,OAJK,qBACD,cAEJ,qBAAO,EACA,G,qEAKP,WAAQ,OAAS,GAAT,4B,2EAER,WAAQ,OAAS,GAAT,4B,2BAEZ,YACI,wBAAS,UAAI,I,gCAGjB,YACI,EAAM,mBAAS,eAAO,0B,oBAK1B,WACI,MAAQ,wBAAS,iBAAkB,GAAT,0BAE1B,OADA,qBAAO,EACA,G,iGAOX,cAAiE,2BAAO,yBAAY,EAAM,K,4BAE1F,YAA+D,MAAZ,gCAAY,kCAAoB,GAAI,I,iCACvF,cAA6E,SAAK,uBAAe,I,iCACjG,cACI,OpkB/CsD,IokB+ClD,EpkB/CwCA,OokB+ClB,EAAiB,EAAF,IAAc,G,qGClT3D,cACI,MAAwB,EAAQ,uBAAe,iBAC/C,EAAkB,kCAA0B,gBAAY,EAAG,qBAAqB,mBAAN,IAC1E,EAAkB,kCAA0B,gBAAY,EAAG,uBAAuB,qBAAN,IAC5E,EAAkB,qBAAa,kB,iCAGnC,YA4BoB,MAAU,EA3B1B,EAAgB,EAAQ,uBAAe,iBACvC,GAAI,EAAU,qB,CACV,MAAU,EAAU,kCAA0B,gBAAY,EAAG,sBAC7D,EAAY,EAAU,kCAA0B,gBAAY,EAAG,wBAC/D,OAAO,sBAAS,EAAK,GAGzB,MAAgB,GAChB,EAAkB,G,EACR,O,CACA,MAAU,EAAU,2BAAmB,iBAA7C,U,KACI,EACI,Q,KAEJ,EACI,EAAM,EAAU,kCAA0B,gBAAY,EAAG,sBAD7D,M,KAGA,EACI,EAAQ,EAAU,kCAA0B,gBAAY,EAAG,wBAD/D,M,QAGQ,MAAM,GAAuB,kBAAiB,IAI9D,GADA,EAAU,qBAAa,iBACnB,IAAQ,GAAM,MAAM,GAAuB,4BAC/C,GAAI,IAAU,GAAM,MAAM,GAAuB,8BAEjD,OAAO,sBAAS,kCAAU,oC,qHASI,wC,gDAAqB,0C,oFAAvD,WAAkC,iB,wBAAlC,WAAuD,mB,0BAAvD,iCAAkC,sBAAqB,qB,sBAAvD,iBAAkC,qCAAqB,kCAAvD,K,sBAAA,0BAAuD,MAArB,+BAAqB,0B,oBAAvD,mHAAkC,0BAAqB,8B,qEAEvD,+C,2BAQoC,YAAQ,SAAK,K,6BACX,YAAQ,SAAK,O,8BACnD,cAA2D,cAAS,EAAK,I,4IAQzE,+C,2BAI+B,YAAQ,SAAK,O,6BACX,YAAQ,SAAK,Q,8BAE9C,cAAsD,WAAO,I,wIAW7D,+C,+BAMA,cACI,MAAwB,EAAQ,uBAAe,iBAC/C,EAAkB,kCAA0B,gBAAY,EAAG,mBAAa,EAAM,OAC9E,EAAkB,kCAA0B,gBAAY,EAAG,mBAAa,EAAM,QAC9E,EAAkB,kCAA0B,gBAAY,EAAG,mBAAa,EAAM,OAC9E,EAAkB,qBAAa,kB,iCAGnC,YACI,MAAgB,EAAQ,uBAAe,iBACvC,OAAI,EAAU,qBACH,0BAAmB,GAEvB,uBAAgB,I,kCAG3B,YACI,MAAQ,EAAU,kCAA0B,gBAAY,EAAG,oBAC3D,EAAQ,EAAU,kCAA0B,gBAAY,EAAG,oBAC3D,EAAQ,EAAU,kCAA0B,gBAAY,EAAG,oBAE3D,OADA,EAAU,qBAAa,iBAChB,MAAO,EAAG,EAAG,I,+BAGxB,YA0BkB,MAAQ,EAAQ,EAzB9B,EAAc,GACd,EAAc,GACd,EAAc,G,EACJ,O,CACA,MAAY,EAAU,2BAAmB,iBAA/C,U,KACI,EACI,Q,KAEJ,EACI,EAAI,EAAU,kCAA0B,gBAAY,EAAG,oBAD3D,M,KAGA,EACI,EAAI,EAAU,kCAA0B,gBAAY,EAAG,oBAD3D,M,KAGA,EACI,EAAI,EAAU,kCAA0B,gBAAY,EAAG,oBAD3D,M,QAGQ,MAAM,GAAuB,oBAAmB,IAIhE,GADA,EAAU,qBAAa,iBACnB,IAAM,GAAM,MAAM,GAAuB,8BAC7C,GAAI,IAAM,GAAM,MAAM,GAAuB,+BAC7C,GAAI,IAAM,GAAM,MAAM,GAAuB,8BAE7C,OAAO,MAAO,kCAAQ,kCAAQ,oC,6KCpDlC,cAEW,QADP,OAAW,GAAN,EAAmB,IACjB,wDAAqB,IAArB,sCAAqC,IAArC,WADoC,M,oCAI/C,cAEqB,QAGT,IAHS,EtoBuHQ,EsoBvHR,sDAA0B,KtoBuHlB,uBAAmB,UsoBvHe,GAA1C,KAAjB,MAAiB,wBACjB,OAAI,QAA2B,EAExB,OAAC,iEAAyB,IAAzB,QAAD,EAAyE,GAAzE,M,mCAGX,YACI,0DAAiB,GAAjB,Y,4BAEJ,YphBkDgB,UAAhB,IAAgB,EohBjDZ,wBtoB+OgF2b,QAAQ/I,WkH9L5E,a,CAAA,IohB/CJ,ExBtDgD,E5fqG5C,WohBjDgB,EphBiDHX,ElHiHmCjV,IsoBlKxB,EphBiDXiV,ElH8HmCvV,MsoB9K9C,qBACN,sBxBtDgD,WwBuDhD,ExBvDgD,W5fqG5D,IAAgB,EohB1CZ,0BtoBwOgFif,QAAQ/I,WkH9L5E,a,CAAA,iBohB1CoB,EphB0CP,ElHiHmC5V,IkHjHhE,IAAgB,EAAa,ElH8HmCN,MAgEoBif,QAAQ/I,WkH9L5E,a,CAAA,IohBvCA,IxB9D4C,E5fqG5C,WohBzCY,EphByCC,ElHiHmC5V,IsoB1JvB,EphByCZ,ElH8HmCN,MsoBtK1C,sBACN,sBACA,sBxB/D4C,WwBgE5C,ExBhE4C,Y5fqG5D,IAAgB,EohBhCZ,gCtoB8NgFif,QAAQ/I,WkH9L5E,a,CAAA,IohB/BqB,IphB+BrB,WohBhCwB,EphBgCX,ElHiHmC5V,IsoBjJb,EphBgCtB,ElH8HmCN,MsoB7J9C,6BAAmB,sBAA0B,iC,upB1BlF/D,sDACiC,UAAK,UAAS,EAAT,oCAAsD,MAD5F,G,8ECjCJ,YAMwD,OAAuB,GAAvB,GAAkC,I,mHAiF1F,YAyB8D,+BAAsB,O,osBEyBpF,YAII,cAAoB,I,yBAExB,YAII,cAAwB,I,yBAE5B,cAO4B,cAAwB,EAAe,I,sBAEnE,YAK4D,a,sBAE5D,YAK8D,a,sBAE9D,YAK8D,a,sBAE9D,YAKgE,a,qLEvJhE,c3mBhCI,G0DgRoDovB,GijB7N5C,G3mBjDJ,MAAM,E2mBiDyB,oC3mBjDQtsB,Y2mBkD3C,OAAO,GAAwB,EAAY,I,i3BCiK3C,0C,8sCuB7OJ,YAEmE,c,ikLjBoFnC,e,GACK,+B,GACK,mC,GACP,6B,GACO,mC,GACP,6B,GVlC2B,G,GoBxDD,G,GCK3B,IAC9B,KAAwB,MACxB,QAAoB,MACpB,KAAoB,MACpB,KAAwB,MACxB,KAAsB,MACtB,KAAsB,MACtB,KAAqB,MACrB,QAAoB,MACpB,KAAoB,MACpB,KAAkB,MAClB,KAAmB,MACnB,KAAsB,MACtB,KAAqB,MACrB,KAAoB,MACpB,KAAoB,MACpB,KAA0B,MAC1B,KAAuB,MACvB,gDAAoB,Q,GErBL,O,GC2CoC,OAAiB,KAAY,KAAY,KAAY,M,mctoBiD5G,iD,2P0ThGA,iC,ErT8uBA,2C,kRZwuPA,0C,EAAA,sC,EAAA,+C,8QYvtNA,gDAxTA,sD,EAAA,4C,Efp8CA,M,wDopBiGA,aACI,UAAiB,I,cCrGM,cAAC,eAW5B,oBhoB+9BA,+B,iKNyXA,oC,q3EqoBh2CI,cAAuD,MAAMgY,G,2FAgB7D,YACI,oBAAO,I,8BAGX,YACI,kBAAK,I,yBAGT,YACI,KAAAklE,SAAS,qBAAal/E,I,yBAG1B,YACI,kBAAKN,EAAEsC,a,2BAGX,YACI,KAAAk9E,SAAS,2BAAmB98E,I,4BAGhC,YACI,KAAA88E,SAAS,qBAAal/E,I,mFAO1B,YAAoC,uBAAC,EAAA8kD,O,wBAErC,YACI,uBAAC9kD,I,wBAGL,YACI,uBAAC48E,I,wBAGL,YACI,uBAACl9E,EAAEsC,a,iJC7DP,cAAiD,MAAM,EAAsB,aAAYm9E,EAAZ,+BAAuDjoB,EAAIkoB,U,0FAIxI,cACQ,iCAAAlf,EAAQ7Q,WAAR,UAAmB8vB,IACf,KAAAE,QAAQ,oBADZ,QAEK,KAAAA,QAAQ,cAAMF,EAAejf,I,wBAE1C,gBACIA,EAAQ7Q,WAAW,YAAI8vB,EAAe,KAAAE,QAAQ,eAAOF,EAAejgF,K,sFAKxE,cAAoE,OAAAA,G,2BACpE,cAAoE,OAAAA,G,2EAFxE,sCAKA,aAAwBogF,EAAA,UAAkB,KAQtB,qBAAC,UAAwB,aAAQ,UAAyB,SAAzD,iBAAgC,kBAS/B,qBAAC,IAAAC,MAAoB,aAAQ,IAAAC,MAAqB,SAAWF,EAAA,UAAmB,IAAAG,EAAeF,EAAWC,IAEhI,gBAA2D,OAAI,EAAML,EAAmB,GACxF,oB,6FAXI,cAAsE,OAAIjgF,EAAO,KAAAqgF,UAAe,KAAAC,Y,2BAChG,cACI,KADuEtgF,EACvE,KAAAqgF,WADiE,OACpD,EACb,KAFuErgF,EAEvE,KAAAsgF,YAFiE,OAEnD,EACN,MAAM,EAAyB,iBAAgBtgF,EAAhB,QAA2BigF,I,+JAQtE,cAAqE,OAAMO,EAANxgF,EAAmBigF,I,2BACxF,cAAqE,SAAAjgF,EAASigF,I,2EAFlF,sCAKA,aAAwBG,EAAA,UAAmB,KAUP,eAAC,iBAMC,eAAgCA,EAAA,UAAa,IAAAK,GAAYx1D,IAAxD,cAEvC,eAAoD,4BAAAjrB,EjVvDR,EiVuDqB,Q3kBsrCwB,c2kBtrCrCA,E3kBsrCY,G2kBtrCZ,M,CtoByrBzC,IA4BS,EA5BT,EAAY,IA4BnB,IAAgB,4B,CAAA,e2DjjB0C,I3DijBrB,E2DjjBW,Q3DijBD,EAAY,UAAI,GsoBrtBf,EtoBstBzC,OsoBttByC,oCAEpD,sB,wBAnBI,gBACQA,EACAghE,EAAQ7Q,WAAW,YAAI8vB,EAAeA,GAEtCjf,EAAQ7Q,WAAW,aAAO8vB,I,8FAMlC,cAA+D,OAAAjgF,EAAM0gF,W,4BACrE,cAA+D,uBAAAC,UAAA,UAAU3gF,IAAU,MAAM,EAAyB,iBAAgBA,EAAhB,QAA2BigF,GAA9E,U,4JAS/D,cAAyE,OAAMpU,EAAN7rE,EAAmB,M,4BAC5F,cAAyE,SAAA4gF,GAAgB5gF,K,2BACzF,cAAsD,OAAA+V,K,4XAH1D,0CAKA,cAA2BqqE,EAAA,UAAuB,MCxE/B,mBAAsC,aAAuB,kBAC5E,eAA2CS,EAC3C,uBAA6B,E,4DCInB,mBANd,aAMe,2BANf,2DAOI,kBAAI,OACJ,kBAAI,OADJ,6BACA,6BARJ,gCAaoB,mBADpB,aACqB,2BADrB,2DAEI,uBAAS,QACT,wBAAU,SACV,mBAAK,QAFL,6BACA,6BACA,6BAJJ,qCASgB,mBADhB,aACiB,2BADjB,2DAEI,qBAAO,UAAP,6BAFJ,2BAsDoB,mBADpB,aACqB,2BADrB,2DAEI,mBAAK,QACL,qBAAO,UACP,mBAAK,QACL,sBAAQ,WAHR,6BACA,6BACA,6BACA,6BALJ,0CAmD4B,mBAD5B,aAC6B,2BAD7B,2DAEI,gCAAkB,uBAClB,4CAA8B,qCAC9B,wBAAU,cAFV,6BACA,6BACA,6BAJJ,qCAS2B,mBAD3B,aAC4B,2BAD5B,2DAEI,kBAAI,OACJ,mBAAK,QACL,kBAAqD,OACrD,qBAAwD,UACxD,oBAAuD,SAJvD,6BACA,6BACA,6BACA,6BACA,6BANJ,+CAqBqB,mBADrB,aACsB,2BADtB,2DAEI,qBAAO,UACP,oBAAM,SACN,qBAAO,UAFP,6BACA,6BACA,6BAJJ,qCASsB,mBADtB,aACuB,2BADvB,2DAEI,sBAAQ,WACR,uBAAS,YACT,oBAAM,SAFN,6BACA,6BACA,6BAJJ,qCASsB,mBADtB,aACuB,2BADvB,2DAEI,gCAAkB,uBAClB,4CAA8B,qCAC9B,wBAAU,cAFV,6BACA,6BACA,6BAJJ,qCASqB,mBADrB,aACsB,2BADtB,2DAEI,kBAAI,OACJ,mBAAK,QACL,kBAAqD,OACrD,qBAAwD,UACxD,oBAAuD,SAJvD,6BACA,6BACA,6BACA,6BACA,6BANJ,+CA+BwB,mBADxB,aACyB,2BADzB,2DAEI,8BAAgB,qBAChB,yBAAW,eACX,2BAAa,iBAFb,6BACA,6BACA,6BAJJ,qCASoB,mBADpB,aACqB,2BADrB,2DAEI,qBAAO,UACP,uBAAS,YACT,oBAAM,SACN,mBAAK,QACL,uBAAS,YACT,4BAAc,kBACd,oBAAM,SACN,mBAAK,QACL,qBAAO,UACP,oBAAM,SACN,qBAAM,SACN,sBAAO,UACP,wBAAS,YACT,qBAAM,SACN,qBAAM,SACN,qBAAM,SACN,sBAAO,UACP,sBAAO,UACP,oBAAK,QACL,mBAAI,OACJ,oBAAK,QACL,mBAAI,OACJ,oBAAK,QAtBL,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BAxBJ,yIA6B2B,mBAD3B,aAC4B,2BAD5B,2DAEI,gCAAkB,uBAClB,4CAA8B,qCAC9B,wBAAU,cAFV,6BACA,6BACA,6BAJJ,qCAS0B,mBAD1B,aAC2B,2BAD3B,2DAEI,kBAAI,OACJ,mBAAK,QACL,kBAAqD,OACrD,qBAAwD,UACxD,oBAAuD,SAJvD,6BACA,6BACA,6BACA,6BACA,6BANJ,+CAqBwB,mBADxB,aACyB,2BADzB,2DAEI,kBAAI,OAAJ,6BAFJ,2BAuHuB,mBADvB,aACwB,2BADxB,2DAEI,mBAAK,QACL,mBAAK,QADL,6BACA,6BAHJ,gCAQkB,mBADlB,aACmB,2BADnB,2DAEI,kBAAI,OACJ,uBAAS,YACT,kBAAI,OACJ,uBAAS,YAHT,6BACA,6BACA,6BACA,6BALJ,0C,oaClYY,iBAAoFC,GAAA,UAAQ,IAAKd,EAAUe,EAAmB,MAAM,GAAM,GAAhG,0BC2HrC,iBAAoFD,GAAA,UAAQ,SAAUd,EAAUe,EAAmB,MAAM,GAAM,GAArG,0BCxC7C,iBAAoFD,GAAA,UAAQ,MAAOd,EAAUe,EAAmB,MAAM,GAAO,GAAnG,yBCjCzC,iBAAoFD,GAAA,UAAQ,OAAQd,EAAUe,EAAmB,MAAM,GAAO,GAApG,0BClD5C,iBAAoFD,GAAA,UAAQ,KAAMd,EAAUe,EAAmB,MAAM,GAAO,GAAlG,0BAU1C,iBAAoFD,GAAA,UAAQ,KAAMd,EAAUe,EAAmB,MAAM,GAAO,GAAlG,0BAK1C,iBAAoFD,GAAA,UAAQ,KAAMd,EAAUe,EAAmB,MAAM,GAAO,GAAlG,0BAK1C,iBAAoFD,GAAA,UAAQ,KAAMd,EAAUe,EAAmB,MAAM,GAAO,GAAlG,0BC6BzC,iBAAoFD,GAAA,UAAQ,MAAOd,EAAUe,EAAmB,MAAM,GAAM,GAAlG,0BAsCxC,iBAAoFD,GAAA,UAAQ,QAASd,EAAUe,EAAmB,MAAM,GAAM,GAApG,0BCvF5C,iBAAoFD,GAAA,UAAQ,MAAOd,EAAUe,EAAmB,MAAM,GAAO,GAAnG,0BC6EtC,iBAAoFD,GAAA,UAAQ,UAAWd,EAAUe,EAAmB,MAAM,GAAO,GAAvG,0BAkG7C,iBAAoFD,GAAA,UAAQ,OAAQd,EAAUe,EAAmB,MAAM,GAAM,GAAnG,0BCvLvC,yBAQmE,WAJ7E,UAAmC,MAHnC,yBACA,0BAEA,2BACA,2BACA,yBAEJ,0BAA0C,IAAAC,GAAcD,EAAmBpiF,MAAM,kBAAE,SAAAqhF,YCN5C,mBAAC,WAAa,mBAA2B,uBAChF,aAAoB,EACpB,WAAiB,EA4FjB,6BAAiB,6CCxFkB,eAAC,gBACpC,YzpBsFgD,IypBrFhD,kBAAwC,K,qIZLpC,WAAQ,sBAAQj3E,Q,qBAEpB,WAAkC,sBAAQuN,W,+BAE1C,YAAiD,sBAAQ,kBAAYhW,I,iCACrE,YAAqD,sBAAQ,oBAAcN,I,uBAC3E,YAAyC,gCAAQM,I,yBAEjD,cACI,IAEA,EAFc,yBAEI,YAAIA,EAAKN,GAK3B,OAJI,EAAA+hB,EAAO/hB,IACP,kBAAW,6BAAqB,WAAKM,EAAKN,GAGvC+hB,G,0BAGX,YAGmB,MAAR,EAAP,OAAO,OAAQ,EAFD,yBAEC,aAAOzhB,KAClB,kBAAW,6BAAqB,WAArB,EAA+B,MADvC,e,4BAMX,YACI,IAAI6e,EAAK7I,UAAT,CAEA,IvoB8tDY,EuoB9tDZ,EAAe,kBACf,EAAc,yBvoB6tDlB,IAAgB,EuoB3tDZ6I,EAAKF,QvoB2tDO,wB,CAAA,euoB1tDJ,EAAQ,cvoB0tDS,EuoB1tDH3e,IvoB0tDG,EuoB1tDIN,OvoB0tDJ,EuoB1tDgBA,QACxB,+BAAqB,WvoBytDb,EuoBztDoBM,IvoBytDpB,EuoBztD2BN,U,mBAKxD,W1hBkIgB,MAAhB,IAAgB,E0hBjIZ,e5oB+TgFif,QAAQ/I,WkH9L5E,a,CAAA,e0hBjIW,kBAAW,6BAAqB,W1hBiI9BX,E0hBjIqCjV,IAAK,MACnE,eAAUkrB,IACV,uBAAiB,G,2EAIjB,WAAQ,sBAAQvM,W,+BAEpB,WAA4D,eAAI,wBAG5D,uBAAiB,EACjB,eAAU,EAAc,iBAHxB,iBADwD,uB,+DASxD,WAAQ,gCAAkBgB,Q,iEAG1B,WAAQ,gCAAkBgL,U,kEAG1B,WAAQ,gCAAkBhM,W,mMChEnB,8C,yFANf,sB,IAAA,kB,IAAA,kB,QAAA,4C,oDAaqB,8C,+FADrB,sB,IAAA,uB,IAAA,wB,IAAA,mB,QAAA,kD,oDASiB,8C,2FADjB,sB,IAAA,qB,QAAA,8C,oDAsDqB,8C,+FADrB,sB,IAAA,mB,IAAA,qB,IAAA,mB,IAAA,sB,QAAA,kD,oDAmD6B,8C,uGAD7B,sB,IAAA,gC,IAAA,4C,IAAA,wB,QAAA,0D,oDAS4B,8C,sGAD5B,sB,IAAA,kB,IAAA,mB,IAAA,kB,IAAA,qB,IAAA,oB,QAAA,yD,oDAqBsB,8C,gGADtB,sB,IAAA,qB,IAAA,oB,IAAA,qB,QAAA,mD,oDASuB,8C,iGADvB,sB,IAAA,sB,IAAA,uB,IAAA,oB,QAAA,oD,oDASuB,8C,iGADvB,sB,IAAA,gC,IAAA,4C,IAAA,wB,QAAA,oD,oDASsB,8C,gGADtB,sB,IAAA,kB,IAAA,mB,IAAA,kB,IAAA,qB,IAAA,oB,QAAA,mD,oDA+ByB,8C,mGADzB,sB,IAAA,8B,IAAA,yB,IAAA,2B,QAAA,sD,oDASqB,8C,+FADrB,sB,IAAA,qB,IAAA,uB,IAAA,oB,IAAA,mB,IAAA,uB,IAAA,4B,IAAA,oB,IAAA,mB,IAAA,qB,IAAA,oB,IAAA,oB,IAAA,qB,IAAA,uB,IAAA,oB,IAAA,oB,IAAA,oB,IAAA,qB,IAAA,qB,IAAA,mB,IAAA,kB,IAAA,mB,IAAA,kB,IAAA,mB,QAAA,kD,oDA6B4B,8C,sGAD5B,sB,IAAA,gC,IAAA,4C,IAAA,wB,QAAA,yD,oDAS2B,8C,qGAD3B,sB,IAAA,kB,IAAA,mB,IAAA,kB,IAAA,qB,IAAA,oB,QAAA,wD,oDAqByB,8C,mGADzB,sB,IAAA,kB,QAAA,sD,oDAuHwB,8C,kGADxB,sB,IAAA,mB,IAAA,mB,QAAA,qD,oDAQmB,8C,6FADnB,sB,IAAA,kB,IAAA,uB,IAAA,kB,IAAA,uB,QAAA,gD,syDClYsD,6C,+DAE9C,WAAS,OAAAgiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,iEAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,+DAGzD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,8DAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,mEAGtD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,a,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,WAAYogB,M,+DAG3D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,4GCoGJ,6C,oEAEnD,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,c,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,YAAaogB,M,mEAG7D,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,a,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,WAAYogB,M,+DAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,qEAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,e,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,aAAcogB,M,sEAG7D,WAAS,OAAAoiE,GAAsD,YAAIxiF,KAAM,gB,IACzE,YAAewiF,GAAsD,YAAIxiF,KAAM,cAAeogB,M,qEAG9F,WAAS,OAAAqiE,GAAoD,YAAIziF,KAAM,e,IACvE,YAAeyiF,GAAoD,YAAIziF,KAAM,aAAcogB,M,yEAG3F,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,mB,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,iBAAkBogB,M,qEAGlE,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,e,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,aAAcogB,M,+DAG7D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,gEAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,U,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,QAASogB,M,+DAGxD,WAAS,OAAAsiE,GAAwC,YAAI1iF,KAAM,S,IAC3D,YAAe0iF,GAAwC,YAAI1iF,KAAM,OAAQogB,M,iHCnFzB,4C,8GCjCC,6C,wEAEjD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,mB,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,iBAAkBogB,M,iEAGjE,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,uEAGzD,WAAS,OAAAuiE,GAA6B,YAAI3iF,KAAM,iB,IAChD,YAAe2iF,GAA6B,YAAI3iF,KAAM,eAAgBogB,M,kEAGtE,WAAS,OAAAwiE,GAA0C,YAAI5iF,KAAM,Y,IAC7D,YAAe4iF,GAA0C,YAAI5iF,KAAM,UAAWogB,M,iEAG9E,WAAS,OAAAyiE,GAAwC,YAAI7iF,KAAM,W,IAC3D,YAAe6iF,GAAwC,YAAI7iF,KAAM,SAAUogB,M,+DAG3E,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,qEAGvD,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,e,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,aAAcogB,M,iEAG9D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,+GCjFV,6C,6GAUA,6C,6GAKA,6C,6GAKA,6C,6GC6BC,6C,8DAEhD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,8DAGtD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,iEAGtD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,gEAGzD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,U,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,QAASogB,M,iEAGxD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,gEAGzD,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,U,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,QAASogB,M,8GAeP,6C,+DAElD,WAAS,OAAA0iE,GAAsC,YAAI9iF,KAAM,S,IACzD,YAAe8iF,GAAsC,YAAI9iF,KAAM,OAAQogB,M,iEAGvE,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,8DAGzD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,oEAGtD,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,c,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,YAAaogB,M,uEAG7D,WAAS,OAAAuiE,GAA6B,YAAI3iF,KAAM,iB,IAChD,YAAe2iF,GAA6B,YAAI3iF,KAAM,eAAgBogB,M,kEAGtE,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,Y,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,UAAWogB,M,mEAG3D,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,a,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,WAAYogB,M,+DAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,qEAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,e,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,aAAcogB,M,sEAG7D,WAAS,OAAA2iE,GAAoD,YAAI/iF,KAAM,gB,IACvE,YAAe+iF,GAAoD,YAAI/iF,KAAM,cAAeogB,M,qEAG5F,WAAS,OAAA4iE,GAAkD,YAAIhjF,KAAM,e,IACrE,YAAegjF,GAAkD,YAAIhjF,KAAM,aAAcogB,M,yEAGzF,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,mB,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,iBAAkBogB,M,qEAGlE,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,e,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,aAAcogB,M,iEAG7D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,W,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,SAAUogB,M,+DAGzD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,8DAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,oEAGtD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,c,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,YAAaogB,M,oEAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,c,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,YAAaogB,M,8DAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,mEAGtD,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,a,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,WAAYogB,M,kEAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Y,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,UAAWogB,M,sEAG1D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,gB,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,cAAeogB,M,mEAG9D,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,a,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,WAAYogB,M,mEAG5D,WAAS,OAAAmiE,GAAuB,YAAIviF,KAAM,a,IAC1C,YAAeuiF,GAAuB,YAAIviF,KAAM,WAAYogB,M,+DAG5D,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,8DAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,Q,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,MAAOogB,M,+DAGtD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,gEAGvD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,U,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,QAASogB,M,gEAGxD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,U,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,QAASogB,M,gEAGxD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,U,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,QAASogB,M,+DAGxD,WAAS,OAAAkiE,GAAsB,YAAItiF,KAAM,S,IACzC,YAAesiF,GAAsB,YAAItiF,KAAM,OAAQogB,M,gHClNP,6C,8GC6EI,6C,kHAkGH,6C,8GCtLjD,4C,mDACA,6C,oDAEA,8C,oDACA,8C,mDACA,4C,qEAEJ,+C,4EAGI,WAAQ,YAAAoxC,WAAWyxB,oB,yMZwE3B,YAGiB,MAFTl+E,EAAsC,KAE7B,EAAA6c,EAAM,OAAO,EAAb,EAAb,IAAK,IAAL,EAAU,EAAV,QAAiC,E,CAC7B,MAAQA,EAAMxhB,GACdwb,EAAQgG,EAAMxhB,EAAI,EAAJ,GACL,MAALsT,GAAkB,MAALkI,IACC,MAAV7W,IACAA,E1oBgB8C,K0oBdlDA,EAAO,YAAI2O,EAAGkI,IAItB,OAAO,MAAA7W,IAAU,G,2ZCnCrB,YAA0C,SAAAg9E,W,6OcAtC,cAAeO,GAAsB,YAAI,EAAM,KAAMliE,I,o2JChDrD,cAAe,EAAAihE,SAAS,mBAAW,EAAM,SAAUjhE,I,gCAYnD,cAAe,EAAAihE,SAAS,mBAAW,EAAM,WAAYjhE,I,+BAIrD,cAAe,EAAAihE,SAAS,mBAAW,EAAM,UAAWjhE,I,iCAoFpD,cAAe,EAAAihE,SAAS,mBAAW,EAAM,YAAajhE,I,6sXhBVtByM,I,GiBlGqB,IAAAq2D,EAEW,IAAAC,GAER,IAAAC,E,GAEK,IAAAA,EAAiB,KAAM,O,GAE7B,IAAAC,E,GAEyC,IAAAC,GAAcC,I,GAEjB,IAAAD,GAAcE,I,GAEhC,IAAAF,GAAcG,IAEX,IAAAH,GAAcI,IAEtC,IAAAJ,GAAcK,IAEI,IAAAL,GAAcM,I,GAER,IAAAN,GAAcO,I,GAEjB,IAAAP,GAAcQ,IAEL,IAAAR,GAAcS,I,GAEL,IAAAT,GAAcU,I,GAEjB,IAAAV,GAAcW,I,GAEhC,IAAAX,GAAcY,IAEF,IAAAZ,GAAca,IAEtC,IAAAb,GAAcc,IAEO,IAAAd,GAAce,IAE7B,IAAAf,GAAcgB,IdnC3B,IppBguRrC,GopBhuRqC,GAAT,KppB49Q5C,GAAiCC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBjuRsCY,UppBiuR5B,I,GAEnC,GopB3tRgE,IppBwtRvD,GopBxtRuD,GAAT,KppBo9Q9D,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBztRwDY,UppBytR9C,I,GAEnC,GopBrtRoD,IppBktR3C,GopBltR2C,GAAT,KppB88QlD,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBntR4CY,UppBmtRlC,I,GAEnC,GopB7pRgE,IppB0pRvD,GopB1pRuD,GAAT,KppBs5Q9D,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB3pRwDY,UppB2pR9C,IopB1mRqD,IppBymR/E,GopBzmR+E,GAAT,KppBq2QtF,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB1mRgFY,UppB0mRtE,I,GAEnC,GopBlmRqF,IppB+lR5E,GopB/lR4E,GAAT,KppB21QnF,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBhmR6EY,UppBgmRnE,I,GAEnC,GopBhlRmE,IppB6kR1D,GopB7kR0D,GAAT,KppBy0QjE,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB9kR2DY,UppB8kRjD,I,GAEnC,GopBxkRsE,IppBqkR7D,GopBrkR6D,GAAT,KppBi0QpE,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBtkR8DY,UppBskRpD,I,GAEnC,GopBhkRsE,IppB6jR7D,GopB7jR6D,GAAT,KppByzQpE,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB9jR8DY,UppB8jRpD,I,GAEnC,GopBtjRmE,IppBmjR1D,GopBnjR0D,GAAT,KppB+yQjE,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBpjR2DY,UppBojRjD,I,GAEnC,GopB1hR4E,IppBuhRnE,GopBvhRmE,GAAT,KppBmxQ1E,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBxhRoEY,UppBwhR1D,I,GAEnC,GopB9/QgE,IppB2/QvD,GopB3/QuD,GAAT,KppBuvQ9D,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB5/QwDY,UppB4/Q9C,I,GAEnC,GopBt/QqF,IppBm/Q5E,GopBn/Q4E,GAAT,KppB+uQnF,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBp/Q6EY,UppBo/QnE,I,GAEnC,GopB5+QkF,IppBy+QzE,GopBz+QyE,GAAT,KppBquQhF,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB1+Q0EY,UppB0+QhE,I,GAEnC,GopB59Q4E,IppBy9QnE,GopBz9QmE,GAAT,KppBqtQ1E,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB19QoEY,UppB09Q1D,I,GAEnC,GopBr2QyE,IppBk2QhE,GopBl2QgE,GAAT,KppB8lQvE,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopBn2QiEY,UppBm2QvD,I,GAEnC,GopB51Q0D,IppBy1QjD,GopBz1QiD,GAAT,KppBqlQxD,GAAiCwC,EAAlBpD,EAAY,WAAoB,IACxC,GAAc,EAAoB,IAmQzC,6B,CAAgB,OAAhB,OACI,GAAY,YAAgB,GopB11QkDY,UppB01QxC,I,GAEnC,GenoRA,I+oB0CwC,GlpBs4ClC,GGh7CN,G+oBoCannD,EAAM,CACtB,QAAO,QACP,QAAO,QACP,QAAO,SACP,QAAQ,YAEgB,GAAd4pD,GAASljE,KlpB+zChB,GAAM,EAAa,KAAwB,KAuElD,IAAa,+B,CAAA,iBACT,GAAY,UkpBv4CqB,EAAH,ElpBu4CJ,KkpBv4C9B,IjqBvIa,GiqBuIb,GAAc,OAAiC,GAAAzT,ElpBw4CxC,KkpBx4CO,IAA2C,EjqB3IF,GAAa,EiqB6I9D42E,GAAU,EAAV,GjqBzIO,GAAAjwE,GAAM,OAAO,EAAb,EAAb,IAAK,IAAL,GAAU,EAAV,YACIA,GAAM,IiqBwIWgwE,GAAA,UAAY,EAAAl9E,EjqBxIb,M,OiqB2IW,SAAO,KACP,SAAO,IACjB,SAAO,I,oDKrJiCzH,EAAgB,QAGrD,SAASF,EAAS8lB,GAE7C,aAuCA,IAAIi/D,EAAU,QACVC,EAAY,YACZC,EAAW,OACXC,EAAY,UACZC,EAAe,sBACfC,EAAe,qBACfC,EAAgB,qBAChBC,EAAa,YACbC,EAAc,SACdC,EAAS,oBACTC,EAAY,sDACZC,EAAa,OACbC,EAAc,qBACdC,EAAc,aACdC,EAAc,gBACdC,EAAY,oBACZC,EAAW,gBACXC,EAAU,qBACVC,EAAW,UACXC,EAAY,iBACZC,EAAa,qBAEbC,EAAc,kBACdC,EAAc,eACdC,EAAU,eACVC,EAAY,8BAEZC,EAAe,mCACfC,EAAY,sBAGZC,EAAS,WACTC,EAAM,QACNC,EAAK,OAGLC,EAAY,GACZC,EAAc,IACdC,EAAa,IACbC,EAAkB,GAClBC,EAAmB,GAGnBC,EAAU,GACVC,EAAW,GAGXC,EAAQ,GAERC,EAAO,GAEPC,EAAO,GACPC,EAAQ,GACRC,EAAQ,GAGRC,EAAc,GAmBdC,EAAS,EACTv2D,EAAO,EACPtL,EAAU,EAEV8hE,EAAU,EACV7uE,EAAS,EACT8uE,EAAS,EACTC,EAAW,EACXC,EAAY,EACZC,EAAW,EAGXlzE,MAGAmzE,MACAC,GAAU,EACVC,GAAS,KAWTC,GAAQ,EAGRC,GAAQ,EACRpmF,GAAM,GAGNqmF,GAAY,GACZC,GAAS,GAYb,SAASC,GAAS5L,EAAQ3gE,EAAS6uD,EAAMnd,EAAI86B,GAmC5C,IAlCA,IA8BIhe,EACAplE,EA/BAqjF,EAAU,EACVC,EAAU,EACVC,EAAc,EACdC,EAAQ,EAERtvE,EAAQ,EACRkZ,EAAS,EACT5pB,EAAO,EACPkjB,EAAO,EACP+8D,EAAQ,EACRC,EAAO,EAEPC,EAAU,EACVhtE,EAAU,EACVitE,EAAS,EACTC,EAAS,EACTC,EAAQ,EACRjhB,EAAS,EACTkhB,EAAS,EACTC,GAAS,EACTpkF,GAAS,EACTqkF,GAAMxe,EAAK7lE,OACXskF,GAAMD,GAAM,EAEZzjE,GAAO,GACPkM,GAAQ,GACR4rD,GAAQ,GACRt7C,GAAM,GACN48B,GAAW,GACXuqB,GAAO,GAKJL,EAAQG,IAAK,CAiBnB,GAhBAzgF,EAAOiiE,EAAKhiE,WAAWqgF,GAGnBA,IAAUI,IAETZ,EAAUE,EAAQD,EAAcF,IAAY,IAC/B,IAAZC,IACH9/E,EAAO8/E,IAAYjB,EAAcP,EAAUO,GAG5CmB,EAAQD,EAAcF,EAAU,EAChCY,KACAC,MAIEZ,EAAUE,EAAQD,EAAcF,IAAY,EAAG,CAElD,GAAIS,IAAUI,KACTrhB,EAAS,IACZn2C,GAAQA,GAAM5K,QAAQ89D,EAAW,KAG9BlzD,GAAMmrB,OAAOj4C,OAAS,GAAG,CAC5B,OAAQ4D,GACP,KAAKw+E,EACL,KA5II,EA6IJ,KAAKP,EACL,KAAKM,EACL,KAAKD,EACJ,MAED,QACCp1D,IAAS+4C,EAAKzgE,OAAO8+E,GAIvBtgF,EAAOi+E,EAKT,GAAe,IAAXsC,EACH,OAAQvgF,GAEP,KAAKm+E,EACL,KAAKD,EACL,KAAKD,EACL,KAxJa,GAyJb,KA1Ja,GA2Jb,KAAKG,EACL,KAAKC,EACL,KAAKM,EACJ4B,EAAS,EAGV,KA1KK,EA2KL,KAAKhC,EACL,KAAKD,EACL,KAAKE,EACJ,MAGD,QAOC,IANA+B,EAAS,EACTnkF,GAASkkF,EACT5vE,EAAQ1Q,EACRsgF,IACAtgF,EAAOi+E,EAEA7hF,GAASqkF,IACf,OAAQxe,EAAKhiE,WAAW7D,OACvB,KAAKkiF,EACL,KAAKC,EACL,KAAKN,IACFqC,EACFtgF,EAAO0Q,EACPtU,GAASqkF,GACT,MAED,KAAK7B,EACAvf,EAAS,MACVihB,EACFtgF,EAAO0Q,GAGT,KAAKytE,EACJ/hF,GAASqkF,IASf,OAAQzgF,GACP,KAAKm+E,EAMJ,IAJAztE,GADAwY,GAAQA,GAAMmrB,QACAp0C,WAAW,GACzBkgF,EAAU,EACV/jF,KAAWkkF,EAEJA,EAAQG,IAAK,CACnB,OAAQzgF,EAAOiiE,EAAKhiE,WAAWqgF,IAC9B,KAAKnC,EACJgC,IACA,MAED,KAAKjC,EACJiC,IACA,MAED,KAAKtB,EACJ,OAAQj1D,EAASq4C,EAAKhiE,WAAWqgF,EAAQ,IAExC,KAAK5B,EACL,KAAKG,EACJyB,EAAQM,GAAUh3D,EAAQ02D,EAAOI,GAAKze,GAGxC,MAGD,KAlPW,GAmPVjiE,IAGD,KAAKo+E,EACJp+E,IAID,KA7OW,GA8OX,KA/OW,GAgPV,KAAOsgF,IAAUI,IACZze,EAAKhiE,WAAWqgF,KAAWtgF,KAOlC,GAAgB,IAAZmgF,EACH,MAGDG,IASD,OANAxL,GAAQ7S,EAAKxgE,UAAUrF,GAAQkkF,GAzPzB,IA2PF5vE,IACHA,GAASwY,GAAQA,GAAM5K,QAAQ69D,EAAS,IAAI9nC,QAAQp0C,WAAW,IAGxDyQ,GAEP,KA/QG,GAsRF,OANI2uD,EAAS,IACZn2C,GAAQA,GAAM5K,QAAQ89D,EAAW,KAGlCxyD,EAASV,GAAMjpB,WAAW,IAGzB,KA7PO,IA8PP,KApQI,IAqQJ,KApQO,IAqQP,KAAKw+E,EACJ7c,EAAWxuD,EACX,MAED,QACCwuD,EAAW31D,GA0Bb,GArBA7P,IADA04E,GAAQ6K,GAAQvsE,EAASwuD,EAAUkT,GAAOlrD,EAAQg2D,EAAM,IACzCxjF,OAGX+iF,EAAW,GAAgB,IAAX/iF,KACnBA,GAAS8sB,GAAM9sB,QAIZijF,GAAU,IAEb7iF,EAASqkF,GAxPL,EAwPkB/L,GADtBlT,EAAWkf,GAAO70E,GAAOid,GAAOs3D,IACOptE,EAASmV,EAAMu2D,EAAQ1iF,GAAQwtB,EAAQg2D,EAAO96B,GACrF57B,GAAQ04C,EAAS3lE,KAAK,aAElBO,GAC+C,KAA7CJ,IAAU04E,GAAQt4E,EAAO63C,QAAQj4C,UACrCwtB,EAAS,EACTkrD,GAAQ,KAKP14E,GAAS,EACZ,OAAQwtB,GACP,KAtSM,IAuSLV,GAAQA,GAAM5K,QAAQk/D,EAAauD,IAEpC,KApSM,IAqSN,KA3SG,IA4SH,KAAKtC,EACJ3J,GAAQ5rD,GAAQ,IAAM4rD,GAAQ,IAC9B,MAED,KAjTM,IAmTLA,IADA5rD,GAAQA,GAAM5K,QAAQy+D,EAAa,SAAWyC,GAAQ,EAAIpmF,GAAM,MAChD,IAAM07E,GAAQ,IAG7BA,GADc,IAAX5kE,GAA4B,IAAXA,GAAgB8wE,GAAO,IAAIlM,GAAO,GAC9C,IAAMgJ,EAAShJ,GAAQ,IAAMA,GAE7B,IAAMA,GAEf,MAED,QACCA,GAAQ5rD,GAAQ4rD,GArTf,MAuTGhwB,IACMtrB,IAAOs7C,GAAhBA,GAAuB,SAK1BA,GAAQ,GAGT,MAGD,QACCA,GAAQ6K,GAAQvsE,EAAS0tE,GAAO1tE,EAAS8V,GAAOs3D,IAAS1L,GAAOhwB,EAAI86B,EAAM,GAI5ExpB,IAAY0e,GAGZ3hE,EAAU,EACVotE,EAAS,EACTF,EAAS,EACThhB,EAAS,EACTmhB,GAAS,EACTJ,EAAS,EACTl3D,GAAQ,GACR4rD,GAAQ,GACR90E,EAAOiiE,EAAKhiE,aAAaqgF,GACzB,MAED,KAAKpC,EACL,KAAKD,EAGJ,IAAK7hF,IAFL8sB,IAASm2C,EAAS,EAAIn2C,GAAM5K,QAAQ89D,EAAW,IAAMlzD,IAAOmrB,QAExCj4C,QAAU,EAuB7B,OArBe,IAAXikF,KACH3vE,EAAQwY,GAAMjpB,WAAW,MAGVw+E,GAAQ/tE,EAAQ,IAAMA,EAAQ,OAC5CtU,IAAU8sB,GAAQA,GAAM5K,QAAQ,IAAK,MAAMliB,QAKzCijF,GAAU,QACb,KAAK7iF,EAASqkF,GA9UT,EA8UsB33D,GAAO9V,EAAS2gE,EAAQxrD,EAAMu2D,EAAQtlD,GAAIp9B,OAAQ0oD,EAAI86B,EAAO96B,KACrC,KAA7C1oD,IAAU8sB,GAAQ1sB,EAAO63C,QAAQj4C,UACrC8sB,GAAQ,QAKXxY,EAAQwY,GAAMjpB,WAAW,GACzB2pB,EAASV,GAAMjpB,WAAW,GAElByQ,GACP,KA/XI,EAgYH,MAED,KAhZE,GAiZD,GAzXK,MAyXDkZ,GAxXE,KAwXmBA,EAAoB,CAC5C+2D,IAAQz3D,GAAQ+4C,EAAKzgE,OAAO8+E,GAC5B,MAGF,QACC,GAAIp3D,GAAMjpB,WAAW7D,GAAO,KAAOwiF,EAClC,MAGDplD,IAAOhgC,GAAS0vB,GAAOxY,EAAOkZ,EAAQV,GAAMjpB,WAAW,IAM1DkT,EAAU,EACVotE,EAAS,EACTF,EAAS,EACThhB,EAAS,EACTmhB,GAAS,EACTt3D,GAAQ,GACRlpB,EAAOiiE,EAAKhiE,aAAaqgF,IAO5B,OAAQtgF,GACP,KAAKu+E,EACL,KAAKD,EAEJ,GAAIwB,EAAUE,EAAQD,EAAcF,EAAUX,IAAc,EAG3D,OAAQgB,GACP,KAAK7B,EACL,KA/aY,GAgbZ,KA/aY,GAgbZ,KAzbG,GA0bH,KA7aM,IA8aN,KAhbY,GAibZ,KAAKK,EACL,KAjbK,GAkbL,KAAKG,EACL,KAAKJ,EACL,KAAKG,EACL,KAAKD,EACL,KAAKV,EACL,KAAKE,EACL,KAAKD,EACJ,MAED,QAEKmC,EAAS,IACZE,EAAS,GAOTT,IAAYjB,EACfiB,EAAU,EACAf,EAAU5rE,IAAY,GAhctB,MAgc2B2xC,GAAmB57B,GAAM9sB,OAAS,IACvEijE,EAAS,EACTn2C,IAAS,MAINm2D,GAAUE,GAAQ,GACrBsB,GAvaO,EAuaM33D,GAAO9V,EAAS2gE,EAAQxrD,EAAMu2D,EAAQtlD,GAAIp9B,OAAQ0oD,EAAI86B,EAAO96B,GAI3Eg6B,EAAS,EACTv2D,IACA,MAED,KAAK01D,EACL,KAAKC,EACJ,GAAI4B,EAAUE,EAAQD,EAAcF,IAAY,EAAG,CAClDf,IACA,MAGF,QAQC,OANAA,IAGA9hE,GAAOilD,EAAKzgE,OAAO8+E,GAGXtgF,GACP,KAnfK,EAofL,KAAKw+E,EACJ,GAAIwB,EAAQH,EAAUC,IAAY,EACjC,OAAQ58D,GACP,KAAKy7D,EACL,KAAKC,EACL,KAzfE,EA0fF,KAAKJ,EACJxhE,GAAO,GACP,MAED,QACKhd,IAASw+E,IACZxhE,GAAO,KAKX,MAGD,KAzfM,EA0fLA,GAAO,MACP,MAED,KA5fU,GA6fTA,GAAO,MACP,MAED,KA/fa,GAggBZA,GAAO,MACP,MAGD,KAlhBK,GAohBAgjE,EAAQF,EAAUD,IAAY,GAAKd,EAAU,IAChDyB,GAAS,EACTnhB,EAAS,EACTriD,GAAO,KAAOA,IAEf,MAID,KAAK,IACJ,GAAIgjE,EAAQF,EAAUD,EAAU5iE,IAAY,GAAKojE,EAAS,EACzD,OAAQC,EAAQD,GAEf,KAAK,EA7gBK,MA8gBLn9D,GAAwB++C,EAAKhiE,WAAWqgF,EAAM,KAAO1B,IACxD3hE,EAAUiG,GAIZ,KAAK,EAlhBE,MAmhBF+8D,IACHhjE,EAAUgjE,GAKd,MAGD,KAAKrB,EACAoB,EAAQF,EAAUD,IAAY,IACjCQ,EAASC,GAEV,MAGD,KAAK3B,EACAmB,EAAUC,EAAcC,EAAQH,IAAY,IAC/CxgB,EAAS,EACTriD,IAAQ,MAET,MAGD,KAzjBa,GA0jBb,KA3jBa,GA4jBI,IAAZ8iE,IACHE,EAAQA,IAAUhgF,EAAO,EAAe,IAAVggF,EAAchgF,EAAOggF,GAEpD,MAGD,KA/kBa,GAglBRA,EAAQF,EAAUC,IAAgB,GACrCF,IAED,MAED,KAplBc,GAqlBTG,EAAQF,EAAUC,IAAgB,GACrCF,IAED,MAGD,KAAKxB,EACA2B,EAAQF,EAAUD,IAAY,GACjCE,IAED,MAED,KAAK3B,EACJ,GAAI4B,EAAQF,EAAUD,IAAY,EAAG,CACpC,GAAgB,IAAZ1sE,EACH,OAAa,EAAL+P,EAAe,EAAN+8D,GAEhB,KAAK,IACJ,MAGD,QACCE,EAAU,EACVhtE,EAAU,EAKb4sE,IAED,MAED,KAjnBI,GAknBCD,EAAUC,EAAcC,EAAQH,EAAUQ,EAASD,IAAW,IACjEA,EAAS,GAEV,MAGD,KAAK1B,EACL,KAAKG,EACJ,GAAImB,EAAQH,EAAUE,EAAc,EACnC,MAGD,OAAQD,GAEP,KAAK,EACJ,OAAa,EAAL9/E,EAAkC,EAAzBiiE,EAAKhiE,WAAWqgF,EAAM,IAEtC,KAAK,IACJR,EAAUjB,EACV,MAGD,KAAK,IACJziF,GAASkkF,EACTR,EAAUpB,EAIZ,MAGD,KAAKA,EACA1+E,IAAS6+E,GAAe37D,IAASw7D,GAAQtiF,GAAS,IAAMkkF,IAEzB,KAA9Bre,EAAKhiE,WAAW7D,GAAO,KAC1Bo9B,IAAOyoC,EAAKxgE,UAAUrF,GAAQkkF,EAAM,IAErCtjE,GAAO,GACP8iE,EAAU,IAQf,GAAgB,IAAZA,EAAe,CAGlB,GAAIf,EAAUiB,EAAQH,EAAUO,IAAW,GAhpBjC,MAgpBsCt7B,GAAmB9kD,IAASi+E,EAC3E,OAAQj+E,GACP,KAAK2+E,EACL,KAzpBK,IA0pBL,KA5pBW,GA6pBX,KA5pBI,GA6pBJ,KAAKN,EACL,KAAKD,EACJ,GAAgB,IAAZjrE,EAAe,CAElB,OAAQ+P,GACP,KA/qBA,EAgrBA,KAAKs7D,EACL,KAAKF,EACL,KAAKC,EACJvhE,IAAc,KACd,MAED,QACCA,GAAO,KAAOA,IAAQhd,IAAS2+E,EAAQ,GAAK,MAG9Ctf,EAAS,OAGT,OAAQr/D,GACP,KAAKo+E,EAEAiC,EAAS,IAAMC,GAAkB,MAATp9D,IAC3Bm9D,EAAS,GAEVltE,IAAYgtE,EACZ,MAED,KAAK9B,EAC0B,IAAzBlrE,IAAYgtE,KAChB9gB,EAAS,EACTriD,IAAQ,MAMZ,MAED,KAjtBG,EAktBH,KAAKwhE,EACJ,OAAQt7D,GACP,KArsBE,EAssBF,KAAKi7D,EACL,KAAKD,EACL,KAAKD,EACL,KAAKU,EACL,KAzsBM,GA0sBN,KA1tBC,EA2tBD,KAAKH,EACL,KAAKF,EACL,KAAKC,EACJ,MAED,QAEiB,IAAZprE,IACHksD,EAAS,EACTriD,IAAQ,OASdkM,IAASlM,GAGLhd,IAASw+E,GAhvBR,IAgvBiBx+E,IACrBkgF,EAAOlgF,IAOXigF,EAAQ/8D,EACRA,EAAOljB,EAGPsgF,IAcD,GAXAlkF,GAASo9B,GAAIp9B,OAGR+iF,EAAW,GACC,IAAX/iF,IAAoC,IAApBg6D,GAASh6D,QAAuC,IAAtBgX,EAAQ,GAAGhX,QAAkB,IA9uBlE,MA+uBJ0oD,GAAoC,IAAnB1xC,EAAQhX,SAAiB2iF,EAAU,EAAIU,GAAYC,MAAYtsE,EAAQ,MAC5FhX,GAASgX,EAAQnX,KAAK,KAAKG,OAAS,GAKnCA,GAAS,EAAG,CAKf,GAHAwlE,EAAuB,IAAZmd,GAxvBE,MAwvBej6B,EAue9B,SAAkB1xC,GACjB,IAAK,IAA8D0mB,EAASzrB,EAAnExW,EAAI,EAAGuE,EAASgX,EAAQhX,OAAQwlE,EAAWpnE,MAAM4B,GAA2BvE,EAAIuE,IAAUvE,EAAG,CAKrG,IAHA,IAAIkY,EAAWqD,EAAQvb,GAAGyzC,MAAMoxC,GAC5BljD,EAAM,GAED9pB,EAAI,EAAG7N,EAAO,EAAGqhB,EAAO,EAAGljB,EAAO,EAAGlI,EAAIiY,EAAS3T,OAAQsT,EAAI5X,IAAK4X,EAE3E,KAAgD,KAA3C7N,GAAQwM,EAAU0B,EAASL,IAAItT,SAAiBtE,EAAI,GAAzD,CAQA,GAJAorB,EAAOsW,EAAIv5B,WAAWu5B,EAAIp9B,OAAO,GACjC4D,EAAOqO,EAAQpO,WAAW,GAC1B65B,EAAU,GAEA,IAANpqB,EAEH,OAAQwT,GACP,KAAKw7D,EACL,KAzvCO,IA0vCP,KA5vCa,GA6vCb,KA5vCM,GA6vCN,KAAKF,EACL,KAAKJ,EACJ,MAED,QACCtkD,EAAU,IAKb,OAAQ95B,GACP,KAlxCM,GAmxCLqO,EAAUyrB,EAAU2lD,GAErB,KA1wCQ,IA2wCR,KA7wCc,GA8wCd,KA7wCO,GA8wCP,KAAKjB,EACL,KAAKH,EACL,KAAKD,EACJ,MAED,KApyCc,GAqyCb/vE,EAAUyrB,EAAUzrB,EAAUoxE,GAC9B,MAED,KAAKb,EACJ,OAA8B,EAAtBvwE,EAAQpO,WAAW,GAA6B,EAAtBoO,EAAQpO,WAAW,IAEpD,KAAK,IACJ,GAAI++E,EAAS,EAAG,CACf3wE,EAAUyrB,EAAUzrB,EAAQ5M,UAAU,EAAGI,EAAO,GAChD,MAIF,SACK6N,EAAI,GAAKK,EAASL,EAAE,GAAGtT,OAAS,KACnCiS,EAAUyrB,EAAU2lD,GAAYpxE,GAInC,MAED,KAAKswE,EACJ7kD,EAAU,GAEX,QAEEzrB,EADGxM,EAAO,GAAKwM,EAAQ3M,QAAQ,KAAO,EAC5Bo4B,EAAUzrB,EAAQiQ,QAAQg/D,EAAW,KAAOmC,GAAY,MAExD3lD,EAAUzrB,EAAUoxE,GAKjCjmD,GAAOnrB,EAGRuzD,EAAS/pE,GAAK2hC,EAAIlb,QAAQ89D,EAAW,IAAI/nC,OAG1C,OAAOutB,EArFR,CAvewDxuD,GAAWA,EAG7DisE,GAAU,QAGb,KAFA7iF,EAASqkF,GA1tBA,EA0tBarnD,GAAKooC,EAAUmS,EAAQxrD,EAAMu2D,EAAQ1iF,GAAQ0oD,EAAI86B,EAAO96B,KAE3B,KAAzBtrB,GAAMh9B,GAAQJ,OACvC,OAAOukF,GAAOnnD,GAAM48B,GAMtB,GAFA58B,GAAMooC,EAAS3lE,KAAK,KAAO,IAAMu9B,GAAM,IAEnCtpB,EAAO+M,GAAY,EAAG,CAIzB,OAHe,IAAX/M,GAAiB8wE,GAAOxnD,GAAK,KAChCvc,EAAU,GAEHA,GAEP,KAvwBW,IAwwBVuc,GAAMA,GAAIlb,QAAQ2+D,EAAa,YAAczjD,GAC7C,MAGD,KA7wBc,IA8wBbA,GACCA,GAAIlb,QAAQ0+D,EAAa,KAAOc,EAAS,YACzCtkD,GAAIlb,QAAQ0+D,EAAa,aACzBxjD,GAAIlb,QAAQ0+D,EAAa,iBAAyBxjD,GAMrDvc,EAAU,GAIZ,OAAO0jE,GAAOnnD,GAAM48B,GAWrB,SAAS0qB,GAAQ/M,EAAQ3gE,EAASotE,GACjC,IAAIS,EAAY7tE,EAAQihC,OAAO/I,MAAMqxC,GACjCnjD,EAAMynD,EAEN7kF,EAAS6kF,EAAU7kF,OACnBtE,EAAIi8E,EAAO33E,OAEf,OAAQtE,GAEP,KAAK,EACL,KAAK,EACJ,IAAK,IAAID,EAAI,EAAG+pE,EAAiB,IAAN9pE,EAAU,GAAKi8E,EAAO,GAAK,IAAKl8E,EAAIuE,IAAUvE,EACxE2hC,EAAI3hC,GAAKqpF,GAAMtf,EAAUpoC,EAAI3hC,GAAI2oF,EAAQ1oF,GAAGu8C,OAE7C,MAGD,QACUx8C,EAAI,EAAR,IAAW6X,EAAI,EAApB,IAAuB8pB,KAAU3hC,EAAIuE,IAAUvE,EAC9C,IAAK,IAAIsT,EAAI,EAAGA,EAAIrT,IAAKqT,EACxBquB,EAAI9pB,KAAOwxE,GAAMnN,EAAO5oE,GAAK,IAAK81E,EAAUppF,GAAI2oF,EAAQ1oF,GAAGu8C,OAM/D,OAAO7a,EAYR,SAAS0nD,GAAOnN,EAAQ3gE,EAASotE,EAAQ5jB,GACxC,IAAIgF,EAAWxuD,EACXpT,EAAO4hE,EAAS3hE,WAAW,GAO/B,OAJID,EAAO,KACVA,GAAQ4hE,EAAWA,EAASvtB,QAAQp0C,WAAW,IAGxCD,GAEP,KA32BQ,GA42BP,OAAQ++E,EAAUniB,GACjB,KAAK,EACL,KAAK,EACJ,GAA6B,IAAzBmX,EAAO1/B,OAAOj4C,OACjB,MAGF,QACC,OAAOwlE,EAAStjD,QAAQs+D,EAAQ,KAAK7I,EAAO1/B,QAG9C,MAGD,KAAKuqC,EACJ,OAAQhd,EAAS3hE,WAAW,IAE3B,KAAK,IACJ,GAAI++E,EAAS,GAAKD,EAAU,EAC3B,OAAOnd,EAAStjD,QAAQu+D,EAAW,MAAMv+D,QAAQs+D,EAAQ,KAAK8C,IAE/D,MAED,QAEC,OAAO3L,EAAO1/B,OAASutB,EAAStjD,QAAQs+D,EAAQ,KAAK7I,EAAO1/B,QAI/D,QAEC,GAAImsC,EAAOzB,EAAU,GAAKnd,EAASlgE,QAAQ,MAAQ,EAClD,OAAOkgE,EAAStjD,QAAQs+D,GAAS7I,EAAO9zE,WAAW,KAAO2+E,EAAQ,GAAK,MAAM7K,EAAO1/B,QAKvF,OAAO0/B,EAASnS,EAYjB,SAASpoE,GAAU0kB,EAAOxN,EAAOkZ,EAAQmD,GACxC,IAGI9vB,EAHAqR,EAAQ,EACRkrB,EAAMtb,EAAQ,IACd3f,EAAc,EAANmS,EAAmB,EAAPkZ,EAAmB,EAANmD,EAIrC,GAAa,MAATxuB,EACH,OA+PF,SAAoB2f,GACnB,IAAI9hB,EAAS8hB,EAAM9hB,OACfkS,EAAQ4P,EAAMxc,QAAQ,IAAK,GAAK,EAChCy/E,EAAUjjE,EAAMzc,UAAU,EAAG6M,GAAO+lC,OACpC7a,EAAMtb,EAAMzc,UAAU6M,EAAOlS,EAAO,GAAGi4C,OAE3C,OAAQn2B,EAAMje,WAAW,GAAGu/E,IAC3B,KAAK,EACJ,MAGD,KAAKf,EAEJ,GAA6B,MAAzBvgE,EAAMje,WAAW,IACpB,MAIF,QAEC,IAAIuP,EAAOgqB,EAAI8R,OAAO9R,EAAM,GAAIgjD,IAEvB3kF,EAAI,EAAb,IAAgByW,EAAQ,EAAGlS,EAASoT,EAAKpT,OAAQvE,EAAIuE,EAAQkS,EAAQ,IAAKzW,EAAG,CAI5E,IAHA,IAAIiB,EAAQ0W,EAAK3X,GACbmpE,EAAQloE,EAAMwyC,MAAMmxC,GAEjB3jF,EAAQkoE,EAAM1yD,IAAQ,CAC5B,IAAI4xE,EAAOpnF,EAAMmH,WAAW,GAE5B,GAAc,IAAVu/E,KAEFU,EArsCE,IAqsCWA,EAAO,IAAQA,EAAO,IAAMA,EAAO,KAjsCtC,KAisC8CA,GAExDA,IAASzB,GAAQ3lF,EAAMmH,WAAW,KAAOw+E,GAG1C,OAAQ99E,MAAMygF,WAAWtoF,MAAmC,IAAxBA,EAAM4I,QAAQ,OACjD,KAAK,EACJ,OAAQ5I,GAEP,IAAK,WAAY,IAAK,YAAa,IAAK,YAAa,IAAK,UAC1D,IAAK,SAAU,IAAK,WAAY,IAAK,OAAQ,IAAK,OAAQ,IAAK,SAC/D,IAAK,OAAQ,IAAK,UAAW,IAAK,WAAY,IAAK,cACnD,IAAK,SAAU,IAAK,UAAW,IAAK,oBAAqB,IAAK,UAC9D,IAAK,UAAW,IAAK,QAAS,IAAK,aAAc,IAAK,WACrD,MAED,QACCA,GAASM,IAOd4nE,EAAM1yD,KAAWxV,EAGlB0gC,IAAc,IAAN3hC,EAAU,GAAK,KAAOmpE,EAAM/kE,KAAK,MAO5C,OAFAu9B,EAAM2nD,EAAU3nD,EAAM,IAEP,IAAXtpB,GAA4B,IAAXA,GAAgB8wE,GAAOxnD,EAAK,GACzCskD,EAAStkD,EAAMA,EAEhBA,EApER,CA/PmBA,GACX,GAAe,IAAXtpB,GAA4B,IAAXA,IAAiB8wE,GAAOxnD,EAAK,GACxD,OAAOA,EAIR,OAAQj7B,GAEP,KAAK,KAEJ,OAA8B,KAAvBi7B,EAAIv5B,WAAW,IAAa69E,EAAStkD,EAAMA,EAAMA,EAGzD,KAAK,IAEJ,OAA6B,MAAtBA,EAAIv5B,WAAW,GAAa69E,EAAStkD,EAAMA,EAAMA,EAGzD,KAAK,IAEJ,OAA6B,MAAtBA,EAAIv5B,WAAW,GAAa69E,EAAStkD,EAAMA,EAAMA,EAGzD,KAAK,KACJ,GAA0B,MAAtBA,EAAIv5B,WAAW,GAClB,MAKF,KAAK,IACL,KAAK,IACJ,OAAO69E,EAAStkD,EAAMA,EAGvB,KAAK,IACJ,OAAOskD,EAAStkD,EAAMukD,EAAMvkD,EAAMA,EAInC,KAAK,KACL,KAAK,IACJ,OAAOskD,EAAStkD,EAAMukD,EAAMvkD,EAAMwkD,EAAKxkD,EAAMA,EAG9C,KAAK,IAEJ,OAAIA,EAAIv5B,WAAW,KAAOw+E,EAClBX,EAAStkD,EAAMA,EAInBA,EAAI93B,QAAQ,aAAc,IAAM,EAC5B83B,EAAIlb,QAAQu/D,EAAW,KAAKC,EAAO,MAAQtkD,EAG5CA,EAGR,KAAK,IACJ,GAAIA,EAAIv5B,WAAW,KAAOw+E,EACzB,OAAQjlD,EAAIv5B,WAAW,IAEtB,KAAK,IACJ,OAAO69E,EAAS,OAAStkD,EAAIlb,QAAQ,QAAS,IAAMw/D,EAAStkD,EAAMwkD,EAAKxkD,EAAIlb,QAAQ,OAAQ,YAAckb,EAG3G,KAAK,IACJ,OAAOskD,EAAStkD,EAAMwkD,EAAKxkD,EAAIlb,QAAQ,SAAU,YAAckb,EAGhE,KAAK,GACJ,OAAOskD,EAAStkD,EAAMwkD,EAAKxkD,EAAIlb,QAAQ,QAAS,kBAAoBkb,EAKvE,OAAOskD,EAAStkD,EAAMwkD,EAAKxkD,EAAMA,EAGlC,KAAK,IACJ,OAAOskD,EAAStkD,EAAMwkD,EAAK,QAAexkD,EAAMA,EAGjD,KAAK,KAEJ,GAA0B,KAAtBA,EAAIv5B,WAAW,GAClB,MAID,OADAhD,EAAQu8B,EAAI/3B,UAAU+3B,EAAI93B,QAAQ,IAAK,KAAK4c,QAAQ,QAAS,IAAIA,QAAQ,gBAAiB,WACnFw/D,EAAS,WAAa7gF,EAAQ6gF,EAAStkD,EAAMwkD,EAAK,YAAc/gF,EAAQu8B,EAGhF,KAAK,KACJ,OAAO8iD,EAAUn+D,KAAKqb,GAAOA,EAAIlb,QAAQ+9D,EAAU,IAAMyB,GAAUtkD,EAAIlb,QAAQ+9D,EAAU,IAAM0B,GAAOvkD,EAAMA,EAG7G,KAAK,IAIJ,OAFAlrB,GADArR,EAAQu8B,EAAI/3B,UAAU,IAAI4yC,QACZ3yC,QAAQ,KAAO,EAErBzE,EAAMgD,WAAW,GAAGhD,EAAMgD,WAAWqO,IAE5C,KAAK,IACJrR,EAAQu8B,EAAIlb,QAAQi/D,EAAY,MAChC,MAGD,KAAK,IACJtgF,EAAQu8B,EAAIlb,QAAQi/D,EAAY,SAChC,MAGD,KAAK,IACJtgF,EAAQu8B,EAAIlb,QAAQi/D,EAAY,MAChC,MAED,QACC,OAAO/jD,EAIT,OAAOskD,EAAStkD,EAAMwkD,EAAK/gF,EAAQu8B,EAGpC,KAAK,KACJ,IAAkC,IAA9BA,EAAI93B,QAAQ,SAAU,GACzB,OAAO83B,EAIT,KAAK,IAIJ,OAHAlrB,GAASkrB,EAAMtb,GAAO9hB,OAAS,GAGvBmC,GAFRtB,GAAmC,KAA1Bu8B,EAAIv5B,WAAWqO,GAAgBkrB,EAAI/3B,UAAU,EAAG6M,GAASkrB,GAAK/3B,UAAUyc,EAAMxc,QAAQ,IAAK,GAAK,GAAG2yC,QAEvFp0C,WAAW,IAA0B,EAApBhD,EAAMgD,WAAW,KAEtD,KAAK,IAEJ,GAAIhD,EAAMgD,WAAW,GAAK,IACzB,MAIF,KAAK,IACJu5B,EAAMA,EAAIlb,QAAQrhB,EAAO6gF,EAAO7gF,GAAO,IAAIu8B,EAC3C,MAID,KAAK,IACL,KAAK,IACJA,EACCA,EAAIlb,QAAQrhB,EAAO6gF,GAAQv/E,EAAO,IAAM,UAAY,IAAI,OAAO,IAC/Di7B,EAAIlb,QAAQrhB,EAAO6gF,EAAO7gF,GAAO,IACjCu8B,EAAIlb,QAAQrhB,EAAO+gF,EAAG/gF,EAAM,OAAO,IACnCu8B,EAKH,OAAOA,EAAM,IAGd,KAAK,IACJ,GAAIA,EAAIv5B,WAAW,KAAOw+E,EACzB,OAAQjlD,EAAIv5B,WAAW,IAEtB,KAAK,IAEJ,OADAhD,EAAQu8B,EAAIlb,QAAQ,SAAU,IACvBw/D,EAAStkD,EAAMskD,EAAS,OAAS7gF,EAAQ+gF,EAAK,QAAU/gF,EAAQu8B,EAGxE,KAAK,IACJ,OAAOskD,EAAStkD,EAAMwkD,EAAK,aAAexkD,EAAIlb,QAAQo/D,EAAS,IAAMlkD,EAGtE,QACC,OAAOskD,EAAStkD,EAAMwkD,EAAK,iBAAmBxkD,EAAIlb,QAAQ,gBAAiB,IAAIA,QAAQo/D,EAAS,IAAMlkD,EAIzG,MAGD,KAAK,IACL,KAAK,IAEJ,GAAIA,EAAIv5B,WAAW,KAAOw+E,GAA8B,MAAtBjlD,EAAIv5B,WAAW,GAChD,MAIF,KAAK,IACL,KAAK,IACJ,IAAiC,IAA7B29E,EAAaz/D,KAAKD,GAErB,OAAwE,OAAnEjhB,EAAQihB,EAAMzc,UAAUyc,EAAMxc,QAAQ,KAAO,IAAIzB,WAAW,GACzDzG,GAAS0kB,EAAMI,QAAQ,UAAW,kBAAmB5N,EAAOkZ,EAAQmD,GAAOzO,QAAQ,kBAAmB,YAEtGkb,EAAIlb,QAAQrhB,EAAO6gF,EAAS7gF,GAASu8B,EAAIlb,QAAQrhB,EAAO8gF,EAAM9gF,EAAMqhB,QAAQ,QAAS,KAAOkb,EAErG,MAGD,KAAK,IAIJ,GAHAA,EAAMskD,EAAStkD,GAA6B,MAAtBA,EAAIv5B,WAAW,GAAa+9E,EAAKxkD,EAAM,IAAMA,EAG/D5P,EAASmD,IAAU,KAA8B,MAAvByM,EAAIv5B,WAAW,KAAeu5B,EAAI93B,QAAQ,YAAa,IAAM,EAC1F,OAAO83B,EAAI/3B,UAAU,EAAG+3B,EAAI93B,QAAQ,IAAK,IAAM,GAAG4c,QAAQi+D,EAAc,KAAOuB,EAAS,MAAQtkD,EAOnG,OAAOA,EAUR,SAASwnD,GAAQzkE,EAASpJ,GACzB,IAAI7E,EAAQiO,EAAQ7a,QAAoB,IAAZyR,EAAgB,IAAM,KAC9C/Z,EAAMmjB,EAAQ9a,UAAU,EAAe,IAAZ0R,EAAgB7E,EAAQ,IACnDxV,EAAQyjB,EAAQ9a,UAAU6M,EAAQ,EAAGiO,EAAQngB,OAAS,GAE1D,OAAOkjF,GAAmB,IAAZnsE,EAAgB/Z,EAAMA,EAAIklB,QAAQq/D,EAAW,MAAO7kF,EAAOqa,GAU1E,SAAS4tE,GAAU1jE,EAAOgkE,GACzB,IAAI7nD,EAAMhgC,GAAS6nF,EAAOA,EAAMphF,WAAW,GAAIohF,EAAMphF,WAAW,GAAIohF,EAAMphF,WAAW,IAErF,OAAOu5B,IAAQ6nD,EAAM,IAAM7nD,EAAIlb,QAAQm/D,EAAa,YAAYh8E,UAAU,GAAK,IAAI4/E,EAAM,IA4L1F,SAASR,GAAO1tE,EAASoJ,EAAS0kE,EAAWK,EAAS/4D,EAAMu2D,EAAQ1iF,EAAQ0oD,EAAI86B,EAAO2B,GACtF,IAAK,IAA0BpyE,EAAtBtX,EAAI,EAAG2hC,EAAMjd,EAAe1kB,EAAIwnF,KAAWxnF,EACnD,OAAQsX,EAAOiwE,GAAQvnF,GAAGG,KAAKwpF,GAAQruE,EAASqmB,EAAKynD,EAAWK,EAAS/4D,EAAMu2D,EAAQ1iF,EAAQ0oD,EAAI86B,EAAO2B,IACzG,UAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,KACJ,MAED,QACC/nD,EAAMrqB,EAIT,GAAIqqB,IAAQjd,EACV,OAAOid,EAWV,SAASonD,GAAW5gF,EAAMsO,EAAOlS,EAAQ6lE,GACxC,IAAK,IAAIpqE,EAAIyW,EAAQ,EAAGzW,EAAIuE,IAAUvE,EACrC,OAAQoqE,EAAKhiE,WAAWpI,IAEvB,KAAKgnF,EACJ,GAAI7+E,IAAS0+E,GACRzc,EAAKhiE,WAAWpI,EAAI,KAAO6mF,GAASpwE,EAAQ,IAAMzW,EACrD,OAAOA,EAAI,EAGb,MAGD,KAAKymF,EACJ,GAAIt+E,IAAS6+E,EACZ,OAAOhnF,EAAI,EAMf,OAAOA,EAuER,SAASiF,GAAKogB,GACb,IAAK,IAAI9kB,KAAQ8kB,EAAS,CACzB,IAAIpkB,EAAQokB,EAAQ9kB,GACpB,OAAQA,GACP,IAAK,WAAYonF,GAAc,EAAN1mF,EAAS,MAClC,IAAK,SAAUkmF,EAAe,EAANlmF,EAAS,MACjC,IAAK,UAAWimF,EAAgB,EAANjmF,EAAS,MACnC,IAAK,WAAYmmF,EAAiB,EAANnmF,EAAS,MACrC,IAAK,YAAaomF,EAAkB,EAANpmF,EAAS,MACvC,IAAK,WAAYqmF,EAAiB,EAANrmF,EAAS,MACrC,IAAK,SACJwmF,GAAS,KAEJxmF,EAEuB,mBAAVA,EACjBoX,EAAS,GAETA,EAAS,EACTovE,GAASxmF,GALToX,EAAS,GAUb,OAAOpT,GAUR,SAAS0kF,GAAQ5f,EAAU1jD,GAC1B,YAAIzmB,MAAmBA,KAAKuC,cAAgBwnF,GAC3C,OAAOpqF,EAAQwqE,GAIhB,IAAI1oE,EAAK0oE,EACL5hE,EAAO9G,EAAG+G,WAAW,GAGrBD,EAAO,KACVA,GAAQ9G,EAAKA,EAAGm7C,QAAQp0C,WAAW,IAIhCu/E,GAAQ,IACXpmF,GAAMF,EAAGolB,QAAQw+D,EAtgDD,KAsgDa98E,EAAuB,GAAK,MAI1DA,EAAO,EAGS,IAAZ++E,EACHW,GAASxmF,EAETumF,GAAYvmF,EAGb,IACIsD,EADAykF,GAAavB,IAIbL,GAAU,QAGb,KAFA7iF,EAASqkF,IAj+CPY,EAi+CoBvjE,EAAO+iE,EAAWA,EAAW14D,EAAMu2D,EAAQ,EAAG,EAAG,EAAG,KAE/B,iBAAXtiF,IAC/B0hB,EAAQ1hB,GAKV,IAAI4zB,EAASuvD,GAAQ1zE,GAAOg1E,EAAW/iE,EAAO,EAAG,GAoBjD,OAjBImhE,GAAU,QAIb,KAHA7iF,EAASqkF,IA9+CPa,EA8+CoBtxD,EAAQ6wD,EAAWA,EAAW14D,EAAMu2D,EAAQ1uD,EAAOh0B,OAAQ,EAAG,EAAG,KAGlC,iBAArBg0B,EAAS5zB,KACxCwD,EAAO,GAKT5G,GAAM,GACNsmF,GAAS,GACTD,GAAY,GACZxiE,EAAU,EACVsL,EAAO,EACPu2D,EAAS,EAEFG,EAASj/E,GAAS,EAAIowB,EAAgBA,EAxI3C9R,QAAQ89D,EAAW,IACnB99D,QAAQ4+D,EAAW,IACnB5+D,QAAQ6+D,EAAU,MAClB7+D,QAAQ8+D,EAAS,MACjB9+D,QAAQ++D,EAAU,KA8IrB,OAPAmE,GAAY,IA/HZ,SAASnN,EAAKsN,GACb,OAAQA,GACP,UAAK,EACL,KAAK,KACJtC,GAAUD,GAAQhjF,OAAS,EAC3B,MAED,QACC,GAAsB,mBAAXulF,EACVvC,GAAQC,MAAasC,OACf,GAAsB,iBAAXA,EACjB,IAAK,IAAI9pF,EAAI,EAAGuE,EAASulF,EAAOvlF,OAAQvE,EAAIuE,IAAUvE,EACrDw8E,EAAIsN,EAAO9pF,SAGZ0nF,GAAiB,IAAPoC,EAKZ,OAAOtN,GA4GTmN,GAAY,IAAI1kF,YAEZogB,GACHpgB,GAAIogB,GAGEskE,GAnpD6EpqF,CAAQ,O,6BCR3FE,EAAOD,QAAU,EAAQ,M,6BCH3B,SAASuqF,EAAeC,EAAWC,GAC/B,GAAID,EAAUzlF,SAAW0lF,EAAW1lF,OAChC,OAAO,EAEX,IAAK,IAAIvE,EAAI,EAAGA,EAAIgqF,EAAUzlF,OAAQvE,IAClC,GAAIgqF,EAAUhqF,KAAOiqF,EAAWjqF,GAC5B,OAAO,EAGf,OAAO,EA0BI,IAvBf,SAAoBkqF,EAAUC,GAE1B,IAAIC,OADY,IAAZD,IAAsBA,EAAUJ,GAEpC,IACIM,EADAC,EAAW,GAEXC,GAAa,EAejB,OAdA,WAEI,IADA,IAAIC,EAAU,GACLC,EAAK,EAAGA,EAAKn7E,UAAU/K,OAAQkmF,IACpCD,EAAQC,GAAMn7E,UAAUm7E,GAE5B,OAAIF,GAAcH,IAAaxqF,MAAQuqF,EAAQK,EAASF,KAGxDD,EAAaH,EAAS76E,MAAMzP,KAAM4qF,GAClCD,GAAa,EACbH,EAAWxqF,KACX0qF,EAAWE,GALAH,K;;;;;EChBnB,IAAIlnC,EAAwBziD,OAAOyiD,sBAC/BthD,EAAiBnB,OAAOkB,UAAUC,eAClC6oF,EAAmBhqF,OAAOkB,UAAU+oF,qBAExC,SAASC,EAASh/E,GACjB,GAAIA,QACH,MAAM,IAAIqH,UAAU,yDAGrB,OAAOvS,OAAOkL,GA+CfnM,EAAOD,QA5CP,WACC,IACC,IAAKkB,OAAOorD,OACX,OAAO,EAMR,IAAI++B,EAAQ,IAAI7mF,OAAO,OAEvB,GADA6mF,EAAM,GAAK,KACkC,MAAzCnqF,OAAO0iD,oBAAoBynC,GAAO,GACrC,OAAO,EAKR,IADA,IAAIC,EAAQ,GACH9qF,EAAI,EAAGA,EAAI,GAAIA,IACvB8qF,EAAM,IAAM9mF,OAAOC,aAAajE,IAAMA,EAKvC,GAAwB,eAHXU,OAAO0iD,oBAAoB0nC,GAAO5mF,KAAI,SAAUzC,GAC5D,OAAOqpF,EAAMrpF,MAEH2C,KAAK,IACf,OAAO,EAIR,IAAI2mF,EAAQ,GAIZ,MAHA,uBAAuBt3C,MAAM,IAAIgd,SAAQ,SAAUu6B,GAClDD,EAAMC,GAAUA,KAGf,yBADEtqF,OAAOwgB,KAAKxgB,OAAOorD,OAAO,GAAIi/B,IAAQ3mF,KAAK,IAM9C,MAAOs+C,GAER,OAAO,GAIQuoC,GAAoBvqF,OAAOorD,OAAS,SAAUtsC,EAAQ1C,GAKtE,IAJA,IAAIsD,EAEA8qE,EADAvyE,EAAKiyE,EAASprE,GAGTzd,EAAI,EAAGA,EAAIuN,UAAU/K,OAAQxC,IAAK,CAG1C,IAAK,IAAIR,KAFT6e,EAAO1f,OAAO4O,UAAUvN,IAGnBF,EAAe1B,KAAKigB,EAAM7e,KAC7BoX,EAAGpX,GAAO6e,EAAK7e,IAIjB,GAAI4hD,EAAuB,CAC1B+nC,EAAU/nC,EAAsB/iC,GAChC,IAAK,IAAIpgB,EAAI,EAAGA,EAAIkrF,EAAQ3mF,OAAQvE,IAC/B0qF,EAAiBvqF,KAAKigB,EAAM8qE,EAAQlrF,MACvC2Y,EAAGuyE,EAAQlrF,IAAMogB,EAAK8qE,EAAQlrF,MAMlC,OAAO2Y,I,o+B/pBhCR,sC,cgqBzCoC,cAAoBwyE,EAAA,WAEpD,qBAAyBh/B,EAAO19B,G,wRAAhC,W,OAAA,gC,IAAA,YACI,oC,iCAEJ,YACU,2CAAa28D,GAEnBA,EAASpnB,OAAO,KAAA/iE,Q,mBAGpB,YACIrB,KAAKqB,MAAQA,EAEP,YAAA+iE,OAAA,UAAO/iE,I,gHCtBrB,aAAsCkqF,EAAA,W,cCC+B,cAAC,SADtE,cAEI,yBACI,yBACoC,GAAO,GCJnD,aA2EI,IAvEI,oBAAc,MnqB4OlB,cmqB5OUvrF,KnqB4ODqB,GmqBrKT,oBAEI,aAAwE,I,kMD7EhF,oEAGQ,W,OAAA,oCAHR,IAGQ,oDAHR,oBAMQ,WACI,KAAAoqF,YAAa,EACb,8BARZ,qC,kECOmC,WAAQ,mBAAM,kBAAYzrF,S,sBAEzD,YAGW,MAFP,EAAqC,yBAE9B,GAAoB,MAAhB0rF,E,CACPF,EAASrnB,aACI,YDb4C,G1pByF3D,Y2pB5Ee,E3pB6Ed,M,C2pB3EC,MAAiB,oBACjBunB,EAAapnF,IAAb,EAAAonF,EAAapnF,IAAO,EAAAqnF,EAAcH,IAClC,0BAAaA,GACb,EAAAG,EAPJ,OAAO,G,yBAWX,WACI,cAAW,mBAEP,MACJ,OAFI9+B,IACA,kCAA0B,QAAG,EAAAvoD,IAAH,IAC9B,KAHW,O,iCAKf,c,mBAGA,YACuB,6CAAnB,MAAmB,EACnBonF,EAAatuD,MnlBUZ,UmlBVqB/7B,GACT,qBAAbqqF,K,uBAGJ,WACuB,gDAAnB,MAAmB,EACnBA,EAAaE,aAAc,EACd,qBAAbF,K,4BAGJ,YACI,IAAK,EAAAG,W,CACD,EAAAA,YAAa,E,IAET,gB,QAEA,EAAAA,YAAa,K,oBAKzB,YACI,MAAO,EAAAzuD,MpqBoK8CzlB,W,CoqBnKjD,I9pBssDQ,E8pBtsDR,EAAY,EAAAylB,MAAM,iBAAS,G9pBssDnC,IAAgB,E8pBrsDR,EAAA94B,IAAIgoB,O9pBqsDI,iC8pBrsDgB83C,OAAA,GjjBmHhB,MijBhHZ,GAAI,EAAAwnB,YjjBgHR,IAAgB,EijB/GR,EAAAtnF,InqB6S4Egc,QAAQ/I,WkH9L5E,a,CAAA,eijB/GOo0E,EjjB+GM,ElHiHmChqF,ImqBhO7B6pF,EjjB+GN,ElH8HmCnqF,MmqB5OpDsqF,EAAWG,UACXN,EAASrnB,e,8BAKrB,WACkD,4CAAMnkE,QAAN,qB,iCAElD,WACqD,IAAM,EAAN,cAAM,EAAN,YAAM,aAAOA,QAAb,qB,sEAErD,sCAKA,aACI,SnqBzBsC6sB,ImqB0BtC,WAAY,IACZ,kBAAkB,EAClB,iBAAiB,E,gUH/EzB,YAC+D,WAAAk/D,EAAoBl9D,I,+FCTnF,WAC8C,WAAAm9D,G,uOGgE9C,yC,0SCSA,sC,kEC0DA,4C,4ED3CA,2C,uPE02FA,e,mFC7sFA,yB,EA2PA,gD,EC9ZA,4C,qCF84CA,qD,iFApGA,oC,gCGx3CA,yB,EA2DA,yB,gJChCA,aASI,mBACoB,OAAc,MAElC,sBACuB,OAAiB,MAExC,sBAAqB,OAQrB,ePa4C,IQzC1B,aAoGlB,KAlGA,UAAW,MAkGX,qB,wsCDhFA,yC,IAAA,uC,gCAGA,YAEI,YAAc,G,yBAKlB,WACqB,0BAAc,W,gFAEnC,kChHmCA,2CAae,cAiBf,kB,OAjBe,sCAAE,UAAO,EAAP,EAAkB,EAAlB,SA2BN,iBAAc,EAAW,QgH3EpC,2BAYa,YAHL,UAAwB,WACxB,UAA6B,oBAAkB,wBAC/C,UAA6C,MhHqCjD,EgHpCmD,EhHoCxC,EgHpC6B,EAAiB,EhHoC9C,IgHpCF,mBAAc,iB,4FAE3B,kChHoCA,2CAae,cAef,kB,OAfe,sCAAE,UAAa,EAAb,EAAwB,EAAxB,SA2BN,uBAAoB,EAAW,QgH5E1C,2BAYc,YAHN,UAAwB,WACxB,UAA6B,oBAAkB,wBAC/C,UAA6C,MhHsCjD,EgHrC0D,EhHqC/C,EgHrCoC,EAAiB,EhHqCrD,IgHrCD,mBAAc,iB,0EAE5B,chHqCA,kBgHrCA,yBASO,YAFC,UAAwB,WACxB,UAA6C,MAC9C,mBAAc,UhHsCV,iBgHtCwB,EAAW,Q,sFAE9C,chHuCA,kBgHvCA,yBAWQ,YAFA,UAAwB,WACxB,UAA6C,MAC7C,mBAAc,UhHwCX,uBgHxC+B,EAAW,Q,wBAErD,gBAaO,YAFC,UAAwB,WACxB,UAAoC,MACrC,mBAAc,UAAU,YAAI,EAAO,EAAW,I,8BAErD,gBAaQ,YAFA,UAAwB,WACxB,UAAoC,MACpC,mBAAc,UAAU,kBAAU,EAAO,EAAW,I,kFAG5D,kJhH+HA,mCAeyC,EAfzC,iBAeyC,WkH3OzC,6L,OlH2OyC,0CACH,IkHpOlB,ElHoOkB,EAAjB,mBAAiB,EAAqB,EAArB,EAA+B,EAA/B,EAA0C,EAA1C,EAA0D,EkHtO5F,IlHsOkC,GkHpOlB,EAAZ,c,KNiMQ,MAAhB,IAAgB,4B,CAAA,eAAM,GAAc,EMjMS,eAA+B,a,CNiM9B,EAAO,EAAP,SAC9C,EAAO,W,GMnMH,QAEA,GAAa,MAAT,E,CACA,IAAI,EAGA,MAAM,MACF,6CAA0C,GAA1C,gCAA6E,EAA7E,KAHJ,iBAAO,GAOf,MAAqB,cAAY,qBAC7B,EACA,EACA,iCAAE,UAAF,IACA,OAA2B,EAAkB,GAA8B,GAC3E,UAAkB,IAClB,aAEJ,eAAK,EAAgB,GlHkNrB,MkHjNO,ElHmNX,OADI,mBAAiB,uBAAe,GAAuB,GAC3D,OgHjJA,kCAWQ,UAAwB,WACxB,UAAkC,UAClC,WAAoB,GAExB,MAAgB,QACQ,EAAxB,mBAAc,UAAU,EAA6B,IAAY,GhH8HjE,oBAAkB,uBAAmB,IgH9HL,EAAU,EhH8HL,EgH9H4C,EhH8H5C,W,8EgH3HzC,chHkJA,kBgHlJA,qBAK2C,0BAAc,UhHkJR,0B,4EgHhJjD,chH0JA,kBgH1JA,gCAMuC,UAA6C,MACpD,MAAxB,mBAAc,UhH0JlB,OACA,OgH3JI,OhH4JG,eAAK,EAAa,EgH5Jc,Q,yBAE3C,gBAUO,YADC,UAAoC,MACrC,mBAAc,UAAU,aAAK,EAAa,EAAe,I,yCAEhE,WACI,mBAAc,UAAU,gC,gCAG5B,gBASI,YAJoD,UAAe,MAC/D,YAAO,oBACP,YAAO,cAAM,yBAAwB,EAAxB,OAAoC,GAE9C,mBAAc,oBAAY,EAAS,EAAW,I,wFAGzD,uIAI2D,UAAe,MACtE,MAAgB,YAIhB,OAHI,YAAO,uBACP,YAAO,cAAM,yBAAwB,EAAxB,OAAoC,GAE9C,mBAAc,oBAAY,EAAS,EAAW,Q,0FAGzD,qJAIyC,UAAmB,oBAAkB,cAC1E,MAAgB,YAIhB,OAHI,YAAO,uBACP,YAAO,cAAM,yBAAwB,EAAxB,OAAoC,GAE9C,mBAAc,oBAAY,EAAS,EAAW,W,gCAGzD,YAKI,MAAgB,GAAF,GACd,EAAkB,GAAF,GAIhB,OAHI,YAAO,oBACP,YAAO,cAAM,yBAAwB,EAAxB,OAAoC,GAE9C,mBAAc,oBAAY,EAAS,EAAW,O,qCAGzD,gBAOyB,MAArB,YADyD,UAAe,MACjE,OAAc,EAAd,mBAAc,uBAAe,IAA7B,EAAyC,yBAAY,EAAS,EAAW,I,oGAGpF,iGAOyB,MADrB,EAAgB,YAChB,OAAO,OAAc,EAAd,mBAAc,uBAAe,IAA7B,EAAyC,yBAAY,EAAS,Q,6BAGzE,YAKyB,MAAd,UAAc,EAAd,mBAAc,uBAAe,IACzB,MAAM,OAAyB,0BAAyB,EAAzB,KAD1C,OAAO,G,mCAIX,YAKI,OAAO,mBAAc,uBAAe,I,gCAGxC,YAII,mBAAc,oBAAY,I,gCAG9B,cAM4B,MAAxB,OAAO,OAAiB,EAAjB,sBAAiB,oBAAY,IAA7B,EAAqC,G,gCAGhD,YAKI,OAAO,sBAAiB,oBAAY,I,gCAGxC,cAMI,sBAAiB,qBAAa,EAAK,I,mCAGvC,YAKI,sBAAiB,uBAAe,I,kBAGpC,WJq9CgB,MAAhB,IAAgB,EIj9CZ,eJi9CY,iCIj9CM,UAAc,EAChC,eAAQ,QACR,mBAAc,gBACd,sBAAiB,S,gCAGrB,mBAAuC,WAAgC,GACnE,KAAK,UAAQ,eAAO,GACpB,mBAAc,oBAAY,GACtB,GACA,qC,kCAKR,mBAAyC,WAAgC,GACrE,mBAAc,sBAAc,GAC5B,KAAK,UAAQ,kBAAU,GACnB,GACA,qC,+ECzTR,WACI,UAAK,cAAc,oCACnB,UAAK,cAAc,2B,4BAGvB,YAKI,OAAO,qBAAQ,EAAO,K,4BAG1B,YAKI,OAAO,qBAAgB,EAAR,K,4BAGnB,YAKI,GAAI,UAAK,OAAO,mB,CACZ,MAAe,IAAgB,sBAE/B,OADI,gBAAY,GAChB,KACA,EAAY,UAAK,cAAc,OAC/B,UAAK,OAAO,aAAK,UAAS,EAAT,kBAA8B,EAA9B,YAEjB,mBAAY,GANmB,QAQnC,OAAO,M,0BAGX,YACI,UAAK,oBAAY,I,+BAGrB,YAMI,OADA,UAAK,iBAAiB,uBAAe,GAC9B,M,2BAGX,YAMI,OADA,UAAK,oBAAY,GACV,M,gCAGX,YAKI,YAFY,gBACZ,UAAK,oBAAY,KAAkB,sBAAc,IAC1C,M,iCAGX,WAII,GAAI,UAAK,OAAO,mB,CACZ,MAAe,IAAgB,kBAE/B,OADI,OAAK,+BACT,KACA,UAAK,OAAO,cAAM,wBAAuB,EAAvB,YAElB,UAAK,+BAL0B,MAOnC,OAAO,M,kBAGX,WACI,UAAK,S,kCAGT,YACI,UAAK,cAAc,sBAAc,I,kCAGrC,YACI,UAAK,cAAc,sBAAc,I,iBAMjC,WAII,MAAU,MAEV,OADA,EAAI,eACG,G,2EARf,yC,8BE9FJ,eAA+B,OAAY,6BAAZ,IAA4B,IAA5B,EAAuC,EAAL,IACjE,eAAiC,wCAAc,I,eCLnB,kCAGxB,UAA4B,WAG5B,UV4CsC,UU3CtC,UAAuB,aACvB,UAA6B,QAP7B,sBACA,mBACA,iBACA,kBACA,YACA,sBACA,eACA,kBAEA,eAA8B,OAS+B,eAAE,OAAG,GAAH,GAuCnE,iBACI,OAAW,6BACE,GAAN,GAAH,KAA2B,EAAU,MAC5B,GAAN,GAGX,yFACI,qBAAQ,sBAAR,4BAAQ,4BCjFW,oBAAC,UAAmC,MAAnC,ezHXxB,sB,sF0HuBI,WAGsB,YAAkB,iBAAiB,O,wFHFzD,WACQ,WAAM,eACN,WAAM,S,2JCad,W,IAGkB,EAGM,EALpB,EAAc,UAAK,WACnB,EAAc,IAAgB,GAAZ,kBAAJ,IACd,EAAc,8BAAiB,gBAAa,gBAA9B,QAA8C,GAC5D,EAC6B,EAAzB,oBAA+B,KAAgB,sBAAsB,GAAQ,UAAU,oBAK3F,OADO,EAHiB,oBVgL6B,UU7K9C,GADH,UADmC,EAAf,oBAA4B,SAAb,uBAAkB,IAGlD,IAAG,EAAH,IAAY,EAAQ,EAAQ,EAJnC,EAIO,K,oBAGX,YAGI,IAEI,EAJJ,OAAI,OAAS,IAEb,sBAEI,sCAAe,EAAM,eACrB,iBAAa,EAAM,aACnB,sBAAkB,EAAM,mB,6BAKhC,YACW,MAAP,OAAO,oCAAe,GAAf,OAAwB,oBAAe,eAAS,I,wBAG3D,gBACI,OAAO,qBAAQ,IAAU,OAAK,UAAa,IAAa,OAAK,eAAkB,I,6BAGnF,cACW,MAAP,OAAO,oCAAe,GAAf,OAA0B,oBAAe,eAAS,I,sBAG7D,WACiB,QAAb,EAAa,+CAAyB,EAGtC,OADA,GAAS,IADT,GAAS,GAAK,EAAL,GAAc,iBAAY,WAA1B,GACA,GAA6B,EAAf,qBAAd,G,yFA7DjB,WAUI,4B,wBAVJ,WAWI,yB,wBAXJ,WAYI,uB,wBAZJ,WAaI,wB,wBAbJ,WAcI,kB,wBAdJ,WAeI,4B,wBAfJ,WAgBI,qB,wBAhBJ,WAiBI,wB,0BAjBJ,6CAUI,iCACA,8BACA,4BACA,6BACA,uBACA,iCACA,0BACA,0B,kEAwDJ,8B,mBAAA,sB,IAAA,qB,IAAA,sB,QAAA,yD,oFChFA,WAAwB,qB,0BAAxB,+BAAwB,uB,sBAAxB,iBAAwB,8CAAxB,K,sBAAA,0BAAwB,mC,oBAAxB,mHAAwB,kC,+GzHCpB,qLAOI,YANA,UAAwB,WAGxB,UAAkC,KAG3B,MACH,EADG,KAGH,EACA,EAJG,SAOc,EADP,Q,kCAKlB,sBAQI,YANA,UAAwB,WAGxB,UAAkC,KAG3B,OACH,EACA,EACA,EACA,EAJG,KAOc,EADP,I,iHAKlB,qLAOI,YANA,UAAwB,WAGxB,UAAkC,KAG3B,MACH,EADG,KAGH,EACA,EAJG,UAOc,EADP,Q,0E2H9CJ,wBAAC,WAAgC,QAAO,WAAwB,QAAO,WAAkC,GAAxG,wBAAuC,gBAA+B,yBCGpE,oBAAC,UAA4C,KAAkB,uBAA9D,cCRI,e,EAA2B,E,uCCKpB,e,EAA0B,E,8CCpBzB,e,EAA0B,E,+CCoB7B,iBAAmC,YAAU,EAAK,G,sCCF7C,e,EAA0B,E,iDCAhC,e,EAA0B,E,2CCA3B,e,EAA0B,E,0CCExB,e,EAA0B,E,4CCL3B,e,EAAwB,E,2CCApB,e,EAAwB,E,+CCI5B,e,EAA0B,E,2CCIzB,iBAC3B,aAAmB,EAAM,GCER,mBAKsB,aAFvC,UAAiD,MAFjD,YACA,aACA,qBAEA,gBAAuC,kDAAyB,KCHnC,iBA4C7B,KA5C8B,uBAAyB,sBA4CvD,sBACI,qBAA4B,O,kFf1DpC,WAKmB,8B,wBALnB,WAK0D,sB,wBAL1D,WAKyF,+B,0BALzF,mCAKmB,mCAAuC,2BAA+B,iC,sBALzF,iBAKmB,8DAAuC,wCAA+B,0DALzF,K,sBAAA,0BAKyF,MAA/B,MAAvC,4CAAuC,6BAA+B,sC,oBALzF,mHAKmB,oDAAuC,oCAA+B,sD,yBCKrF,cACgB,MAAZ,gBAAY,sBX2NhB,cW3NS,EX2NA,I,+BWxNT,YAEW,MAAP,OAAO,+BAAK,KAAL,sB,yBAGX,YAEW,mDAAK,KAAL,sBAAmB,MAAM,OAAyB,yBAAwB,EAAxB,KAAzD,OAAO,G,uFAlBf,WAKsB,oB,0BALtB,+BAKsB,sB,sBALtB,iBAKsB,2CALtB,K,sBAAA,0BAKsB,kC,oBALtB,mHAKsB,gC,y2BYGlB,WAAoC,U,kBAEpC,WAC6B,MAAzB,OAAyB,EAAzB,oBAAe,UAAU,UAAzB,EAAyC,O,yBAG7C,YACI,OAAO,oBAAO,I,yKEIlB,YAMQ,qBAAM,OAAO,oBACb,qBAAM,OAAO,cAAM,yBAAwB,qB,IAG3C,MAAuC,EAAQ,WAC/C,EAAQ,MAAM,sBAAc,GAC5B,MAAY,oBAAe,WACvB,EAAQ,MACR,GAGJ,OADA,EAAQ,MAAM,kBACP,E,SACT,iB,CACE,MAAY,KAAkB,sBAAc,GAE5C,MADA,qBAAM,OAAO,cAAM,2DAA0D,oBAA1D,KAA2E,GACxF,OAA0B,iCAAgC,oBAAiB,GAZrF,U,uFA0BJ,0CCjD0B,iBAC1B,aAAmB,EAAM,GAEzB,aAAwB,KCX5B,cAGoB,mBCEC,oBAAC,6BA6BtB,yFAII,qBAAO,oBAAM,qBAAO,oBAApB,6BAAO,6BAAM,6BAAO,6B9ItBZ,iBACR,6BACA,wBAEA,eACoC,KAAgB,qBAEpD,yBAAwB,EAGxB,Y+GwDgD,I/GtDhD,iB8G2B4C,IiC1CjB,eAkE3B,UAlE4B,UhCqDU,KgCrDV,cAkE5B,sBACI,gBAAuB,E,yFHnE3B,WAAoC,OAAC,oB,kBAErC,WAC6B,MAAzB,OAAyB,EAAzB,oBAAe,UAAU,UAAzB,EAAyC,cACzC,aAAQ,M,4BAGZ,YAGW,MAFA,KAAI,mBACD,wCAAO,O,CACV,0B5BsGkC,MAAM,E4BtGzB,gD5BsGuD,Y4BtGtE,IAFP,U,yBAKJ,YAOW,MAL8B,IAK9B,GALP,KAAkB,qBAAa,MAAM,sBAIrC,OAHS,gBACD,UAAQ,iBAAO,IAEvB,KACO,uB5B4FkC,MAAM,E4B5FzB,gD5B4FuD,Y4B5F7E,OAAO,G,mGC5BX,gB,8FCIA,YAA4C,YAAK,MAAL,gBAAc,IAAd,G,6BAE5C,cACQ,sBAAO,IACP,iBAAI,EAAO,I,2BAInB,YACI,0BAAmB,I,0BAGvB,YACI,0BAAkB,I,2BAGtB,YACI,0BAAmB,I,0BAGvB,YAAgC,YAAK,MAAL,gBAAc,IAAd,G,4HAKpC,wC,mBAAA,sB,IAAA,oB,IAAA,mB,IAAA,oB,IAAA,mB,QAAA,sD,mE9IXI,2C,IAAA,yC,2BAQA,cAK2C,EAAvC,OAAS,EAAW,mBACpB,YAAO,UAAI,I,wFAGf,2HAII,MAAgB,YACuB,EAAvC,MAAS,EAAW,mBACpB,YAAO,UAAI,Q,0FAGf,iEChDA,oIDgDA,kCAQI,UAAwB,WACxB,WAA0B,QAC1B,WAAoB,GAGpB,IACsB,EADtB,EAAc,yBAAY,EAAU,GACd,EAA8D,eC1DpF,EAAkC,ID0DlC,MCvDO,MACH,EADG,KDuD4B,EAAW,ECvDvC,SAOc,EDgDqC,GAE1D,OADY,EAAZ,iBAA0B,GACnB,O,iCAGX,cACI,YAD+B,WAA0B,GACzD,OAAQ,KAAK,uBAAiB,EAAgB,KAAK,kBAAY,I,4FAEnE,iECjCA,oIDiCA,gCAOI,UAAwB,WACxB,WAAoB,GAGpB,IACsB,EADtB,EAAc,yBAAY,GACJ,EAA+D,eCzCrF,EAAkC,IDyClC,MCtCO,MACH,EADG,KDsC6B,EAAW,ECtCxC,UAOc,ED+BsC,GAE3D,OADY,EAAZ,iBAA0B,GACnB,O,0BAGX,YAGoC,UAAO,KAAM,K,0BAEjD,YAG2C,WAAO,MAAQ,I,wF+IjF1D,cAC6B,MAArB,GAAI,YAAO,KAAO,EAAlB,OAAqB,iCAAO,KAAP,oBAAoB,MAAM,OACvC,iCAAgC,EAAhC,SAAwC,KAAxC,cAA+D,GAAN,GAAzD,M,iHAEhB,qDAAkD,8BAAU,EAAV,W,iHAClD,qDAAkD,8BAAU,EAAV,W,iHAClD,qDAAkD,8BAAU,EAAV,W,iHAClD,qDAAkD,8BAAU,EAAV,W,iHAClD,qDAAkD,8BAAU,EAAV,W,yBAElD,YAI+B,8CAAO,KAAP,qB,yBAE/B,cACgC,MAArB,EAAP,yBAAuB,EAAK,wB,kBAGhC,WAGa,mBAAO,M,qBAEpB,WAGgB,OAAU,IAAV,a,wBAEhB,WAGmB,OAAC,gB,4BAEpB,cAC8B,I9B64Fd,E8B74Fc,EAAP,Y9B24FvB,EAAY,IACZ,EAAa,IACb,IAAgB,4B,CAAA,e8B74FqC,YAAO,c9B84F1C,G8B94FmC,E9B+4F7C,EAAM,UAAI,GAEV,EAAO,UAAI,G,MAGZ,MAAK,EAAO,G8Bp5FV,iBAAO,iBACZ,OAAO,OAAqB,MAAQ,GAAQ,K,yBAGhD,YACI,OAAO,oBAAO,YAAQ,I,qGAG1B,+IAIwC,gDAAuB,MAAM,MAA6B,4BAAqC,QAArC,KAA1D,c,+BAExC,YAMwB,IACJ,EADT,E9BguBK,E8BjuBwB,EAAhB,EAAP,a9BsoBV,EAAS,IA2FhB,IAAgB,4B,CAAA,I,EAAA,W8BjuBiC,mC9BiuBb,K8BjuBa,a9BiuBH,EAAY,UAAI,G8BjuB1D,M9BkuBG,E8BjuBI,OAAM,EAAO,M,KAChB,EAAK,SAAO,IAAP,yBAAL,M,KACA,EAAK,OAAL,M,QACQ,MAAM,OACN,+DAAqE,GAAN,GAA/D,iBAAkG,KAAlG,qCAJZ,U,wEAQJ,0CAkBJ,cAG8B,c,eChF9B,eAAuB,cAAgB,GCpBb,eAAC,uBCGH,eAAC,YACrB,qBAA0C,GAAL,WCYnB,iBAAC,aAAiB,cAEpC,kBAAyB,ICPP,eAAC,qBAEnB,eAA+C,KAAkB,sBCMlD,eAAC,eAEhB,yBAAgC,IAIhC,eAAsB,IAEtB,4BAAqD,KAErD,kBAAiC,KhJXrB,mBACZ,UACA,wBAEA,qBAEA,oB0G0DgD,I1GxDhD,sBACgC,OAAiB,mBAAO,MAExD,aAC6B,KAO7B,kB0G6CgD,I1G5ChD,gBAA+B,EAC/B,mBAAiD,KAEjD,YAAa,mBAAM,OkH7BG,iBAgEtB,UAhEiD,WAAsB,GAAhD,iBAA0B,cAEjD,iBTyC4C,ISqB5C,sBACI,mBAA0B,SAC1B,0BAA2B,GAAG,oB,sBwBKlC,WAAkC,6BAA8B,EAAP,c,mLEnFlC,0C,sBACvB,WACI,OAAO,Y,4FAFf,WAA2B,mB,0BAA3B,+BAA2B,qB,sBAA3B,0BAA2B,iC,oBAA3B,mHAA2B,8B,gECIvB,0C,sBACA,WACI,MAAO,MAAK,WAAL,K,0FAHf,WAAyB,kB,0BAAzB,+BAAyB,oB,sBAAzB,0BAAyB,gC,oBAAzB,mHAAyB,4B,oECiBjB,WAAQ,4B,0BAEZ,YlCmvDgB,MAAhB,IAAgB,EkClvDZ,ElCkvDY,wB,CAAA,ekCjvDJ,WAAM,OAAO,qBACT,YAAO,iBAAiB,OACxB,WAAM,OAAO,cAAM,KlC+uDN,GkC7uDb,WAAM,OAAO,cAAQ,YAAF,kBlC6uDN,IkC1uDrB,4BlC0uDqB,GkC1uDiB,K,oCAI9C,cACI,IlCquDY,EkCruDZ,EAAkB,EAAW,QAAQ,UAAY,EACjD,EAAsB,6BAAsB,WAAO,GlCouDvD,IkCnuDI,oBACQ,GAAS,EAAW,YAAa,EAAW,WAC5C,EACA,GlCguDI,EkC9tDZ,EAAW,elC8tDC,wB,CAAA,ekC7tDR,EACI,oBACQ,GlC2tDS,EkC3tDkB,aADnC,KAMA,8BACQ,GlCqtDS,EkCrtDkB,aADnC,K,qCAQZ,cAI4B,IAAjB,SAAM,EAAW,KAAjB,M,IACH,SAAe,SAAsB,EAAO,GAA5C,M,IACA,UAAgB,SAAuB,EAAO,GAA9C,M,kCAFJ,U,4BAMJ,gBACmB,IjC0KU,EiC1KV,EAAX,kBAAJ,IjC0KyB,uBAAmB,kBiC1KpB,KAAS,EnCuDQ,MAAM,GmCtDrC,4CAA2C,EAA3C,KnCsDmE,YmCpDzE,kBjC6JR,YiC7JmB,EAAO,I,sCAI1B,cACoB,IjCkKS,EiClKT,EAAX,mBjCkKoB,uBAAmB,kBiClKnB,IACrB,kBjCuJR,YiCvJmB,EAAO,I,qCAI1B,cAEW,QAAP,OAAO,8CAAW,IAAX,cAA0B,8BAAuB,IAAjD,6B,sCAGX,YACQ,cAAgB,WAAO,YAAQ,I,2BAEvC,WlC8qDgB,MAAhB,IAAgB,EkC7qDZ,kBAAW,OlC6qDC,iCkC7qDmB,OAC/B,kBAAW,S,0CAGf,WACqB,IlCspBL,EkCtpBK,EAAjB,eAAU,OlC6oBP,EAAmB,IAS1B,IAAgB,4B,CAAA,eAAU,gBAAc,EAAY,UAAI,GA3CjD,IA2FS,EAk+BA,EA7jCT,EAAS,IA2FhB,IAAgB,EA/CT,EA+CS,wB,CAAA,eAAoB,EkCrsBO,eAAe,QAAQ,kBlCqsBpB,EAAY,UAAI,GAk+B9D,IAAgB,EAj+BT,EAi+BS,iCkCrqDS,YACD,OAAgB,WAAO,e,4BAK/C,YAEI,IlC2rBY,EkC3rBZ,EAAiC,EAAjB,eAAU,QlCgmBvB,EAAS,IA2FhB,IAAgB,EkCzrBJ,ElCyrBI,wB,CAAA,eAAoB,EkCzrBgB,eAAe,oBlCyrBrB,EAAY,UAAI,GkC1rB1D,IlC4pDY,EkC5pDZ,ElC2rBG,EAyuBA,EAAa,IAwPpB,IAAgB,EkC1pDL,ElC0pDK,wB,CAAA,IAhPK,EkCz6Cb,ElCy6Ca,SkCz6Cb,OAAG,ElCypDK,SkCzpDL,YAAI,8BAAuB,SAA9B,uBlCy6CmD,ekC16CvD,OlC26CG,G,0BkCt6CP,gBAM4B,MAAjB,EAAiB,IAAjB,eAAU,O,KlCoHL,MAAhB,IAAgB,4B,CAAA,eAAM,GAAc,EkCnHnB,eAAe,qB,ClCmHc,EAAO,EAAP,SAC9C,EAAO,W,GkCrHH,OAAO,gBAAiB,KAAjB,cAKA,8BAAuB,IALvB,6B,oCAQX,YACyB,IjCyVT,EiCzVS,EAAX,kBjCwWP,EAAS,IAfhB,IAAgB,EA3HoE,UAAQ,WA2H5E,a,CAAA,IiCzV2B,EjCyV3B,WiCzVkB,OAAS,EjC0VzB,EiC1VmB,MAAM,iBAAT,ajC2V1B,EAAY,YAAI,EAAQ,IAAK,EAAQ,OCjZtC,IA2BM,EFiqDG,EE5rDT,EAAM,EDoZN,ECpZmB,MA2B1B,IAAa,EDyXN,EAhI6E,QAAQ,WCzP/E,a,CAAA,eACT,EAAY,UAAc,EgC0BqD,KlCsoDnF,IAAgB,EE/pDT,EF+pDS,wB,CAAA,ekCroDE,kBAAW,alCqoDA,K,sCkCloD7B,YACI,4BAAe,EAAY,EAAW,QAAQ,W,uGCzHlD,YAKQ,mBAAM,OAAO,oBACb,mBAAM,OAAO,cAAM,QAAQ,EAAW,KAAnB,eAGvB,eAAQ,eAAO,I,kCAGnB,cAII,elCuMJ,YkCvMY,EAAO,I,oCAGnB,YAII,eAAQ,aAAO,I,iCAGnB,YAKW,MAAP,OAAO,kCAAQ,KAAR,sB,mBAGX,WACI,eAAQ,S,8IC3BR,WAAQ,mC,oEAQR,WAAQ,qCrC8FiC,MAAM,EqC9FnB,gBrC8FiD,YqC9FrE,Y,kBAEZ,WAAsC,IpCigDzB,EoCjgDyB,EAAzB,yBAAkB,OpC07CxB,EAAM,EAAa,IAAwB,KAuElD,IAAa,4B,CAAA,eACT,EAAY,UAAc,EoClgDiB,gBAAlC,OAA2C,EpCmgDjD,I,iCoCjgDP,YpCsuDgB,MAAhB,IAAgB,EoCruDZ,EpCquDY,wB,CAAA,eAAa,EoCpuDT,SAGR,aAAM,OAAO,cAAM,WpCiuDF,EoCjuDE,qBAFnB,kBpCmuDiB,K,0BoC5tD7B,YACI,+BAAwB,EAAO,QAC/B,8BAAuB,EAAO,aAC9B,YAAkB,G,uCAGtB,YpCstDgB,MAAhB,IAAgB,EoCrtDZ,EpCqtDY,wB,CAAA,eoCptDR,6BpCotDqB,K,sCoChtD7B,YpCgtDgB,MAAhB,IAAgB,EoC/sDZ,EpC+sDY,wB,CAAA,eoC9sDR,+BpC8sDqB,K,uCoC1sD7B,YACmB,qDAAkB,EAAK,eAAe,QrC6DZ,MAAM,GqC5D9B,+CAA8C,GrC4Dc,YqC7D7E,MAAe,EAEf,EAAS,aAAK,GACC,IpCouBH,EAk+BA,EoCtsDG,EAAf,eAAQ,OpCyoBL,EAAS,IA2FhB,IAAgB,4B,CAAA,IoCpuBe,EpCouBf,WoCpuBY,OAAG,EpCouBK,EoCpuBL,mBAAH,apCouBkB,EAAY,UAAI,GAk+B9D,IAAgB,EAj+BT,EAi+BS,iCoCtsD2D,2B,qCAG3E,YACI,MAAU,OAAgB,GAC1B,GAA0C,MAAtC,mCAAkB,EAAU,O,CAC5B,iCAAkB,EAAU,MnC6JpC,cAAI,EmC7JyC,K,+CAI7C,WACI,GAA4B,MAAxB,4BrC+CqC,MAAM,EqC1ClC,wCrC0CgE,YqC9CzE,MAAsB,KAAgB,yBACtC,6BAAkB,KAAgB,qBAAqB,MnCsJ/D,cAAI,EmCrJY,GACR,4BAAuB,G,qCAI/B,WACI,GAAkB,MAAd,kBrCsCqC,MAAM,EqCnClC,6BrCmCgE,YqCrCzE,kBACQ,yBAAY,KAAgB,cAAe,KAAgB,qBAAsB,O,oCAIjG,YACI,OAAO,yBAAQ,I,iCAGnB,qBAAwD,UAAe,MACvD,InC8Ia,EmC9Ib,EAAR,eAAJ,InC8IyB,uBAAmB,kBmC9IvB,GACjB,MAAM,OAA6B,kBAAiB,EAAjB,wBAGvC,MAAsB,mCAAkB,EAAU,OAC3C,GAAuB,MAAnB,EAKP,MAAM,OAAyB,2CAA2C,EAAU,MAArD,KAJ/B,MAA0B,mBAAY,EAAS,EAAiB,GADpE,OAEI,enC6HR,YmC7HgB,EAAW,GACnB,G,2BAMR,gBAEgB,QADuC,EAAvC,OAAM,EAAS,EAAiB,cChDhD,EDgD+D,UAA3D,MC/CG,EDgDH,EAAY,qCAAkB,KAAlB,QAAkC,IAE9C,OADA,EAAM,eAAO,GACN,G,iCAGX,YAEI,eAAQ,aAAO,I,iCAGnB,YACI,EAAM,iBAAiB,uBACvB,eAAQ,aAAO,EAAM,K,2BAGzB,WACI,qBACA,eAAQ,QACR,yBAAkB,QAClB,4BAAuB,KACvB,kBAAa,M,2BAGjB,WpCgoDgB,MAAhB,IAAgB,EoC/nDZ,eAAQ,OpC+nDI,iCoC/nD4B,iB,mCAG5C,YpC4nDgB,MAAhB,IAAgB,EoC3nDZ,EpC2nDY,wB,CAAA,eoC1nDR,2BpC0nDqB,K,mCoCtnD7B,YpCsnDgB,MAAhB,IAAgB,EoCrnDZ,EAAO,YpCqnDK,wB,CAAA,IoCpnDc,EpConDd,WoCpnDc,+CpConDD,EoCpnDwB,eAAe,QrCxBvB,MAAM,GqCyBnC,mCpCmnDa,GD5oDoD,YqCwBzE,MAAsB,EAEtB,EAAgB,yBpCknDK,GoChnDZ,IpC8oBD,EAk+BA,EoChnDC,EADT,eAAQ,OpCojBT,EAAS,IA2FhB,IAAgB,4B,CAAA,eoC9oBU,EpC8oBU,EoC9oBP,iBAAiB,UAA6B,cpC8oB7B,EAAY,UAAI,GAk+B9D,IAAgB,EAj+BT,EAi+BS,iCoC/mDc,qBpC+mDD,GoC7mDzB,YAAkB,G,iIhJ3HlB,WAAQ,yB,yBAEZ,WAAoB,OAAC,a,4BAQrB,YACI,sBAAiB,aAAO,sBAAiB,aACzC,oBAAa,eAAO,I,8FAGxB,kF2GuEJ,8C3GvEI,qBAA8C,8C2G6ED,MAAM,G3G5E/C,8BAAuC,QAAvC,kBAAmE,e2G4EU,Y3G7EnC,c,+BAI9C,YAEI,aAAU,G,4BAGd,YAOI,GAAK,sBAAiB,O2G6DmB,MAAM,E3G1DrC,uC2G0DmE,Y3G5D5D,EAAb,oBAAoB,I,4BAM5B,YAII,GAAK,sBAAiB,O2GkDmB,MAAM,E3G/CrC,0C2G+CmE,Y3GjD5D,EAAb,oBAAuB,I,wFAM/B,6FAae,cAiBf,kB,OAjBe,sCAAE,UAAO,EAAP,EAAkB,EAAlB,SA2BN,iBAAc,EAAW,QAxCpC,2BAaI,YAJA,UAAwB,WACxB,+BACA,UAA6C,MAE7C,EAAK,EAAM,sB,oGAEf,6FAae,cAef,kB,OAfe,sCAAE,UAAa,EAAb,EAAwB,EAAxB,SA2BN,uBAAoB,EAAW,QAxC1C,2BAaI,YAJA,UAAwB,WACxB,+BACA,UAA6C,MAE7C,EAAK,EAAM,sB,kFAEf,yDAUI,YAHA,UAAwB,WACxB,UAA6C,MAEtC,sBAAc,EAAW,Q,8FAGpC,yDAYI,YAHA,UAAwB,WACxB,UAA6C,MAEtC,4BAAoB,EAAW,Q,+BAG1C,gBAaW,WAHP,UAAwB,WACxB,UAAoC,M,IAGhC,mBAAI,EAAO,EAAW,G,SACxB,kBACE,mBAAM,OAAO,cAAM,yDAA+D,GAAN,GAAzD,aAAyF,iBAC5G,WACF,oBALK,QAMH,mBAAM,OAAO,cAAM,0CAAgD,GAAN,GAA1C,aAA0E,iBAC7F,QAPJ,U,yBAWJ,gBAc8B,MAEyC,QAH5D,QAHP,UAAwB,WACxB,UAAoC,MAEzB,mBAAM,OAAO,mB,CACpB,MAAsB,iBAAiB,6BAAjB,QAAqD,GAC3E,mBAAM,OAAO,cAAM,OAAa,GAAN,GAAP,IAA6B,G,MACV,IAAyB,8BAC3D,2BAAmB,EAAW,EAAO,MADpC,iBAAa,iBAIlB,OADA,mBAAM,OAAO,cAAM,OAAa,GAAN,GAAP,QAAiC,EAAjC,OACZ,EAPX,OASI,uBAAgB,EAAW,EAAO,I,+BAI1C,gBAU4B,MAAjB,MAJP,GAAI,eACA,MAAM,OAAqB,UAAS,QAAT,eAE/B,IACO,IAOC,EAPD,IADP,EAAe,GAAS,EAAO,GAC/B,OAAO,OAAiB,EAAjB,sBAAiB,wBAAgB,EAAU,IAA3C,KAEC,mBAAM,OAAO,cAAM,IAAU,MAAV,+CAFpB,EAGC,yBAHD,iBAMC,mBAAM,OAAO,cAAM,IAAU,MAAV,wDANpB,EAOC,0DAPD,iBAUC,mBAAM,OAAO,cAAM,IAAU,MAAV,qDAVpB,EAWC,gCAXD,iBAcC,mBAAM,OAAO,cAAM,IAAU,MAAV,+CAdpB,EAeC,qCAfR,G,6BAmBJ,YAE0C,MAAtC,OAAW,EAAM,mBAAW,gBAAU,yCAAmB,M,gCAG7D,gBAMkB,MADd,EAAmB,KACnB,IAAc,8CAMN,OALJ,EADU,SACO,kBACb,EACA,EACA,MAIR,OAAO,G,uCAGX,cAI0B,MAAtB,EAAsB,iBAAiB,0BAAjB,QAAkD,GACxE,MAAM,OACF,kCAAwC,GAAN,GAAlC,IAAwD,EAAxD,8B,0CAIR,WACQ,sBAAiB,QACjB,sBAAiB,gC,0FAIzB,qDAeyC,EAfzC,iBAeyC,WkH3OzC,6L,OlH2OyC,0CACH,IkHpOlB,ElHoOkB,EAAjB,mBAAiB,EAAqB,EAArB,EAA+B,EAA/B,EAA0C,EAA1C,EAA0D,EkHtO5F,IlHsOkC,GkHpOlB,EAAZ,c,KNiMQ,MAAhB,IAAgB,4B,CAAA,eAAM,GAAc,EMjMS,eAA+B,a,CNiM9B,EAAO,EAAP,SAC9C,EAAO,W,GMnMH,QAEA,GAAa,MAAT,E,CACA,IAAI,EAGA,MAAM,MACF,6CAA0C,GAA1C,gCAA6E,EAA7E,KAHJ,iBAAO,GAOf,MAAqB,cAAY,qBAC7B,EACA,EACA,iCAAE,UAAF,IACA,OAA2B,EAAkB,GAA8B,GAC3E,UAAkB,IAClB,aAEJ,eAAK,EAAgB,GlHkNrB,MkHjNO,ElHmNX,OADI,mBAAiB,uBAAe,GAAuB,GAC3D,OAlBA,kCAYI,UAAwB,WACxB,UAAmC,WACnC,WAAoB,GACpB,oBAAkB,qBAAa,KAAM,0B,qBAKzC,WAGgB,2B,8BAEhB,YAIiC,sBAAU,iBAAS,I,sCAEpD,YAII,kBkJlQC,UlJkQa,I,wFAGlB,qDAKiD,sC,4BAEjD,YAM6D,I4GgkC7C,E5GhkC6C,EAAjB,sBAAiB,eAAU,GAAsB,EAAb,oB4G0+BzE,EAAU,IAsFjB,IAAgB,4B,CAAA,IACZ,EADY,S5GhkCsG,kB4GkkCtG,EAAZ,EAAmB,G5GlkCqB,W4GokCrC,I,oF5GlkCP,gEAMuC,UAA6C,MAChF,WACA,OACA,OAAO,kBAAK,EAAa,EAAe,Q,0BAG5C,gBAW4B,MAAjB,UAAiB,EAAjB,sBAAiB,aAAK,EAAa,EAAe,IAClD,MAAM,OACL,sCAAkD,GAAZ,GAAtC,uBAAoG,GAAd,GAAtF,8BAFR,OAAO,G,iCAMX,cAK6D,0BAAM,oBAAY,EAAK,I,uCAEpF,YAI8C,0BAAM,oBAAY,I,iCAEhE,YAI6C,MAAN,UAAM,EAAN,mBAAM,oBAAY,IAClD,MAAM,OAAyB,aAAY,EAAZ,eADC,U,mBAGvC,WAGmD,MAArC,KAAkB,qBAAa,MAAM,kBAGnD,OAFI,kBACA,gBAAM,cAAc,oBAAY,GACpC,M,2BAEA,W4G05CgB,MAAhB,I5Gz5CI,gBAAU,EACV,aAAU,KACN,mBAAM,OAAO,oBACb,mBAAM,OAAO,aAAK,kBAAiB,QAAjB,K4Gs5CV,E5Gn5CZ,kB4Gm5CY,iC5Gn5CY,2BACxB,kBAAW,QAEX,sBAAiB,iB,sBAGrB,WACI,MAAO,KAAI,QAAJ,M,kCAGX,YACI,sBAAiB,uBAAe,I,oCAGpC,YACI,sBAAiB,yBAAiB,I,mCAGtC,YACI,mBAAc,G,6BAGlB,WACI,mBAAc,M,gFA5XtB,WAEI,gB,wBAFJ,WAGI,8B,gCAHJ,WAKI,2B,0BALJ,mCAEI,qBACA,mCAEA,6B,sBALJ,0BAKI,MAFA,MADA,8BACA,qCAEA,kC,oBALJ,mHAEI,wBACA,oDAEA,8C,0BkHLA,cACI,QADwC,WAAyB,GAC7D,iBAAY,eAAS,G,CACrB,IAAI,EAAe,QAAQ,WAAY,E,CAGT,QAAZ,iB,KNwNV,MAAhB,IAAgB,4B,CAAA,eAAM,GMxN8B,MNwNhB,KMxNgB,U,CNwNN,EAAO,EAAP,SAC9C,EAAO,W,GMxNK,MAAM,OACF,eAAc,EAAd,gGAFJ,GAEI,KAJJ,iBAAY,aAAO,GAQ3B,iBAAY,UAAI,I,4BAGpB,YACI,iBAAY,aAAO,I,0BAGvB,WAAsB,wBAAY,M,8HAElC,6OAEI,UAA2B,WAC3B,UAAmC,WACnC,WAAoB,GAEpB,IAEgB,EAFhB,OAEgB,EAAZ,iB,KNiMQ,MAAhB,IAAgB,4B,CAAA,eAAM,GAAc,EMjMS,eAA+B,gB,CNiM9B,EAAO,EAAP,SAC9C,EAAO,W,GMnMH,QAEA,GAAa,MAAT,E,CACA,IAAI,EAGA,MAAM,MACF,6CAA0C,GAA1C,gCAA6E,EAA7E,KAHJ,oBAAO,GAOf,IAGI,EAHJ,EAAqB,cAAY,qBAC7B,EACA,GACA,kBAAE,WACF,OAA2B,EAAkB,GAA8B,GAC3E,UAAkB,IAClB,gBAGJ,OADA,kBAAK,EAAgB,GACd,O,sCAGX,YACI,iBAAY,aAAO,I,kCAGvB,WAC6B,IN+tBb,EM/tBa,EAAZ,iBNooBV,EAAS,IA2FhB,IAAgB,4B,CAAA,eAAoB,EM/tBK,QAAQ,mBN+tBH,EAAY,UAAI,GM/tB1D,MNguBG,EM/tBH,iBAAY,kBAAU,I,oCAMtB,WAAgC,cAAgB,2BAA+B,I,2EAHnF,0CiCvEJ,epCcI,MAAW,sBoCNX,OAAmB,IpCQZ,EAAK,aoCRa,eAQ7B,epC2CI,MAAW,sBACX,EoCvC+B,IAA/B,EpCwCO,MAAW,EAAQ,EAAK,coCvC/B,OAAO,MAAK,EAAO,MAAO,EAAO,SAAS,gBChBhC,iBAAC,sBAA+B,mBCR9C,eAIW,MAAP,OAAO,sBAAW,IAAX,EAAoB,MAG/B,eACI,MAAW,KAAkB,qBAAa,GAE1C,OADA,GxC0NA,YwC1NW,EAAQ,GACZ,ECPX,sBASI,aAA2B,K,0FpCN/B,WAG2B,uB,wBAH3B,WAGqD,oB,0BAHrD,iCAG2B,4BAA0B,sB,sBAHrD,iBAG2B,wDAA0B,oCAHrD,K,sBAAA,0BAGqD,MAA1B,qCAA0B,2B,oBAHrD,mHAG2B,sCAA0B,gC,oFkCCjD,czC0GJ,kDyC1GI,2BzCgH6C,WyC9GzC,UAAwB,WACxB,WAAoB,GzC6G2B,EyC1GzC,sFzC0GuE,iB,oFyCvGjF,sGxJrBA,oIwJqBA,gCACI,UAAwB,WACxB,WAAoB,GAGE,QAGlB,OAA2B,EAAkB,GAH3B,EAID,oBxJ1BrB,EAAkC,IwJsBlC,MxJnBO,MACH,EADG,KwJoBH,EACA,ExJrBG,SAOc,EADP,GwJoBd,OADY,EAAZ,iBAA0B,GACnB,O,sFAGX,sGxJCA,oIwJDA,gCACI,UAAwB,WACxB,WAAoB,GAGE,QAGlB,OAA2B,EAAkB,GAH3B,EAID,oBxJJrB,EAAkC,IwJAlC,MxJGO,MACH,EADG,KwJFH,EACA,ExJCG,UAOc,EADP,GwJFd,OADY,EAAZ,iBAA0B,GACnB,O,4EEhCX,WAA2B,gC3C4GkB,MAAM,E2C5GT,uC3C4GuC,Y2C5GtD,U,uBAE3B,WAAkC,qB,wBAElC,YACI,GAAI,mBACA,MAAM,OAA+B,+CAEzC,aAAQ,EAAgB,M,sBAG5B,WACI,wCACA,aAAQ,M,+BAIZ,YAGI,OAFA,gBAAS,GACT,EAAgB,uBACT,G,+BAGX,YACI,MAAsB,KAAgB,OAItC,OAHA,gBAAS,GACT,EAAe,GACf,EAAgB,uBACT,G,qCAGX,YACI,WAAM,oBAAY,EAAO,K,qCAG7B,YACI,WAAM,oBAAY,I,uCAGtB,YACI,WAAM,sBAAc,EAAO,K,uCAG/B,YACI,WAAM,sBAAc,I,8EAvD5B,0CCFiB,oBAAC,gBAA6B,aAAO,GCKtD,sB,yBDHI,cACQ,KAAK,MAAL,gBAAc,IAAd,GACA,EAAQ,IAAG,EAAH,KAAW,GAAX,IAAqB,I,mGCErC,YAAiD,SAAE,WAAF,EAAsC,EAAvB,IAAY,WAAW,CAAM,S,kCAC7F,YAA4D,MAAP,cAAO,EAAP,EAAO,YAAP,EAAqB,UAAU,EAAO,Y,wBAC3F,WACkC,OAAoB,EAApB,UAAO,cAAwB,Y,6BACjE,WAAqD,e,mCACrD,YAAiD,YAAxB,gBAAwB,OAAY,I,4BAC7D,WAA2C,a,kCAC3C,cAAyD,Y,iCACzD,WAAoD,Y,gFATxD,0C,sZCCA,YAGqE,YAAkB,iBAAiB,kBAAU,I,uQ7JxBlH,0C,61BDgHA,cACI,MAAY,YAAI,GAChB,IAAK,IAAU,EAAK,QAAQ,SACxB,MAAM,OACF,eAAc,EAAd,gFACG,GAAS,EAAK,QAAQ,WAC7B,eAAO,GACP,YAAI,K,8qB+JxGZ,qBAOW,WAA0B,QAAO,WAAoB,GAC5D,MAAa,OAAO,EAAgB,GAEpC,OADA,EAAkB,GACX,G,gNjBkBU,S,GYhBmC,KAAkB,sB,kDMjC1E,IAAI7nF,EAAW,GAAGA,SAElBtE,EAAOD,QAAUmD,MAAMC,SAAW,SAAU8B,GAC1C,MAA6B,kBAAtBX,EAAS5D,KAAKuE,K,6BCFvB,IAAIo3B,EAAS,EAAQ,GAAeA,OAChCulB,EAAY,EAAQ,KAAmBA,UAS3C,SAASotB,EAAU7jB,GACjBvJ,EAAUlhD,KAAKP,MAEfA,KAAKkrD,OAAShvB,EAAOM,YAAYwuB,GACjChrD,KAAKorD,WAAaJ,EAClBhrD,KAAKwvE,aAAe,EACpBxvE,KAAKyvE,QAAU,CAAC,EAAG,EAAG,EAAG,GAEzBzvE,KAAKisF,YAAa,EAhBL,EAAQ,EAmBvBzsD,CAASqvC,EAAUptB,GAEnBotB,EAAS7sE,UAAU6gD,WAAa,SAAU+K,EAAOlxB,EAAUjoB,GACzD,IAAI6xC,EAAQ,KACZ,IACEtmD,KAAKmiD,OAAOyL,EAAOlxB,GACnB,MAAOomB,GACPwD,EAAQxD,EAGVruC,EAAS6xC,IAGXuoB,EAAS7sE,UAAU+gD,OAAS,SAAUtuC,GACpC,IAAI6xC,EAAQ,KACZ,IACEtmD,KAAKge,KAAKhe,KAAKwrD,UACf,MAAO1I,GACPwD,EAAQxD,EAGVruC,EAAS6xC,IAGXuoB,EAAS7sE,UAAUmgD,OAAS,SAAU1sB,EAAMiH,GAE1C,GA3CF,SAAmC1wB,EAAKyM,GACtC,IAAKyjB,EAAOqZ,SAASvpC,IAAuB,iBAARA,EAClC,MAAM,IAAIqH,UAAUoF,EAAS,iCAwC/ByzE,CAAyBz2D,EAAM,QAC3Bz1B,KAAKisF,WAAY,MAAM,IAAI/kF,MAAM,yBAChCg1B,EAAOqZ,SAAS9f,KAAOA,EAAOyG,EAAO1b,KAAKiV,EAAMiH,IAKrD,IAFA,IAAIrP,EAAQrtB,KAAKkrD,OACbn3C,EAAS,EACN/T,KAAKwvE,aAAe/5C,EAAK9wB,OAASoP,GAAU/T,KAAKorD,YAAY,CAClE,IAAK,IAAIhrD,EAAIJ,KAAKwvE,aAAcpvE,EAAIJ,KAAKorD,YAAa/9B,EAAMjtB,KAAOq1B,EAAK1hB,KACxE/T,KAAKuiD,UACLviD,KAAKwvE,aAAe,EAEtB,KAAOz7D,EAAS0hB,EAAK9wB,QAAQ0oB,EAAMrtB,KAAKwvE,gBAAkB/5C,EAAK1hB,KAG/D,IAAK,IAAIkE,EAAI,EAAGgqB,EAAsB,EAAdxM,EAAK9wB,OAAYs9B,EAAQ,IAAKhqB,EACpDjY,KAAKyvE,QAAQx3D,IAAMgqB,GACnBA,EAASjiC,KAAKyvE,QAAQx3D,GAAK,WAAgB,GAC/B,IAAGjY,KAAKyvE,QAAQx3D,IAAM,WAAegqB,GAGnD,OAAOjiC,MAGT6uE,EAAS7sE,UAAUugD,QAAU,WAC3B,MAAM,IAAIr7C,MAAM,+BAGlB2nE,EAAS7sE,UAAUwpD,OAAS,SAAU9uB,GACpC,GAAI18B,KAAKisF,WAAY,MAAM,IAAI/kF,MAAM,yBACrClH,KAAKisF,YAAa,EAElB,IAAIzgC,EAASxrD,KAAKgwD,eACD7+C,IAAburB,IAAwB8uB,EAASA,EAAOrnD,SAASu4B,IAGrD18B,KAAKkrD,OAAO93C,KAAK,GACjBpT,KAAKwvE,aAAe,EACpB,IAAK,IAAIpvE,EAAI,EAAGA,EAAI,IAAKA,EAAGJ,KAAKyvE,QAAQrvE,GAAK,EAE9C,OAAOorD,GAGTqjB,EAAS7sE,UAAUguD,QAAU,WAC3B,MAAM,IAAI9oD,MAAM,+BAGlBrH,EAAOD,QAAUivE,G,8BC9FjB,cAyBA,IAAI3mB,EAHJroD,EAAOD,QAAUwoD,EAMjBA,EAAS+jC,cAAgBA,EAGhB,EAAQ,IAAUzoC,aAA3B,IAEI0oC,EAAkB,SAAyBzoC,EAASvtC,GACtD,OAAOutC,EAAQ3kB,UAAU5oB,GAAMzR,QAO7B4tE,EAAS,EAAQ,IAIjBr2C,EAAS,EAAQ,GAAUA,OAE3Bm3C,EAAgB76B,EAAOvD,YAAc,aAYzC,IAEIo3C,EAFAC,EAAY,EAAQ,KAKtBD,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAKV,IAcI7qC,EACA8qC,EACAhsE,EAhBAisE,EAAa,EAAQ,KAErBlZ,EAAc,EAAQ,IAGtBmZ,EADW,EAAQ,IACSA,iBAE5BC,EAAiB,EAAQ,IAAa9iC,MACtC+iC,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAOxD,EAAQ,EAAR,CAAoB3kC,EAAUmqB,GAE9B,IAAIya,EAAiBzZ,EAAYyZ,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASd,EAAc1mE,EAASsqD,EAAQ0D,GACtCvrB,EAASA,GAAU,EAAQ,IAC3BziC,EAAUA,GAAW,GAMG,kBAAbguD,IAAwBA,EAAW1D,aAAkB7nB,GAGhEloD,KAAK0zE,aAAejuD,EAAQiuD,WACxBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQynE,oBAG7DltF,KAAK6oD,cAAgB6jC,EAAiB1sF,KAAMylB,EAAS,wBAAyBguD,GAI9EzzE,KAAK8Y,OAAS,IAAI2zE,EAClBzsF,KAAK2E,OAAS,EACd3E,KAAKmtF,MAAQ,KACbntF,KAAKotF,WAAa,EAClBptF,KAAKqtF,QAAU,KACfrtF,KAAK2oD,OAAQ,EACb3oD,KAAKuwE,YAAa,EAClBvwE,KAAKstF,SAAU,EAKfttF,KAAKw0E,MAAO,EAGZx0E,KAAKutF,cAAe,EACpBvtF,KAAKwtF,iBAAkB,EACvBxtF,KAAKytF,mBAAoB,EACzBztF,KAAK0tF,iBAAkB,EACvB1tF,KAAK2tF,QAAS,EAEd3tF,KAAK4tF,WAAkC,IAAtBnoE,EAAQmoE,UAEzB5tF,KAAK6tF,cAAgBpoE,EAAQooE,YAE7B7tF,KAAK+oD,WAAY,EAIjB/oD,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAElDr0E,KAAK8tF,WAAa,EAElB9tF,KAAK+tF,aAAc,EACnB/tF,KAAKguF,QAAU,KACfhuF,KAAK08B,SAAW,KAEZjX,EAAQiX,WACLglB,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D1hD,KAAKguF,QAAU,IAAItsC,EAAcj8B,EAAQiX,UACzC18B,KAAK08B,SAAWjX,EAAQiX,UAI5B,SAAS0rB,EAAS3iC,GAEhB,GADAyiC,EAASA,GAAU,EAAQ,MACrBloD,gBAAgBooD,GAAW,OAAO,IAAIA,EAAS3iC,GAGrD,IAAIguD,EAAWzzE,gBAAgBkoD,EAC/BloD,KAAK8oD,eAAiB,IAAIqjC,EAAc1mE,EAASzlB,KAAMyzE,GAEvDzzE,KAAKuoD,UAAW,EAEZ9iC,IAC0B,mBAAjBA,EAAQsP,OAAqB/0B,KAAKiuF,MAAQxoE,EAAQsP,MAC9B,mBAApBtP,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,UAGrEpD,EAAOhyE,KAAKP,MAiEd,SAASkuF,EAAiBne,EAAQniB,EAAOlxB,EAAUyxD,EAAYC,GAC7D/B,EAAM,mBAAoBz+B,GAC1B,IAMMrH,EANFxjC,EAAQgtD,EAAOjnB,eAEnB,GAAc,OAAV8E,EACF7qC,EAAMuqE,SAAU,EAyOpB,SAAoBvd,EAAQhtD,GAE1B,GADAspE,EAAM,cACFtpE,EAAM4lC,MAAO,OAEjB,GAAI5lC,EAAMirE,QAAS,CACjB,IAAIpgC,EAAQ7qC,EAAMirE,QAAQr6E,MAEtBi6C,GAASA,EAAMjpD,SACjBoe,EAAMjK,OAAOkF,KAAK4vC,GAClB7qC,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,QAIjDoe,EAAM4lC,OAAQ,EAEV5lC,EAAMyxD,KAIR6Z,EAAate,IAGbhtD,EAAMwqE,cAAe,EAEhBxqE,EAAMyqE,kBACTzqE,EAAMyqE,iBAAkB,EACxBc,EAAcve,KAlQhBwe,CAAWxe,EAAQhtD,QAKnB,GAFKqrE,IAAgB7nC,EAmDzB,SAAsBxjC,EAAO6qC,GAC3B,IAAIrH,EAhQiBhhD,EAkQFqoD,EAjQZ1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAiQA,iBAAVzlB,QAAgCz8C,IAAVy8C,GAAwB7qC,EAAM2wD,aACtFntB,EAAK,IAAIqmC,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAeh/B,IAnQ/E,IAAuBroD,EAsQrB,OAAOghD,EA1DqBioC,CAAazrE,EAAO6qC,IAE1CrH,EACFymC,EAAejd,EAAQxpB,QAClB,GAAIxjC,EAAM2wD,YAAc9lB,GAASA,EAAMjpD,OAAS,EAKrD,GAJqB,iBAAVipD,GAAuB7qC,EAAM2wD,YAAc5yE,OAAOsU,eAAew4C,KAAW1xB,EAAOl6B,YAC5F4rD,EAtNR,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GAqNL0oB,CAAoB1oB,IAG1BugC,EACEprE,EAAMwtD,WAAYyc,EAAejd,EAAQ,IAAIgd,GAA2C0B,EAAS1e,EAAQhtD,EAAO6qC,GAAO,QACtH,GAAI7qC,EAAM4lC,MACfqkC,EAAejd,EAAQ,IAAI8c,OACtB,IAAI9pE,EAAMgmC,UACf,OAAO,EAEPhmC,EAAMuqE,SAAU,EAEZvqE,EAAMirE,UAAYtxD,GACpBkxB,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,GACxB7qC,EAAM2wD,YAA+B,IAAjB9lB,EAAMjpD,OAAc8pF,EAAS1e,EAAQhtD,EAAO6qC,GAAO,GAAY8gC,EAAc3e,EAAQhtD,IAE7G0rE,EAAS1e,EAAQhtD,EAAO6qC,GAAO,QAGzBugC,IACVprE,EAAMuqE,SAAU,EAChBoB,EAAc3e,EAAQhtD,IAO1B,OAAQA,EAAM4lC,QAAU5lC,EAAMpe,OAASoe,EAAM8lC,eAAkC,IAAjB9lC,EAAMpe,QAGtE,SAAS8pF,EAAS1e,EAAQhtD,EAAO6qC,EAAOugC,GAClCprE,EAAMsqE,SAA4B,IAAjBtqE,EAAMpe,SAAiBoe,EAAMyxD,MAChDzxD,EAAM+qE,WAAa,EACnB/d,EAAOlxC,KAAK,OAAQ+uB,KAGpB7qC,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACzCwpF,EAAYprE,EAAMjK,OAAOosC,QAAQ0I,GAAY7qC,EAAMjK,OAAOkF,KAAK4vC,GAC/D7qC,EAAMwqE,cAAcc,EAAate,IAGvC2e,EAAc3e,EAAQhtD,GAvHxBjiB,OAAOC,eAAeqnD,EAASpmD,UAAW,YAAa,CAIrDhB,YAAY,EACZC,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK8oD,gBAIF9oD,KAAK8oD,eAAeC,WAE7B1jD,IAAK,SAAahE,GAGXrB,KAAK8oD,iBAMV9oD,KAAK8oD,eAAeC,UAAY1nD,MAGpC+mD,EAASpmD,UAAU2zE,QAAUpC,EAAYoC,QACzCvtB,EAASpmD,UAAUi1E,WAAa1D,EAAY2D,UAE5C9uB,EAASpmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CA,EAAGnG,IAOLsF,EAASpmD,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GACzC,IACI0xD,EADArrE,EAAQ/iB,KAAK8oD,eAkBjB,OAfK/lC,EAAM2wD,WAYT0a,GAAiB,EAXI,iBAAVxgC,KACTlxB,EAAWA,GAAY3Z,EAAMsxD,mBAEZtxD,EAAM2Z,WACrBkxB,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,GAC3BA,EAAW,IAGb0xD,GAAiB,GAMdF,EAAiBluF,KAAM4tD,EAAOlxB,GAAU,EAAO0xD,IAIxDhmC,EAASpmD,UAAUkjD,QAAU,SAAU0I,GACrC,OAAOsgC,EAAiBluF,KAAM4tD,EAAO,MAAM,GAAM,IAyEnDxF,EAASpmD,UAAU2sF,SAAW,WAC5B,OAAuC,IAAhC3uF,KAAK8oD,eAAeukC,SAI7BjlC,EAASpmD,UAAU4sF,YAAc,SAAUnwC,GACpCiD,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D,IAAIssC,EAAU,IAAItsC,EAAcjD,GAChCz+C,KAAK8oD,eAAeklC,QAAUA,EAE9BhuF,KAAK8oD,eAAepsB,SAAW18B,KAAK8oD,eAAeklC,QAAQtxD,SAK3D,IAHA,IAAIx6B,EAAIlC,KAAK8oD,eAAehwC,OAAO+nC,KAC/B/7B,EAAU,GAED,OAAN5iB,GACL4iB,GAAWkpE,EAAQvqE,MAAMvhB,EAAEuzB,MAC3BvzB,EAAIA,EAAEwV,KAOR,OAJA1X,KAAK8oD,eAAehwC,OAAOyH,QAEX,KAAZuE,GAAgB9kB,KAAK8oD,eAAehwC,OAAOkF,KAAK8G,GACpD9kB,KAAK8oD,eAAenkD,OAASmgB,EAAQngB,OAC9B3E,MA2BT,SAAS6uF,EAAchtF,EAAGkhB,GACxB,OAAIlhB,GAAK,GAAsB,IAAjBkhB,EAAMpe,QAAgBoe,EAAM4lC,MAAc,EACpD5lC,EAAM2wD,WAAmB,EAEzB7xE,GAAMA,EAEJkhB,EAAMsqE,SAAWtqE,EAAMpe,OAAeoe,EAAMjK,OAAO+nC,KAAKprB,KAAK9wB,OAAmBoe,EAAMpe,QAIxF9C,EAAIkhB,EAAM8lC,gBAAe9lC,EAAM8lC,cA/BrC,SAAiChnD,GAgB/B,OAfIA,GAHQ,WAKVA,EALU,YASVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,EAe4CitF,CAAwBjtF,IACvEA,GAAKkhB,EAAMpe,OAAe9C,EAEzBkhB,EAAM4lC,MAKJ5lC,EAAMpe,QAJXoe,EAAMwqE,cAAe,EACd,IAwIX,SAASc,EAAate,GACpB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,eAAgBtpE,EAAMwqE,aAAcxqE,EAAMyqE,iBAChDzqE,EAAMwqE,cAAe,EAEhBxqE,EAAMyqE,kBACTnB,EAAM,eAAgBtpE,EAAMsqE,SAC5BtqE,EAAMyqE,iBAAkB,EACxB/jE,EAAQsU,SAASuwD,EAAeve,IAIpC,SAASue,EAAcve,GACrB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,gBAAiBtpE,EAAMgmC,UAAWhmC,EAAMpe,OAAQoe,EAAM4lC,OAEvD5lC,EAAMgmC,YAAchmC,EAAMpe,SAAUoe,EAAM4lC,QAC7ConB,EAAOlxC,KAAK,YACZ9b,EAAMyqE,iBAAkB,GAS1BzqE,EAAMwqE,cAAgBxqE,EAAMsqE,UAAYtqE,EAAM4lC,OAAS5lC,EAAMpe,QAAUoe,EAAM8lC,cAC7E4c,EAAKsK,GASP,SAAS2e,EAAc3e,EAAQhtD,GACxBA,EAAMgrE,cACThrE,EAAMgrE,aAAc,EACpBtkE,EAAQsU,SAASgxD,EAAgBhf,EAAQhtD,IAI7C,SAASgsE,EAAehf,EAAQhtD,GAwB9B,MAAQA,EAAMuqE,UAAYvqE,EAAM4lC,QAAU5lC,EAAMpe,OAASoe,EAAM8lC,eAAiB9lC,EAAMsqE,SAA4B,IAAjBtqE,EAAMpe,SAAe,CACpH,IAAI4O,EAAMwP,EAAMpe,OAGhB,GAFA0nF,EAAM,wBACNtc,EAAOh7C,KAAK,GACRxhB,IAAQwP,EAAMpe,OAChB,MAGJoe,EAAMgrE,aAAc,EA6QtB,SAASiB,EAAwBz6E,GAC/B,IAAIwO,EAAQxO,EAAKu0C,eACjB/lC,EAAM0qE,kBAAoBl5E,EAAKwxC,cAAc,YAAc,EAEvDhjC,EAAM2qE,kBAAoB3qE,EAAM4qE,OAGlC5qE,EAAMsqE,SAAU,EACP94E,EAAKwxC,cAAc,QAAU,GACtCxxC,EAAK06E,SAIT,SAASC,EAAiB36E,GACxB83E,EAAM,4BACN93E,EAAKwgB,KAAK,GA4BZ,SAASo6D,EAAQpf,EAAQhtD,GACvBspE,EAAM,SAAUtpE,EAAMuqE,SAEjBvqE,EAAMuqE,SACTvd,EAAOh7C,KAAK,GAGdhS,EAAM2qE,iBAAkB,EACxB3d,EAAOlxC,KAAK,UACZ4mC,EAAKsK,GACDhtD,EAAMsqE,UAAYtqE,EAAMuqE,SAASvd,EAAOh7C,KAAK,GAgBnD,SAAS0wC,EAAKsK,GACZ,IAAIhtD,EAAQgtD,EAAOjnB,eAGnB,IAFAujC,EAAM,OAAQtpE,EAAMsqE,SAEbtqE,EAAMsqE,SAA6B,OAAlBtd,EAAOh7C,UA4HjC,SAASq6D,EAASvtF,EAAGkhB,GAEnB,OAAqB,IAAjBA,EAAMpe,OAAqB,MAE3Boe,EAAM2wD,WAAYhxC,EAAM3f,EAAMjK,OAAO21B,SAAkB5sC,GAAKA,GAAKkhB,EAAMpe,QAEtD+9B,EAAf3f,EAAMirE,QAAejrE,EAAMjK,OAAOtU,KAAK,IAAqC,IAAxBue,EAAMjK,OAAOnU,OAAoBoe,EAAMjK,OAAOG,QAAmB8J,EAAMjK,OAAO+H,OAAOkC,EAAMpe,QACnJoe,EAAMjK,OAAOyH,SAGbmiB,EAAM3f,EAAMjK,OAAOu2E,QAAQxtF,EAAGkhB,EAAMirE,SAE/BtrD,GATP,IAAIA,EAYN,SAAS4sD,EAAYvf,GACnB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,cAAetpE,EAAMwtD,YAEtBxtD,EAAMwtD,aACTxtD,EAAM4lC,OAAQ,EACdl/B,EAAQsU,SAASwxD,EAAexsE,EAAOgtD,IAI3C,SAASwf,EAAcxsE,EAAOgtD,GAG5B,GAFAsc,EAAM,gBAAiBtpE,EAAMwtD,WAAYxtD,EAAMpe,SAE1Coe,EAAMwtD,YAA+B,IAAjBxtD,EAAMpe,SAC7Boe,EAAMwtD,YAAa,EACnBR,EAAOxnB,UAAW,EAClBwnB,EAAOlxC,KAAK,OAER9b,EAAM8qE,aAAa,CAGrB,IAAI2B,EAASzf,EAAOrnB,iBAEf8mC,GAAUA,EAAO3B,aAAe2B,EAAOnf,WAC1CN,EAAO4F,WAgBf,SAAS1rE,EAAQwlF,EAAI9+E,GACnB,IAAK,IAAIvQ,EAAI,EAAGC,EAAIovF,EAAG9qF,OAAQvE,EAAIC,EAAGD,IACpC,GAAIqvF,EAAGrvF,KAAOuQ,EAAG,OAAOvQ,EAG1B,OAAQ,EA3tBVgoD,EAASpmD,UAAU+yB,KAAO,SAAUlzB,GAClCwqF,EAAM,OAAQxqF,GACdA,EAAIyI,SAASzI,EAAG,IAChB,IAAIkhB,EAAQ/iB,KAAK8oD,eACb4mC,EAAQ7tF,EAKZ,GAJU,IAANA,IAASkhB,EAAMyqE,iBAAkB,GAI3B,IAAN3rF,GAAWkhB,EAAMwqE,gBAA0C,IAAxBxqE,EAAM8lC,cAAsB9lC,EAAMpe,QAAUoe,EAAM8lC,cAAgB9lC,EAAMpe,OAAS,IAAMoe,EAAM4lC,OAGlI,OAFA0jC,EAAM,qBAAsBtpE,EAAMpe,OAAQoe,EAAM4lC,OAC3B,IAAjB5lC,EAAMpe,QAAgBoe,EAAM4lC,MAAO2mC,EAAYtvF,MAAWquF,EAAaruF,MACpE,KAKT,GAAU,KAFV6B,EAAIgtF,EAAchtF,EAAGkhB,KAENA,EAAM4lC,MAEnB,OADqB,IAAjB5lC,EAAMpe,QAAc2qF,EAAYtvF,MAC7B,KAyBT,IA4BI0iC,EA5BAitD,EAAS5sE,EAAMwqE,aAgDnB,OA/CAlB,EAAM,gBAAiBsD,IAEF,IAAjB5sE,EAAMpe,QAAgBoe,EAAMpe,OAAS9C,EAAIkhB,EAAM8lC,gBAEjDwjC,EAAM,6BADNsD,GAAS,GAMP5sE,EAAM4lC,OAAS5lC,EAAMuqE,QAEvBjB,EAAM,mBADNsD,GAAS,GAEAA,IACTtD,EAAM,WACNtpE,EAAMuqE,SAAU,EAChBvqE,EAAMyxD,MAAO,EAEQ,IAAjBzxD,EAAMpe,SAAcoe,EAAMwqE,cAAe,GAE7CvtF,KAAKiuF,MAAMlrE,EAAM8lC,eAEjB9lC,EAAMyxD,MAAO,EAGRzxD,EAAMuqE,UAASzrF,EAAIgtF,EAAca,EAAO3sE,KAMnC,QAFD2f,EAAP7gC,EAAI,EAASutF,EAASvtF,EAAGkhB,GAAkB,OAG7CA,EAAMwqE,aAAexqE,EAAMpe,QAAUoe,EAAM8lC,cAC3ChnD,EAAI,IAEJkhB,EAAMpe,QAAU9C,EAChBkhB,EAAM+qE,WAAa,GAGA,IAAjB/qE,EAAMpe,SAGHoe,EAAM4lC,QAAO5lC,EAAMwqE,cAAe,GAEnCmC,IAAU7tF,GAAKkhB,EAAM4lC,OAAO2mC,EAAYtvF,OAGlC,OAAR0iC,GAAc1iC,KAAK6+B,KAAK,OAAQ6D,GAC7BA,GAwHT0lB,EAASpmD,UAAUisF,MAAQ,SAAUpsF,GACnCmrF,EAAehtF,KAAM,IAAI8sF,EAA2B,aAGtD1kC,EAASpmD,UAAUq0E,KAAO,SAAU/0C,EAAMsuD,GACxC,IAAI9yE,EAAM9c,KACN+iB,EAAQ/iB,KAAK8oD,eAEjB,OAAQ/lC,EAAMqqE,YACZ,KAAK,EACHrqE,EAAMoqE,MAAQ7rD,EACd,MAEF,KAAK,EACHve,EAAMoqE,MAAQ,CAACpqE,EAAMoqE,MAAO7rD,GAC5B,MAEF,QACEve,EAAMoqE,MAAMnvE,KAAKsjB,GAIrBve,EAAMqqE,YAAc,EACpBf,EAAM,wBAAyBtpE,EAAMqqE,WAAYwC,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASj8E,MAAkB2tB,IAAS7X,EAAQqmE,QAAUxuD,IAAS7X,EAAQsmE,OAC7EtnC,EAAQunC,EAI5B,SAASC,EAAS1nC,EAAU2nC,GAC1B7D,EAAM,YAEF9jC,IAAazrC,GACXozE,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5B9D,EAAM,WAEN/qD,EAAK3C,eAAe,QAAS8xC,GAC7BnvC,EAAK3C,eAAe,SAAUwxC,GAC9B7uC,EAAK3C,eAAe,QAASyxD,GAC7B9uD,EAAK3C,eAAe,QAAS6xC,GAC7BlvC,EAAK3C,eAAe,SAAUsxD,GAC9BnzE,EAAI6hB,eAAe,MAAO8pB,GAC1B3rC,EAAI6hB,eAAe,MAAOqxD,GAC1BlzE,EAAI6hB,eAAe,OAAQ0xD,GAC3BC,GAAY,GAMRvtE,EAAM+qE,YAAgBxsD,EAAKonB,iBAAkBpnB,EAAKonB,eAAeurB,WAAYmc,KA9BnF,SAAS3nC,IACP4jC,EAAM,SACN/qD,EAAK3tB,MAhBHoP,EAAMwtD,WAAY9mD,EAAQsU,SAAS8xD,GAAY/yE,EAAI2hB,KAAK,MAAOoxD,GACnEvuD,EAAK/C,GAAG,SAAU0xD,GAsBlB,IAAIG,EAwFN,SAAqBtzE,GACnB,OAAO,WACL,IAAIiG,EAAQjG,EAAIgsC,eAChBujC,EAAM,cAAetpE,EAAM+qE,YACvB/qE,EAAM+qE,YAAY/qE,EAAM+qE,aAEH,IAArB/qE,EAAM+qE,YAAoB1B,EAAgBtvE,EAAK,UACjDiG,EAAMsqE,SAAU,EAChB5nB,EAAK3oD,KAhGKyzE,CAAYzzE,GAC1BwkB,EAAK/C,GAAG,QAAS6xD,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAOziC,GACdy+B,EAAM,UACN,IAAI3pD,EAAMpB,EAAK7d,MAAMmqC,GACrBy+B,EAAM,aAAc3pD,IAER,IAARA,KAKwB,IAArB3f,EAAMqqE,YAAoBrqE,EAAMoqE,QAAU7rD,GAAQve,EAAMqqE,WAAa,IAAqC,IAAhCnjF,EAAQ8Y,EAAMoqE,MAAO7rD,MAAkBgvD,IACpHjE,EAAM,8BAA+BtpE,EAAM+qE,YAC3C/qE,EAAM+qE,cAGRhxE,EAAI0zE,SAMR,SAAShgB,EAAQjqB,GACf8lC,EAAM,UAAW9lC,GACjBypC,IACA1uD,EAAK3C,eAAe,QAAS6xC,GACU,IAAnC4b,EAAgB9qD,EAAM,UAAgB0rD,EAAe1rD,EAAMilB,GAMjE,SAASkqB,IACPnvC,EAAK3C,eAAe,SAAUwxC,GAC9B6f,IAKF,SAAS7f,IACPkc,EAAM,YACN/qD,EAAK3C,eAAe,QAAS8xC,GAC7Buf,IAKF,SAASA,IACP3D,EAAM,UACNvvE,EAAIkzE,OAAO1uD,GAWb,OA7DAxkB,EAAIyhB,GAAG,OAAQ8xD,GAtkBjB,SAAyB1sC,EAAS8sC,EAAO3+B,GAGvC,GAAuC,mBAA5BnO,EAAQ7kB,gBAAgC,OAAO6kB,EAAQ7kB,gBAAgB2xD,EAAO3+B,GAKpFnO,EAAQU,SAAYV,EAAQU,QAAQosC,GAAuC1tF,MAAMC,QAAQ2gD,EAAQU,QAAQosC,IAAS9sC,EAAQU,QAAQosC,GAAOvrC,QAAQ4M,GAASnO,EAAQU,QAAQosC,GAAS,CAAC3+B,EAAInO,EAAQU,QAAQosC,IAA5J9sC,EAAQplB,GAAGkyD,EAAO3+B,GA6lBnEhzB,CAAgBwC,EAAM,QAASkvC,GAO/BlvC,EAAK7C,KAAK,QAASgyC,GAQnBnvC,EAAK7C,KAAK,SAAU0xC,GAQpB7uC,EAAKzC,KAAK,OAAQ/hB,GAEbiG,EAAMsqE,UACThB,EAAM,eACNvvE,EAAImyE,UAGC3tD,GAgBT8mB,EAASpmD,UAAUguF,OAAS,SAAU1uD,GACpC,IAAIve,EAAQ/iB,KAAK8oD,eACbonC,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBptE,EAAMqqE,WAAkB,OAAOptF,KAEnC,GAAyB,IAArB+iB,EAAMqqE,WAER,OAAI9rD,GAAQA,IAASve,EAAMoqE,QACtB7rD,IAAMA,EAAOve,EAAMoqE,OAExBpqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EACZ/rD,GAAMA,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IANKlwF,KAW3C,IAAKshC,EAAM,CAET,IAAIovD,EAAQ3tE,EAAMoqE,MACd55E,EAAMwP,EAAMqqE,WAChBrqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EAEhB,IAAK,IAAIjtF,EAAI,EAAGA,EAAImT,EAAKnT,IACvBswF,EAAMtwF,GAAGy+B,KAAK,SAAU7+B,KAAM,CAC5BmwF,YAAY,IAIhB,OAAOnwF,KAIT,IAAI6W,EAAQ5M,EAAQ8Y,EAAMoqE,MAAO7rD,GACjC,OAAe,IAAXzqB,IACJkM,EAAMoqE,MAAMvsE,OAAO/J,EAAO,GAC1BkM,EAAMqqE,YAAc,EACK,IAArBrqE,EAAMqqE,aAAkBrqE,EAAMoqE,MAAQpqE,EAAMoqE,MAAM,IACtD7rD,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IAJDlwF,MAU3BooD,EAASpmD,UAAUu8B,GAAK,SAAUoyD,EAAI7+B,GACpC,IAAIlkD,EAAM2kE,EAAOvwE,UAAUu8B,GAAGh+B,KAAKP,KAAM2wF,EAAI7+B,GACzC/uC,EAAQ/iB,KAAK8oD,eAuBjB,MArBW,SAAP6nC,GAGF5tE,EAAM0qE,kBAAoBztF,KAAK+lD,cAAc,YAAc,GAErC,IAAlBhjC,EAAMsqE,SAAmBrtF,KAAKivF,UAClB,aAAP0B,IACJ5tE,EAAMwtD,YAAextD,EAAM0qE,oBAC9B1qE,EAAM0qE,kBAAoB1qE,EAAMwqE,cAAe,EAC/CxqE,EAAMsqE,SAAU,EAChBtqE,EAAMyqE,iBAAkB,EACxBnB,EAAM,cAAetpE,EAAMpe,OAAQoe,EAAMuqE,SAErCvqE,EAAMpe,OACR0pF,EAAaruF,MACH+iB,EAAMuqE,SAChB7jE,EAAQsU,SAASmxD,EAAkBlvF,QAKlC4N,GAGTw6C,EAASpmD,UAAUw8B,YAAc4pB,EAASpmD,UAAUu8B,GAEpD6pB,EAASpmD,UAAU28B,eAAiB,SAAUgyD,EAAI7+B,GAChD,IAAIlkD,EAAM2kE,EAAOvwE,UAAU28B,eAAep+B,KAAKP,KAAM2wF,EAAI7+B,GAYzD,MAVW,aAAP6+B,GAOFlnE,EAAQsU,SAASixD,EAAyBhvF,MAGrC4N,GAGTw6C,EAASpmD,UAAU48B,mBAAqB,SAAU+xD,GAChD,IAAI/iF,EAAM2kE,EAAOvwE,UAAU48B,mBAAmBnvB,MAAMzP,KAAM0P,WAY1D,MAVW,aAAPihF,QAA4Bx/E,IAAPw/E,GAOvBlnE,EAAQsU,SAASixD,EAAyBhvF,MAGrC4N,GAuBTw6C,EAASpmD,UAAUitF,OAAS,WAC1B,IAAIlsE,EAAQ/iB,KAAK8oD,eAYjB,OAVK/lC,EAAMsqE,UACThB,EAAM,UAINtpE,EAAMsqE,SAAWtqE,EAAM0qE,kBAQ3B,SAAgB1d,EAAQhtD,GACjBA,EAAM2qE,kBACT3qE,EAAM2qE,iBAAkB,EACxBjkE,EAAQsU,SAASoxD,EAASpf,EAAQhtD,IAVlCksE,CAAOjvF,KAAM+iB,IAGfA,EAAM4qE,QAAS,EACR3tF,MAuBTooD,EAASpmD,UAAUwuF,MAAQ,WAUzB,OATAnE,EAAM,wBAAyBrsF,KAAK8oD,eAAeukC,UAEf,IAAhCrtF,KAAK8oD,eAAeukC,UACtBhB,EAAM,SACNrsF,KAAK8oD,eAAeukC,SAAU,EAC9BrtF,KAAK6+B,KAAK,UAGZ7+B,KAAK8oD,eAAe6kC,QAAS,EACtB3tF,MAeTooD,EAASpmD,UAAU4uF,KAAO,SAAU7gB,GAClC,IAAI2C,EAAQ1yE,KAER+iB,EAAQ/iB,KAAK8oD,eACb6kC,GAAS,EA0Bb,IAAK,IAAIvtF,KAzBT2vE,EAAOxxC,GAAG,OAAO,WAGf,GAFA8tD,EAAM,eAEFtpE,EAAMirE,UAAYjrE,EAAM4lC,MAAO,CACjC,IAAIiF,EAAQ7qC,EAAMirE,QAAQr6E,MACtBi6C,GAASA,EAAMjpD,QAAQ+tE,EAAM10D,KAAK4vC,GAGxC8kB,EAAM10D,KAAK,SAEb+xD,EAAOxxC,GAAG,QAAQ,SAAUqvB,IAC1By+B,EAAM,gBACFtpE,EAAMirE,UAASpgC,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,IAE3C7qC,EAAM2wD,YAAc,MAAC9lB,KAAyD7qC,EAAM2wD,YAAgB9lB,GAAUA,EAAMjpD,UAE9G+tE,EAAM10D,KAAK4vC,KAGnB+/B,GAAS,EACT5d,EAAOygB,aAKGzgB,OACI5+D,IAAZnR,KAAKI,IAAyC,mBAAd2vE,EAAO3vE,KACzCJ,KAAKI,GAAK,SAAoBkoD,GAC5B,OAAO,WACL,OAAOynB,EAAOznB,GAAQ74C,MAAMsgE,EAAQrgE,YAF9B,CAIRtP,IAKN,IAAK,IAAIyB,EAAI,EAAGA,EAAIorF,EAAatoF,OAAQ9C,IACvCkuE,EAAOxxC,GAAG0uD,EAAaprF,GAAI7B,KAAK6+B,KAAKj9B,KAAK5B,KAAMitF,EAAaprF,KAc/D,OATA7B,KAAKiuF,MAAQ,SAAUpsF,GACrBwqF,EAAM,gBAAiBxqF,GAEnB8rF,IACFA,GAAS,EACT5d,EAAOkf,WAIJjvF,MAGa,mBAAXmB,SACTinD,EAASpmD,UAAUb,OAAO0vF,eAAiB,WAKzC,YAJ0C1/E,IAAtCq7E,IACFA,EAAoC,EAAQ,MAGvCA,EAAkCxsF,QAI7Cc,OAAOC,eAAeqnD,EAASpmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAeD,iBAG/B/nD,OAAOC,eAAeqnD,EAASpmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,gBAAkB9oD,KAAK8oD,eAAehwC,UAGtDhY,OAAOC,eAAeqnD,EAASpmD,UAAW,kBAAmB,CAI3DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAeukC,SAE7BhoF,IAAK,SAAa0d,GACZ/iB,KAAK8oD,iBACP9oD,KAAK8oD,eAAeukC,QAAUtqE,MAKpCqlC,EAAS0oC,UAAY1B,EACrBtuF,OAAOC,eAAeqnD,EAASpmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAenkD,UAoDT,mBAAXxD,SACTinD,EAAS5nC,KAAO,SAAUuwE,EAAU/gB,GAKlC,YAJa7+D,IAATqP,IACFA,EAAO,EAAQ,MAGVA,EAAK4nC,EAAU2oC,EAAU/gB,O,sCCzlCpCnwE,EAAOD,QAAU,EAAQ,IAAU8jD,c,8BCAnC,YAuDA,SAASstC,EAAoBz8E,EAAMuuC,GACjCmuC,EAAY18E,EAAMuuC,GAClBouC,EAAY38E,GAGd,SAAS28E,EAAY38E,GACfA,EAAKm0C,iBAAmBn0C,EAAKm0C,eAAeklC,WAC5Cr5E,EAAKu0C,iBAAmBv0C,EAAKu0C,eAAe8kC,WAChDr5E,EAAKsqB,KAAK,SAsBZ,SAASoyD,EAAY18E,EAAMuuC,GACzBvuC,EAAKsqB,KAAK,QAASikB,GAcrBjjD,EAAOD,QAAU,CACf+1E,QAnGF,SAAiB7yB,EAAKmG,GACpB,IAAIypB,EAAQ1yE,KAERmxF,EAAoBnxF,KAAK8oD,gBAAkB9oD,KAAK8oD,eAAeC,UAC/DqoC,EAAoBpxF,KAAK0oD,gBAAkB1oD,KAAK0oD,eAAeK,UAEnE,OAAIooC,GAAqBC,GACnBnoC,EACFA,EAAGnG,GACMA,IACJ9iD,KAAK0oD,eAEE1oD,KAAK0oD,eAAeqsB,eAC9B/0E,KAAK0oD,eAAeqsB,cAAe,EACnCtrD,EAAQsU,SAASkzD,EAAajxF,KAAM8iD,IAHpCr5B,EAAQsU,SAASkzD,EAAajxF,KAAM8iD,IAOjC9iD,OAKLA,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,GAI9B/oD,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,GAGlC/oD,KAAKgpD,SAASlG,GAAO,MAAM,SAAUA,IAC9BmG,GAAMnG,EACJ4vB,EAAMhqB,eAECgqB,EAAMhqB,eAAeqsB,aAI/BtrD,EAAQsU,SAASmzD,EAAaxe,IAH9BA,EAAMhqB,eAAeqsB,cAAe,EACpCtrD,EAAQsU,SAASizD,EAAqBte,EAAO5vB,IAH7Cr5B,EAAQsU,SAASizD,EAAqBte,EAAO5vB,GAOtCmG,GACTx/B,EAAQsU,SAASmzD,EAAaxe,GAC9BzpB,EAAGnG,IAEHr5B,EAAQsU,SAASmzD,EAAaxe,MAI3B1yE,OAkDPk3E,UApCF,WACMl3E,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,EAChC/oD,KAAK8oD,eAAewkC,SAAU,EAC9BttF,KAAK8oD,eAAeH,OAAQ,EAC5B3oD,KAAK8oD,eAAeynB,YAAa,GAG/BvwE,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,EAChC/oD,KAAK0oD,eAAeC,OAAQ,EAC5B3oD,KAAK0oD,eAAewrB,QAAS,EAC7Bl0E,KAAK0oD,eAAesrB,aAAc,EAClCh0E,KAAK0oD,eAAe4sB,aAAc,EAClCt1E,KAAK0oD,eAAe2nB,UAAW,EAC/BrwE,KAAK0oD,eAAeqsB,cAAe,IAsBrCiY,eAdF,SAAwBjd,EAAQjtB,GAM9B,IAAIuuC,EAASthB,EAAOjnB,eAChB0mC,EAASzf,EAAOrnB,eAChB2oC,GAAUA,EAAOxD,aAAe2B,GAAUA,EAAO3B,YAAa9d,EAAO4F,QAAQ7yB,GAAUitB,EAAOlxC,KAAK,QAASikB,O,8CC/FlH,IAAIwuC,EAAwB,EAAQ,IAAmBznC,MAAMynC,sBAsB7DzxF,EAAOD,QAAU,CACf8sF,iBAjBF,SAA0B3pE,EAAO0C,EAAS8rE,EAAW9d,GACnD,IAAIG,EALN,SAA2BnuD,EAASguD,EAAU8d,GAC5C,OAAgC,MAAzB9rE,EAAQojC,cAAwBpjC,EAAQojC,cAAgB4qB,EAAWhuD,EAAQ8rE,GAAa,KAIrFC,CAAkB/rE,EAASguD,EAAU8d,GAE/C,GAAW,MAAP3d,EAAa,CACf,IAAM1hE,SAAS0hE,IAAQ7sE,KAAK+G,MAAM8lE,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI0d,EADC7d,EAAW8d,EAAY,gBACI3d,GAGxC,OAAO7sE,KAAK+G,MAAM8lE,GAIpB,OAAO7wD,EAAM2wD,WAAa,GAAK,S,8BCrBjC,cAqCA,SAASjB,EAAc1vD,GACrB,IAAI2vD,EAAQ1yE,KAEZA,KAAK0X,KAAO,KACZ1X,KAAK0gB,MAAQ,KAEb1gB,KAAK2yE,OAAS,YAimBhB,SAAwBC,EAAS7vD,EAAO+/B,GACtC,IAAIpiC,EAAQkyD,EAAQlyD,MACpBkyD,EAAQlyD,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIuoC,EAAKvoC,EAAMjM,SACfsO,EAAM8vD,YACN5pB,EAAGnG,GACHpiC,EAAQA,EAAMhJ,KAIhBqL,EAAM+vD,mBAAmBp7D,KAAOk7D,EA5mB9BG,CAAeL,EAAO3vD,IAQ1B,IAAImlC,EA3BJroD,EAAOD,QAAUyoD,EA8BjBA,EAAS6qB,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW,EAAQ,KAMjBb,EAAS,EAAQ,IAIjBr2C,EAAS,EAAQ,GAAUA,OAE3Bm3C,EAAgB76B,EAAOvD,YAAc,aAUzC,IAkIIq+B,EAlIAC,EAAc,EAAQ,IAGtBmZ,EADW,EAAQ,IACSA,iBAE5BC,EAAiB,EAAQ,IAAa9iC,MACtC+iC,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5C2E,EAAwB9E,EAAe8E,sBACvCC,EAAyB/E,EAAe+E,uBACxCC,EAAuBhF,EAAegF,qBACtCC,EAAyBjF,EAAeiF,uBACxCC,EAA6BlF,EAAekF,2BAC5CC,EAAuBnF,EAAemF,qBAEtC9E,EAAiBzZ,EAAYyZ,eAIjC,SAASxZ,KAET,SAASN,EAAcztD,EAASsqD,EAAQ0D,GACtCvrB,EAASA,GAAU,EAAQ,IAC3BziC,EAAUA,GAAW,GAMG,kBAAbguD,IAAwBA,EAAW1D,aAAkB7nB,GAGhEloD,KAAK0zE,aAAejuD,EAAQiuD,WACxBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQkuD,oBAI7D3zE,KAAK6oD,cAAgB6jC,EAAiB1sF,KAAMylB,EAAS,wBAAyBguD,GAE9EzzE,KAAKg0E,aAAc,EAEnBh0E,KAAKi0E,WAAY,EAEjBj0E,KAAKk0E,QAAS,EAEdl0E,KAAK2oD,OAAQ,EAEb3oD,KAAKqwE,UAAW,EAEhBrwE,KAAK+oD,WAAY,EAIjB,IAAIorB,GAAqC,IAA1B1uD,EAAQ2uD,cACvBp0E,KAAKo0E,eAAiBD,EAItBn0E,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAIlDr0E,KAAK2E,OAAS,EAEd3E,KAAKs0E,SAAU,EAEft0E,KAAKu0E,OAAS,EAKdv0E,KAAKw0E,MAAO,EAIZx0E,KAAKy0E,kBAAmB,EAExBz0E,KAAK00E,QAAU,SAAUnuB,IA6R3B,SAAiBwpB,EAAQxpB,GACvB,IAAIxjC,EAAQgtD,EAAOrnB,eACf8rB,EAAOzxD,EAAMyxD,KACbvrB,EAAKlmC,EAAM4xD,QACf,GAAkB,mBAAP1rB,EAAmB,MAAM,IAAIwoC,EAExC,GAbF,SAA4B1uE,GAC1BA,EAAMuxD,SAAU,EAChBvxD,EAAM4xD,QAAU,KAChB5xD,EAAMpe,QAAUoe,EAAM6xD,SACtB7xD,EAAM6xD,SAAW,EAQjBC,CAAmB9xD,GACfwjC,GArCN,SAAsBwpB,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,KAC3ClmC,EAAM8vD,UAEJ2B,GAGF/qD,EAAQsU,SAASkrB,EAAI1C,GAGrB98B,EAAQsU,SAAS+2C,EAAa/E,EAAQhtD,GACtCgtD,EAAOrnB,eAAeqsB,cAAe,EACrCiY,EAAejd,EAAQxpB,KAIvB0C,EAAG1C,GACHwpB,EAAOrnB,eAAeqsB,cAAe,EACrCiY,EAAejd,EAAQxpB,GAGvBuuB,EAAY/E,EAAQhtD,IAiBdiyD,CAAajF,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,OAAS,CAErD,IAAIonB,EAAW4E,EAAWlyD,IAAUgtD,EAAOhnB,UAEtCsnB,GAAattD,EAAMwxD,QAAWxxD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBACjEC,EAAYpF,EAAQhtD,GAGlByxD,EACF/qD,EAAQsU,SAASq3C,EAAYrF,EAAQhtD,EAAOstD,EAAUpnB,GAEtDmsB,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,IA7StCyrB,CAAQ3E,EAAQxpB,IAIlBvmD,KAAK20E,QAAU,KAEf30E,KAAK40E,SAAW,EAChB50E,KAAKk1E,gBAAkB,KACvBl1E,KAAKq1E,oBAAsB,KAG3Br1E,KAAK6yE,UAAY,EAGjB7yE,KAAKs1E,aAAc,EAEnBt1E,KAAK+0E,cAAe,EAEpB/0E,KAAK4tF,WAAkC,IAAtBnoE,EAAQmoE,UAEzB5tF,KAAK6tF,cAAgBpoE,EAAQooE,YAE7B7tF,KAAKu1E,qBAAuB,EAG5Bv1E,KAAK8yE,mBAAqB,IAAIL,EAAczyE,MA4C9C,SAASqoD,EAAS5iC,GAUhB,IAAIguD,EAAWzzE,gBATfkoD,EAASA,GAAU,EAAQ,KAU3B,IAAKurB,IAAaH,EAAgB/yE,KAAK8nD,EAAUroD,MAAO,OAAO,IAAIqoD,EAAS5iC,GAC5EzlB,KAAK0oD,eAAiB,IAAIwqB,EAAcztD,EAASzlB,KAAMyzE,GAEvDzzE,KAAKwC,UAAW,EAEZijB,IAC2B,mBAAlBA,EAAQhC,QAAsBzjB,KAAKw1E,OAAS/vD,EAAQhC,OACjC,mBAAnBgC,EAAQgwD,SAAuBz1E,KAAK01E,QAAUjwD,EAAQgwD,QAClC,mBAApBhwD,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,SACtC,mBAAlBlwD,EAAQq8B,QAAsB9hD,KAAK+hD,OAASt8B,EAAQq8B,QAGjEywB,EAAOhyE,KAAKP,MAwJd,SAAS41E,EAAQ7F,EAAQhtD,EAAO0yD,EAAQliE,EAAKq6C,EAAOlxB,EAAUusB,GAC5DlmC,EAAM6xD,SAAWrhE,EACjBwP,EAAM4xD,QAAU1rB,EAChBlmC,EAAMuxD,SAAU,EAChBvxD,EAAMyxD,MAAO,EACTzxD,EAAMgmC,UAAWhmC,EAAM2xD,QAAQ,IAAIid,EAAqB,UAAmBlc,EAAQ1F,EAAO2F,QAAQ9nB,EAAO7qC,EAAM2xD,SAAc3E,EAAOyF,OAAO5nB,EAAOlxB,EAAU3Z,EAAM2xD,SACtK3xD,EAAMyxD,MAAO,EAwDf,SAASY,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,GACtConB,GASP,SAAsBN,EAAQhtD,GACP,IAAjBA,EAAMpe,QAAgBoe,EAAMkxD,YAC9BlxD,EAAMkxD,WAAY,EAClBlE,EAAOlxC,KAAK,UAZCg3C,CAAa9F,EAAQhtD,GACpCA,EAAM8vD,YACN5pB,IACA6rB,EAAY/E,EAAQhtD,GActB,SAASoyD,EAAYpF,EAAQhtD,GAC3BA,EAAM0xD,kBAAmB,EACzB,IAAI/zD,EAAQqC,EAAMmyD,gBAElB,GAAInF,EAAO2F,SAAWh1D,GAASA,EAAMhJ,KAAM,CAEzC,IAAIrX,EAAI0iB,EAAMwyD,qBACVz8D,EAAS,IAAI/V,MAAM1C,GACnBy1E,EAAS/yD,EAAM+vD,mBACnBgD,EAAOp1D,MAAQA,EAIf,IAHA,IAAIlJ,EAAQ,EACRu+D,GAAa,EAEVr1D,GACL5H,EAAOtB,GAASkJ,EACXA,EAAMs1D,QAAOD,GAAa,GAC/Br1D,EAAQA,EAAMhJ,KACdF,GAAS,EAGXsB,EAAOi9D,WAAaA,EACpBH,EAAQ7F,EAAQhtD,GAAO,EAAMA,EAAMpe,OAAQmU,EAAQ,GAAIg9D,EAAOnD,QAG9D5vD,EAAM8vD,YACN9vD,EAAMsyD,oBAAsB,KAExBS,EAAOp+D,MACTqL,EAAM+vD,mBAAqBgD,EAAOp+D,KAClCo+D,EAAOp+D,KAAO,MAEdqL,EAAM+vD,mBAAqB,IAAIL,EAAc1vD,GAG/CA,EAAMwyD,qBAAuB,MACxB,CAEL,KAAO70D,GAAO,CACZ,IAAIktC,EAAQltC,EAAMktC,MACdlxB,EAAWhc,EAAMgc,SACjBusB,EAAKvoC,EAAMjM,SASf,GAPAmhE,EAAQ7F,EAAQhtD,GAAO,EADbA,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACJipD,EAAOlxB,EAAUusB,GACpDvoC,EAAQA,EAAMhJ,KACdqL,EAAMwyD,uBAKFxyD,EAAMuxD,QACR,MAIU,OAAV5zD,IAAgBqC,EAAMsyD,oBAAsB,MAGlDtyD,EAAMmyD,gBAAkBx0D,EACxBqC,EAAM0xD,kBAAmB,EA2C3B,SAASQ,EAAWlyD,GAClB,OAAOA,EAAMmxD,QAA2B,IAAjBnxD,EAAMpe,QAA0C,OAA1Boe,EAAMmyD,kBAA6BnyD,EAAMstD,WAAattD,EAAMuxD,QAG3G,SAAS2B,EAAUlG,EAAQhtD,GACzBgtD,EAAOhuB,QAAO,SAAUe,GACtB//B,EAAM8vD,YAEF/vB,GACFkqC,EAAejd,EAAQjtB,GAGzB//B,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,aACZi2C,EAAY/E,EAAQhtD,MAiBxB,SAAS+xD,EAAY/E,EAAQhtD,GAC3B,IAAImzD,EAAOjB,EAAWlyD,GAEtB,GAAImzD,IAhBN,SAAmBnG,EAAQhtD,GACpBA,EAAMuyD,aAAgBvyD,EAAMixD,cACF,mBAAlBjE,EAAOhuB,QAA0Bh/B,EAAMgmC,WAKhDhmC,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,eALZ9b,EAAM8vD,YACN9vD,EAAMixD,aAAc,EACpBvqD,EAAQsU,SAASk4C,EAAWlG,EAAQhtD,KAYtCozD,CAAUpG,EAAQhtD,GAEM,IAApBA,EAAM8vD,YACR9vD,EAAMstD,UAAW,EACjBN,EAAOlxC,KAAK,UAER9b,EAAM8qE,cAAa,CAGrB,IAAIwD,EAASthB,EAAOjnB,iBAEfuoC,GAAUA,EAAOxD,aAAewD,EAAO9gB,aAC1CR,EAAO4F,UAMf,OAAOO,EA3hBT,EAAQ,EAAR,CAAoB7tB,EAAUkqB,GAyF9BW,EAAclxE,UAAU8oD,UAAY,WAIlC,IAHA,IAAInvC,EAAU3b,KAAKk1E,gBACfnzC,EAAM,GAEHpmB,GACLomB,EAAI/jB,KAAKrC,GACTA,EAAUA,EAAQjE,KAGpB,OAAOqqB,GAGT,WACE,IACEjhC,OAAOC,eAAemyE,EAAclxE,UAAW,SAAU,CACvDf,IAAKkyE,EAAaC,WAAU,WAC1B,OAAOpzE,KAAK8qD,cACX,6EAAmF,aAExF,MAAOloD,KAPX,GAcsB,mBAAXzB,QAAyBA,OAAOi1E,aAAiE,mBAA3C9hE,SAAStS,UAAUb,OAAOi1E,cACzF9C,EAAkBh/D,SAAStS,UAAUb,OAAOi1E,aAC5Ct1E,OAAOC,eAAesnD,EAAUlnD,OAAOi1E,YAAa,CAClD/0E,MAAO,SAAeS,GACpB,QAAIwxE,EAAgB/yE,KAAKP,KAAM8B,IAC3B9B,OAASqoD,IACNvmD,GAAUA,EAAO4mD,0BAA0BwqB,OAItDI,EAAkB,SAAyBxxE,GACzC,OAAOA,aAAkB9B,MA+B7BqoD,EAASrmD,UAAUq0E,KAAO,WACxB2W,EAAehtF,KAAM,IAAI0xF,IA+B3BrpC,EAASrmD,UAAUyhB,MAAQ,SAAUmqC,EAAOlxB,EAAUusB,GACpD,IAnNqB1jD,EAmNjBwd,EAAQ/iB,KAAK0oD,eACbhmB,GAAM,EAENszC,GAASjzD,EAAM2wD,aAtNEnuE,EAsN0BqoD,EArNxC1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAsO9C,OAfI2C,IAAU95C,EAAOqZ,SAASqY,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GA4NT0oB,CAAoB1oB,IAGN,mBAAblxB,IACTusB,EAAKvsB,EACLA,EAAW,MAGTs5C,EAAOt5C,EAAW,SAAmBA,IAAUA,EAAW3Z,EAAMsxD,iBAClD,mBAAPprB,IAAmBA,EAAKuqB,GAC/BzwD,EAAMmxD,OA7CZ,SAAuBnE,EAAQ9mB,GAC7B,IAAI1C,EAAK,IAAIsrC,EAEb7E,EAAejd,EAAQxpB,GACvB98B,EAAQsU,SAASkrB,EAAI1C,GAyCHgwB,CAAcv2E,KAAMipD,IAAa+sB,GAnCrD,SAAoBjG,EAAQhtD,EAAO6qC,EAAO3E,GACxC,IAAI1C,EAQJ,OANc,OAAVqH,EACFrH,EAAK,IAAIqrC,EACiB,iBAAVhkC,GAAuB7qC,EAAM2wD,aAC7CntB,EAAK,IAAIqmC,EAAqB,QAAS,CAAC,SAAU,UAAWh/B,KAG3DrH,IACFymC,EAAejd,EAAQxpB,GACvB98B,EAAQsU,SAASkrB,EAAI1C,IACd,GAuBmDkwB,CAAWz2E,KAAM+iB,EAAO6qC,EAAO3E,MACzFlmC,EAAM8vD,YACNnwC,EAwDJ,SAAuBqtC,EAAQhtD,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,GAC5D,IAAK+sB,EAAO,CACV,IAAIU,EAtBR,SAAqB3zD,EAAO6qC,EAAOlxB,GAC5B3Z,EAAM2wD,aAAsC,IAAxB3wD,EAAMqxD,eAA4C,iBAAVxmB,IAC/DA,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,IAG7B,OAAOkxB,EAiBU+oB,CAAY5zD,EAAO6qC,EAAOlxB,GAErCkxB,IAAU8oB,IACZV,GAAQ,EACRt5C,EAAW,SACXkxB,EAAQ8oB,GAIZ,IAAInjE,EAAMwP,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACvCoe,EAAMpe,QAAU4O,EAChB,IAAImvB,EAAM3f,EAAMpe,OAASoe,EAAM8lC,cAE1BnmB,IAAK3f,EAAMkxD,WAAY,GAE5B,GAAIlxD,EAAMuxD,SAAWvxD,EAAMwxD,OAAQ,CACjC,IAAIv7D,EAAO+J,EAAMsyD,oBACjBtyD,EAAMsyD,oBAAsB,CAC1BznB,MAAOA,EACPlxB,SAAUA,EACVs5C,MAAOA,EACPvhE,SAAUw0C,EACVvxC,KAAM,MAGJsB,EACFA,EAAKtB,KAAOqL,EAAMsyD,oBAElBtyD,EAAMmyD,gBAAkBnyD,EAAMsyD,oBAGhCtyD,EAAMwyD,sBAAwB,OAE9BK,EAAQ7F,EAAQhtD,GAAO,EAAOxP,EAAKq6C,EAAOlxB,EAAUusB,GAGtD,OAAOvmB,EA9FCk0C,CAAc52E,KAAM+iB,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,IAEpDvmB,GAGT2lB,EAASrmD,UAAU60E,KAAO,WACxB72E,KAAK0oD,eAAe6rB,UAGtBlsB,EAASrmD,UAAU80E,OAAS,WAC1B,IAAI/zD,EAAQ/iB,KAAK0oD,eAEb3lC,EAAMwxD,SACRxxD,EAAMwxD,SACDxxD,EAAMuxD,SAAYvxD,EAAMwxD,QAAWxxD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBAAiBC,EAAYn1E,KAAM+iB,KAI/GslC,EAASrmD,UAAU+0E,mBAAqB,SAA4Br6C,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASpX,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOrb,SAASyyB,EAAW,IAAIpX,gBAAkB,GAAI,MAAM,IAAIwsE,EAAqBp1D,GAExL,OADA18B,KAAK0oD,eAAe2rB,gBAAkB33C,EAC/B18B,MAGTc,OAAOC,eAAesnD,EAASrmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,gBAAkB1oD,KAAK0oD,eAAeoC,eAYtDhqD,OAAOC,eAAesnD,EAASrmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,eAAeG,iBA4L/BR,EAASrmD,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACrDA,EAAG,IAAI6jC,EAA2B,cAGpCzkC,EAASrmD,UAAU0zE,QAAU,KAE7BrtB,EAASrmD,UAAU2R,IAAM,SAAUi6C,EAAOlxB,EAAUusB,GAClD,IAAIlmC,EAAQ/iB,KAAK0oD,eAoBjB,MAlBqB,mBAAVkF,GACT3E,EAAK2E,EACLA,EAAQ,KACRlxB,EAAW,MACkB,mBAAbA,IAChBusB,EAAKvsB,EACLA,EAAW,MAGTkxB,SAAuC5tD,KAAKyjB,MAAMmqC,EAAOlxB,GAEzD3Z,EAAMwxD,SACRxxD,EAAMwxD,OAAS,EACfv0E,KAAK82E,UAIF/zD,EAAMmxD,QAsEb,SAAqBnE,EAAQhtD,EAAOkmC,GAClClmC,EAAMmxD,QAAS,EACfY,EAAY/E,EAAQhtD,GAEhBkmC,IACElmC,EAAMstD,SAAU5mD,EAAQsU,SAASkrB,GAAS8mB,EAAOtxC,KAAK,SAAUwqB,IAGtElmC,EAAM4lC,OAAQ,EACdonB,EAAOvtE,UAAW,EA/ECw0E,CAAYh3E,KAAM+iB,EAAOkmC,GACrCjpD,MAGTc,OAAOC,eAAesnD,EAASrmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,eAAe/jD,UAuF/B7D,OAAOC,eAAesnD,EAASrmD,UAAW,YAAa,CAIrDhB,YAAY,EACZC,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK0oD,gBAIF1oD,KAAK0oD,eAAeK,WAE7B1jD,IAAK,SAAahE,GAGXrB,KAAK0oD,iBAMV1oD,KAAK0oD,eAAeK,UAAY1nD,MAGpCgnD,EAASrmD,UAAU2zE,QAAUpC,EAAYoC,QACzCttB,EAASrmD,UAAUi1E,WAAa1D,EAAY2D,UAE5C7uB,EAASrmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CA,EAAGnG,M,mDCxnBLjjD,EAAOD,QAAU6hD,EAEjB,IAAIkrC,EAAiB,EAAQ,IAAa9iC,MACtCijC,EAA6BH,EAAeG,2BAC5C2E,EAAwB9E,EAAe8E,sBACvCM,EAAqCpF,EAAeoF,mCACpDC,EAA8BrF,EAAeqF,4BAE7C9pC,EAAS,EAAQ,IAIrB,SAAS+pC,EAAe1rC,EAAI9wB,GAC1B,IAAIy8D,EAAKlyF,KAAKmyF,gBACdD,EAAGE,cAAe,EAClB,IAAInpC,EAAKipC,EAAGvd,QAEZ,GAAW,OAAP1rB,EACF,OAAOjpD,KAAK6+B,KAAK,QAAS,IAAI4yD,GAGhCS,EAAGG,WAAa,KAChBH,EAAGvd,QAAU,KACD,MAARl/C,GACFz1B,KAAKge,KAAKyX,GACZwzB,EAAG1C,GACH,IAAI+rC,EAAKtyF,KAAK8oD,eACdwpC,EAAGhF,SAAU,GAETgF,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBACpC7oD,KAAKiuF,MAAMqE,EAAGzpC,eAIlB,SAASpH,EAAUh8B,GACjB,KAAMzlB,gBAAgByhD,GAAY,OAAO,IAAIA,EAAUh8B,GACvDyiC,EAAO3nD,KAAKP,KAAMylB,GAClBzlB,KAAKmyF,gBAAkB,CACrBF,eAAgBA,EAAerwF,KAAK5B,MACpCuyF,eAAe,EACfH,cAAc,EACdzd,QAAS,KACT0d,WAAY,KACZG,cAAe,MAGjBxyF,KAAK8oD,eAAeykC,cAAe,EAInCvtF,KAAK8oD,eAAe0rB,MAAO,EAEvB/uD,IAC+B,mBAAtBA,EAAQ5M,YAA0B7Y,KAAK6iD,WAAap9B,EAAQ5M,WAC1C,mBAAlB4M,EAAQ9B,QAAsB3jB,KAAK+iD,OAASt9B,EAAQ9B,QAIjE3jB,KAAKu+B,GAAG,YAAa43C,GAGvB,SAASA,IACP,IAAIzD,EAAQ1yE,KAEe,mBAAhBA,KAAK+iD,QAA0B/iD,KAAK8oD,eAAeC,UAK5D/F,EAAKhjD,KAAM,KAAM,MAJjBA,KAAK+iD,QAAO,SAAUwD,EAAI9wB,GACxButB,EAAK0vB,EAAOnsB,EAAI9wB,MA6DtB,SAASutB,EAAK+sB,EAAQxpB,EAAI9wB,GACxB,GAAI8wB,EAAI,OAAOwpB,EAAOlxC,KAAK,QAAS0nB,GAMpC,GALY,MAAR9wB,GACFs6C,EAAO/xD,KAAKyX,GAIVs6C,EAAOrnB,eAAe/jD,OAAQ,MAAM,IAAIqtF,EAC5C,GAAIjiB,EAAOoiB,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAOhiB,EAAO/xD,KAAK,MA9HrB,EAAQ,EAAR,CAAoByjC,EAAWyG,GA+D/BzG,EAAUz/C,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GAE1C,OADA18B,KAAKmyF,gBAAgBI,eAAgB,EAC9BrqC,EAAOlmD,UAAUgc,KAAKzd,KAAKP,KAAM4tD,EAAOlxB,IAajD+kB,EAAUz/C,UAAU6gD,WAAa,SAAU+K,EAAOlxB,EAAUusB,GAC1DA,EAAG,IAAI6jC,EAA2B,kBAGpCrrC,EAAUz/C,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACtD,IAAIipC,EAAKlyF,KAAKmyF,gBAKd,GAJAD,EAAGvd,QAAU1rB,EACbipC,EAAGG,WAAazkC,EAChBskC,EAAGM,cAAgB91D,GAEdw1D,EAAGE,aAAc,CACpB,IAAIE,EAAKtyF,KAAK8oD,gBACVopC,EAAGK,eAAiBD,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBAAe7oD,KAAKiuF,MAAMqE,EAAGzpC,iBAO3FpH,EAAUz/C,UAAUisF,MAAQ,SAAUpsF,GACpC,IAAIqwF,EAAKlyF,KAAKmyF,gBAEQ,OAAlBD,EAAGG,YAAwBH,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBpyF,KAAK6iD,WAAWqvC,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,kBAQxDxwC,EAAUz/C,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC5Cf,EAAOlmD,UAAUgnD,SAASzoD,KAAKP,KAAM8iD,GAAK,SAAU2vC,GAClDxpC,EAAGwpC,Q,gBClLP,IAAIjzD,EAAW,EAAQ,GACnBurB,EAAO,EAAQ,IACf7uB,EAAS,EAAQ,GAAeA,OAEhCw2D,EAAI,CACN,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGlCC,EAAI,IAAI5vF,MAAM,IAElB,SAAS6vF,IACP5yF,KAAK2W,OAEL3W,KAAK6yF,GAAKF,EAEV5nC,EAAKxqD,KAAKP,KAAM,GAAI,IAkBtB,SAAS2/C,EAAIhvC,EAAGoB,EAAGuiC,GACjB,OAAOA,EAAK3jC,GAAKoB,EAAIuiC,GAGvB,SAASw+C,EAAKniF,EAAGoB,EAAGuiC,GAClB,OAAQ3jC,EAAIoB,EAAMuiC,GAAK3jC,EAAIoB,GAG7B,SAASghF,EAAQpiF,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAGvE,SAASqiF,EAAQriF,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,GAGvE,SAASsiF,EAAQtiF,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,EAhC7D6uB,EAASozD,EAAQ7nC,GAEjB6nC,EAAO5wF,UAAU2U,KAAO,WAUtB,OATA3W,KAAK+uE,GAAK,WACV/uE,KAAKgvE,GAAK,WACVhvE,KAAKivE,GAAK,WACVjvE,KAAKkvE,GAAK,WACVlvE,KAAKqxE,GAAK,WACVrxE,KAAKkzF,GAAK,WACVlzF,KAAKmzF,GAAK,UACVnzF,KAAKozF,GAAK,WAEHpzF,MA2BT4yF,EAAO5wF,UAAUugD,QAAU,SAAU2P,GAYnC,IAXA,IALevhD,EAKXgiF,EAAI3yF,KAAK6yF,GAET/vF,EAAc,EAAV9C,KAAK+uE,GACTrqE,EAAc,EAAV1E,KAAKgvE,GACTvuE,EAAc,EAAVT,KAAKivE,GACTvuE,EAAc,EAAVV,KAAKkvE,GACT3qE,EAAc,EAAVvE,KAAKqxE,GACTnsE,EAAc,EAAVlF,KAAKkzF,GACTvjD,EAAc,EAAV3vC,KAAKmzF,GACTzlD,EAAc,EAAV1tC,KAAKozF,GAEJhzF,EAAI,EAAGA,EAAI,KAAMA,EAAGuyF,EAAEvyF,GAAK8xD,EAAEjX,YAAgB,EAAJ76C,GAClD,KAAOA,EAAI,KAAMA,EAAGuyF,EAAEvyF,GAAqE,KAjB5EuQ,EAiBoBgiF,EAAEvyF,EAAI,MAhB3B,GAAKuQ,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,IAgBbgiF,EAAEvyF,EAAI,GAAK6yF,EAAON,EAAEvyF,EAAI,KAAOuyF,EAAEvyF,EAAI,IAEpF,IAAK,IAAI6X,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIo7E,EAAM3lD,EAAIslD,EAAOzuF,GAAKo7C,EAAGp7C,EAAGW,EAAGyqC,GAAK+iD,EAAEz6E,GAAK06E,EAAE16E,GAAM,EACnDq7E,EAAMP,EAAOjwF,GAAKgwF,EAAIhwF,EAAG4B,EAAGjE,GAAM,EAEtCitC,EAAIiC,EACJA,EAAIzqC,EACJA,EAAIX,EACJA,EAAK7D,EAAI2yF,EAAM,EACf3yF,EAAID,EACJA,EAAIiE,EACJA,EAAI5B,EACJA,EAAKuwF,EAAKC,EAAM,EAGlBtzF,KAAK+uE,GAAMjsE,EAAI9C,KAAK+uE,GAAM,EAC1B/uE,KAAKgvE,GAAMtqE,EAAI1E,KAAKgvE,GAAM,EAC1BhvE,KAAKivE,GAAMxuE,EAAIT,KAAKivE,GAAM,EAC1BjvE,KAAKkvE,GAAMxuE,EAAIV,KAAKkvE,GAAM,EAC1BlvE,KAAKqxE,GAAM9sE,EAAIvE,KAAKqxE,GAAM,EAC1BrxE,KAAKkzF,GAAMhuF,EAAIlF,KAAKkzF,GAAM,EAC1BlzF,KAAKmzF,GAAMxjD,EAAI3vC,KAAKmzF,GAAM,EAC1BnzF,KAAKozF,GAAM1lD,EAAI1tC,KAAKozF,GAAM,GAG5BR,EAAO5wF,UAAUypD,MAAQ,WACvB,IAAI8nC,EAAIr3D,EAAOM,YAAY,IAW3B,OATA+2D,EAAEp3C,aAAan8C,KAAK+uE,GAAI,GACxBwkB,EAAEp3C,aAAan8C,KAAKgvE,GAAI,GACxBukB,EAAEp3C,aAAan8C,KAAKivE,GAAI,GACxBskB,EAAEp3C,aAAan8C,KAAKkvE,GAAI,IACxBqkB,EAAEp3C,aAAan8C,KAAKqxE,GAAI,IACxBkiB,EAAEp3C,aAAan8C,KAAKkzF,GAAI,IACxBK,EAAEp3C,aAAan8C,KAAKmzF,GAAI,IACxBI,EAAEp3C,aAAan8C,KAAKozF,GAAI,IAEjBG,GAGT1zF,EAAOD,QAAUgzF,G,gBCtIjB,IAAIpzD,EAAW,EAAQ,GACnBurB,EAAO,EAAQ,IACf7uB,EAAS,EAAQ,GAAeA,OAEhCw2D,EAAI,CACN,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGlCC,EAAI,IAAI5vF,MAAM,KAElB,SAASywF,IACPxzF,KAAK2W,OACL3W,KAAK6yF,GAAKF,EAEV5nC,EAAKxqD,KAAKP,KAAM,IAAK,KA2BvB,SAASyzF,EAAI9iF,EAAGoB,EAAGuiC,GACjB,OAAOA,EAAK3jC,GAAKoB,EAAIuiC,GAGvB,SAASw+C,EAAKniF,EAAGoB,EAAGuiC,GAClB,OAAQ3jC,EAAIoB,EAAMuiC,GAAK3jC,EAAIoB,GAG7B,SAASghF,EAAQpiF,EAAG+iF,GAClB,OAAQ/iF,IAAM,GAAK+iF,GAAM,IAAMA,IAAO,EAAI/iF,GAAK,KAAO+iF,IAAO,EAAI/iF,GAAK,IAGxE,SAASqiF,EAAQriF,EAAG+iF,GAClB,OAAQ/iF,IAAM,GAAK+iF,GAAM,KAAO/iF,IAAM,GAAK+iF,GAAM,KAAOA,IAAO,EAAI/iF,GAAK,IAG1E,SAASgjF,EAAQhjF,EAAG+iF,GAClB,OAAQ/iF,IAAM,EAAI+iF,GAAM,KAAO/iF,IAAM,EAAI+iF,GAAM,IAAO/iF,IAAM,EAG9D,SAASijF,EAASjjF,EAAG+iF,GACnB,OAAQ/iF,IAAM,EAAI+iF,GAAM,KAAO/iF,IAAM,EAAI+iF,GAAM,KAAO/iF,IAAM,EAAI+iF,GAAM,IAGxE,SAASG,EAAQljF,EAAG+iF,GAClB,OAAQ/iF,IAAM,GAAK+iF,GAAM,KAAOA,IAAO,GAAK/iF,GAAK,GAAMA,IAAM,EAG/D,SAASmjF,EAASnjF,EAAG+iF,GACnB,OAAQ/iF,IAAM,GAAK+iF,GAAM,KAAOA,IAAO,GAAK/iF,GAAK,IAAMA,IAAM,EAAI+iF,GAAM,IAGzE,SAASK,EAAUjxF,EAAG4B,GACpB,OAAQ5B,IAAM,EAAM4B,IAAM,EAAK,EAAI,EAzDrC86B,EAASg0D,EAAQzoC,GAEjByoC,EAAOxxF,UAAU2U,KAAO,WAmBtB,OAlBA3W,KAAKg0F,IAAM,WACXh0F,KAAKi0F,IAAM,WACXj0F,KAAKk0F,IAAM,WACXl0F,KAAKm0F,IAAM,WACXn0F,KAAKo0F,IAAM,WACXp0F,KAAKq0F,IAAM,WACXr0F,KAAKs0F,IAAM,UACXt0F,KAAKu0F,IAAM,WAEXv0F,KAAKw0F,IAAM,WACXx0F,KAAKy0F,IAAM,WACXz0F,KAAK00F,IAAM,WACX10F,KAAK20F,IAAM,WACX30F,KAAK40F,IAAM,WACX50F,KAAK60F,IAAM,UACX70F,KAAK80F,IAAM,WACX90F,KAAK+0F,IAAM,UAEJ/0F,MAuCTwzF,EAAOxxF,UAAUugD,QAAU,SAAU2P,GAqBnC,IApBA,IAAIygC,EAAI3yF,KAAK6yF,GAETzzC,EAAgB,EAAXp/C,KAAKg0F,IACV10C,EAAgB,EAAXt/C,KAAKi0F,IACVt0C,EAAgB,EAAX3/C,KAAKk0F,IACVr0C,EAAgB,EAAX7/C,KAAKm0F,IACVl0C,EAAgB,EAAXjgD,KAAKo0F,IACVY,EAAgB,EAAXh1F,KAAKq0F,IACVY,EAAgB,EAAXj1F,KAAKs0F,IACVY,EAAgB,EAAXl1F,KAAKu0F,IAEVl1C,EAAgB,EAAXr/C,KAAKw0F,IACVh1C,EAAgB,EAAXx/C,KAAKy0F,IACV70C,EAAgB,EAAX5/C,KAAK00F,IACV50C,EAAgB,EAAX9/C,KAAK20F,IACVz0C,EAAgB,EAAXlgD,KAAK40F,IACVO,EAAgB,EAAXn1F,KAAK60F,IACVO,EAAgB,EAAXp1F,KAAK80F,IACV3jB,EAAgB,EAAXnxE,KAAK+0F,IAEL30F,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3BuyF,EAAEvyF,GAAK8xD,EAAEjX,YAAgB,EAAJ76C,GACrBuyF,EAAEvyF,EAAI,GAAK8xD,EAAEjX,YAAgB,EAAJ76C,EAAQ,GAEnC,KAAOA,EAAI,IAAKA,GAAK,EAAG,CACtB,IAAIi1F,EAAK1C,EAAEvyF,EAAI,IACXszF,EAAKf,EAAEvyF,EAAI,GAAS,GACpB6yF,EAASU,EAAO0B,EAAI3B,GACpB4B,EAAU1B,EAAQF,EAAI2B,GAItBE,EAAS1B,EAFbwB,EAAK1C,EAAEvyF,EAAI,GACXszF,EAAKf,EAAEvyF,EAAI,EAAQ,IAEfo1F,EAAU1B,EAAQJ,EAAI2B,GAGtBI,EAAO9C,EAAEvyF,EAAI,IACbs1F,EAAO/C,EAAEvyF,EAAI,GAAQ,GAErBu1F,EAAQhD,EAAEvyF,EAAI,IACdw1F,EAAQjD,EAAEvyF,EAAI,GAAS,GAEvBy1F,EAAOP,EAAUI,EAAQ,EACzBI,EAAO7C,EAASwC,EAAO1B,EAAS8B,EAAKP,GAAY,EAIrDQ,GAFAA,EAAOA,EAAMP,EAASxB,EADtB8B,EAAOA,EAAML,EAAW,EACYA,GAAY,GAEnCG,EAAQ5B,EADrB8B,EAAOA,EAAMD,EAAS,EACaA,GAAU,EAE7CjD,EAAEvyF,GAAK01F,EACPnD,EAAEvyF,EAAI,GAAKy1F,EAGb,IAAK,IAAI59E,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,CAC/B69E,EAAMnD,EAAE16E,GACR49E,EAAMlD,EAAE16E,EAAI,GAEZ,IAAI89E,EAAOjD,EAAI1zC,EAAIE,EAAIK,GACnBq2C,EAAOlD,EAAIzzC,EAAIG,EAAII,GAEnBq2C,EAAUlD,EAAO3zC,EAAIC,GACrB62C,EAAUnD,EAAO1zC,EAAID,GACrB+2C,EAAUnD,EAAO/yC,EAAIC,GACrBk2C,EAAUpD,EAAO9yC,EAAID,GAGrBo2C,EAAM3D,EAAEz6E,GACRq+E,EAAM5D,EAAEz6E,EAAI,GAEZs+E,EAAM9C,EAAGxzC,EAAI+0C,EAAIC,GACjBuB,EAAM/C,EAAGvzC,EAAIi1C,EAAIC,GAEjBqB,EAAOtlB,EAAKilB,EAAW,EACvBM,EAAOxB,EAAKiB,EAAUpC,EAAS0C,EAAKtlB,GAAO,EAM/CulB,GAFAA,GAFAA,EAAOA,EAAMH,EAAMxC,EADnB0C,EAAOA,EAAMD,EAAO,EACaA,GAAQ,GAE5BH,EAAMtC,EADnB0C,EAAOA,EAAMH,EAAO,EACaA,GAAQ,GAE5BR,EAAM/B,EADnB0C,EAAOA,EAAMZ,EAAO,EACaA,GAAQ,EAGzC,IAAIc,GAAOT,EAAUF,EAAQ,EACzBY,GAAOX,EAAUF,EAAOhC,EAAS4C,GAAKT,GAAY,EAEtDhB,EAAKD,EACL9jB,EAAKikB,EACLH,EAAKD,EACLI,EAAKD,EACLH,EAAK/0C,EACLk1C,EAAKj1C,EAELD,EAAMJ,EAAK62C,EAAM3C,EADjB7zC,EAAMJ,EAAK22C,EAAO,EACY32C,GAAO,EACrCD,EAAKF,EACLG,EAAKF,EACLD,EAAKL,EACLM,EAAKJ,EACLF,EAAKF,EACLI,EAAKH,EAELD,EAAMs3C,EAAME,GAAM7C,EADlB10C,EAAMo3C,EAAME,GAAO,EACYF,GAAQ,EAGzCz2F,KAAKw0F,IAAOx0F,KAAKw0F,IAAMn1C,EAAM,EAC7Br/C,KAAKy0F,IAAOz0F,KAAKy0F,IAAMj1C,EAAM,EAC7Bx/C,KAAK00F,IAAO10F,KAAK00F,IAAM90C,EAAM,EAC7B5/C,KAAK20F,IAAO30F,KAAK20F,IAAM70C,EAAM,EAC7B9/C,KAAK40F,IAAO50F,KAAK40F,IAAM10C,EAAM,EAC7BlgD,KAAK60F,IAAO70F,KAAK60F,IAAMM,EAAM,EAC7Bn1F,KAAK80F,IAAO90F,KAAK80F,IAAMM,EAAM,EAC7Bp1F,KAAK+0F,IAAO/0F,KAAK+0F,IAAM5jB,EAAM,EAE7BnxE,KAAKg0F,IAAOh0F,KAAKg0F,IAAM50C,EAAK20C,EAAS/zF,KAAKw0F,IAAKn1C,GAAO,EACtDr/C,KAAKi0F,IAAOj0F,KAAKi0F,IAAM30C,EAAKy0C,EAAS/zF,KAAKy0F,IAAKj1C,GAAO,EACtDx/C,KAAKk0F,IAAOl0F,KAAKk0F,IAAMv0C,EAAKo0C,EAAS/zF,KAAK00F,IAAK90C,GAAO,EACtD5/C,KAAKm0F,IAAOn0F,KAAKm0F,IAAMt0C,EAAKk0C,EAAS/zF,KAAK20F,IAAK70C,GAAO,EACtD9/C,KAAKo0F,IAAOp0F,KAAKo0F,IAAMn0C,EAAK8zC,EAAS/zF,KAAK40F,IAAK10C,GAAO,EACtDlgD,KAAKq0F,IAAOr0F,KAAKq0F,IAAMW,EAAKjB,EAAS/zF,KAAK60F,IAAKM,GAAO,EACtDn1F,KAAKs0F,IAAOt0F,KAAKs0F,IAAMW,EAAKlB,EAAS/zF,KAAK80F,IAAKM,GAAO,EACtDp1F,KAAKu0F,IAAOv0F,KAAKu0F,IAAMW,EAAKnB,EAAS/zF,KAAK+0F,IAAK5jB,GAAO,GAGxDqiB,EAAOxxF,UAAUypD,MAAQ,WACvB,IAAI8nC,EAAIr3D,EAAOM,YAAY,IAE3B,SAASq6D,EAAcnpD,EAAGrtC,EAAG0T,GAC3Bw/E,EAAEp3C,aAAazO,EAAG35B,GAClBw/E,EAAEp3C,aAAa97C,EAAG0T,EAAS,GAY7B,OATA8iF,EAAa72F,KAAKg0F,IAAKh0F,KAAKw0F,IAAK,GACjCqC,EAAa72F,KAAKi0F,IAAKj0F,KAAKy0F,IAAK,GACjCoC,EAAa72F,KAAKk0F,IAAKl0F,KAAK00F,IAAK,IACjCmC,EAAa72F,KAAKm0F,IAAKn0F,KAAK20F,IAAK,IACjCkC,EAAa72F,KAAKo0F,IAAKp0F,KAAK40F,IAAK,IACjCiC,EAAa72F,KAAKq0F,IAAKr0F,KAAK60F,IAAK,IACjCgC,EAAa72F,KAAKs0F,IAAKt0F,KAAK80F,IAAK,IACjC+B,EAAa72F,KAAKu0F,IAAKv0F,KAAK+0F,IAAK,IAE1BxB,GAGT1zF,EAAOD,QAAU4zF,G,8BCnQjB,cAyBA,IAAIxrC,EAAM,EAAQ,IAGlBnoD,EAAOD,QAAUwoD,EAGjB,IAIIF,EAJAllD,EAAU,EAAQ,IAOtBolD,EAAS+jC,cAAgBA,EAGhB,EAAQ,IAAUzoC,aAA3B,IAEI0oC,EAAkB,SAAUzoC,EAASvtC,GACvC,OAAOutC,EAAQ3kB,UAAU5oB,GAAMzR,QAK7B4tE,EAAS,EAAQ,IAKjBr2C,EAAS,EAAQ,IAAeA,OAChCm3C,EAAgB76B,EAAOvD,YAAc,aAWzC,IAAIkT,EAAOrnD,OAAOY,OAAO,EAAQ,KACjCymD,EAAK3oB,SAAW,EAAQ,GAIxB,IAAI8sD,EAAY,EAAQ,KACpBD,OAAQ,EAEVA,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAIV,IAEI7qC,EAFA+qC,EAAa,EAAQ,KACrBlZ,EAAc,EAAQ,IAG1BprB,EAAK3oB,SAAS4oB,EAAUmqB,GAExB,IAAI0a,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAc1D,SAASd,EAAc1mE,EAASsqD,GAG9BtqD,EAAUA,GAAW,GAOrB,IAAIguD,EAAW1D,aATf7nB,EAASA,GAAU,EAAQ,KAa3BloD,KAAK0zE,aAAejuD,EAAQiuD,WAExBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQynE,oBAI7D,IAAItZ,EAAMnuD,EAAQojC,cACdiuC,EAAcrxE,EAAQsxE,sBACtBhjB,EAAa/zE,KAAK0zE,WAAa,GAAK,MAElB1zE,KAAK6oD,cAAvB+qB,GAAe,IAARA,EAAgCA,EAAaH,IAAaqjB,GAA+B,IAAhBA,GAAyCA,EAAsC/iB,EAGnK/zE,KAAK6oD,cAAgB9hD,KAAK+G,MAAM9N,KAAK6oD,eAKrC7oD,KAAK8Y,OAAS,IAAI2zE,EAClBzsF,KAAK2E,OAAS,EACd3E,KAAKmtF,MAAQ,KACbntF,KAAKotF,WAAa,EAClBptF,KAAKqtF,QAAU,KACfrtF,KAAK2oD,OAAQ,EACb3oD,KAAKuwE,YAAa,EAClBvwE,KAAKstF,SAAU,EAMfttF,KAAKw0E,MAAO,EAIZx0E,KAAKutF,cAAe,EACpBvtF,KAAKwtF,iBAAkB,EACvBxtF,KAAKytF,mBAAoB,EACzBztF,KAAK0tF,iBAAkB,EAGvB1tF,KAAK+oD,WAAY,EAKjB/oD,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAGlDr0E,KAAK8tF,WAAa,EAGlB9tF,KAAK+tF,aAAc,EAEnB/tF,KAAKguF,QAAU,KACfhuF,KAAK08B,SAAW,KACZjX,EAAQiX,WACLglB,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D1hD,KAAKguF,QAAU,IAAItsC,EAAcj8B,EAAQiX,UACzC18B,KAAK08B,SAAWjX,EAAQiX,UAI5B,SAAS0rB,EAAS3iC,GAGhB,GAFAyiC,EAASA,GAAU,EAAQ,MAErBloD,gBAAgBooD,GAAW,OAAO,IAAIA,EAAS3iC,GAErDzlB,KAAK8oD,eAAiB,IAAIqjC,EAAc1mE,EAASzlB,MAGjDA,KAAKuoD,UAAW,EAEZ9iC,IAC0B,mBAAjBA,EAAQsP,OAAqB/0B,KAAKiuF,MAAQxoE,EAAQsP,MAE9B,mBAApBtP,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,UAGrEpD,EAAOhyE,KAAKP,MA2Dd,SAASkuF,EAAiBne,EAAQniB,EAAOlxB,EAAUyxD,EAAYC,GAC7D,IAKM7nC,EALFxjC,EAAQgtD,EAAOjnB,eACL,OAAV8E,GACF7qC,EAAMuqE,SAAU,EA0NpB,SAAoBvd,EAAQhtD,GAC1B,GAAIA,EAAM4lC,MAAO,OACjB,GAAI5lC,EAAMirE,QAAS,CACjB,IAAIpgC,EAAQ7qC,EAAMirE,QAAQr6E,MACtBi6C,GAASA,EAAMjpD,SACjBoe,EAAMjK,OAAOkF,KAAK4vC,GAClB7qC,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,QAGjDoe,EAAM4lC,OAAQ,EAGd0lC,EAAate,GArOXwe,CAAWxe,EAAQhtD,KAGdqrE,IAAgB7nC,EA2CzB,SAAsBxjC,EAAO6qC,GAC3B,IAAIrH,EApPiBhhD,EAqPFqoD,EApPZ1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAoPA,iBAAVzlB,QAAgCz8C,IAAVy8C,GAAwB7qC,EAAM2wD,aACtFntB,EAAK,IAAIlzC,UAAU,oCAtPvB,IAAuB9N,EAwPrB,OAAOghD,EAhDqBioC,CAAazrE,EAAO6qC,IAC1CrH,EACFwpB,EAAOlxC,KAAK,QAAS0nB,GACZxjC,EAAM2wD,YAAc9lB,GAASA,EAAMjpD,OAAS,GAChC,iBAAVipD,GAAuB7qC,EAAM2wD,YAAc5yE,OAAOsU,eAAew4C,KAAW1xB,EAAOl6B,YAC5F4rD,EAhNR,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GA+ML0oB,CAAoB1oB,IAG1BugC,EACEprE,EAAMwtD,WAAYR,EAAOlxC,KAAK,QAAS,IAAI33B,MAAM,qCAA0CunF,EAAS1e,EAAQhtD,EAAO6qC,GAAO,GACrH7qC,EAAM4lC,MACfonB,EAAOlxC,KAAK,QAAS,IAAI33B,MAAM,6BAE/B6b,EAAMuqE,SAAU,EACZvqE,EAAMirE,UAAYtxD,GACpBkxB,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,GACxB7qC,EAAM2wD,YAA+B,IAAjB9lB,EAAMjpD,OAAc8pF,EAAS1e,EAAQhtD,EAAO6qC,GAAO,GAAY8gC,EAAc3e,EAAQhtD,IAE7G0rE,EAAS1e,EAAQhtD,EAAO6qC,GAAO,KAGzBugC,IACVprE,EAAMuqE,SAAU,IAIpB,OAgCF,SAAsBvqE,GACpB,OAAQA,EAAM4lC,QAAU5lC,EAAMwqE,cAAgBxqE,EAAMpe,OAASoe,EAAM8lC,eAAkC,IAAjB9lC,EAAMpe,QAjCnFqyF,CAAaj0E,GAGtB,SAAS0rE,EAAS1e,EAAQhtD,EAAO6qC,EAAOugC,GAClCprE,EAAMsqE,SAA4B,IAAjBtqE,EAAMpe,SAAiBoe,EAAMyxD,MAChDzE,EAAOlxC,KAAK,OAAQ+uB,GACpBmiB,EAAOh7C,KAAK,KAGZhS,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACzCwpF,EAAYprE,EAAMjK,OAAOosC,QAAQ0I,GAAY7qC,EAAMjK,OAAOkF,KAAK4vC,GAE/D7qC,EAAMwqE,cAAcc,EAAate,IAEvC2e,EAAc3e,EAAQhtD,GAvGxBjiB,OAAOC,eAAeqnD,EAASpmD,UAAW,YAAa,CACrDf,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK8oD,gBAGF9oD,KAAK8oD,eAAeC,WAE7B1jD,IAAK,SAAUhE,GAGRrB,KAAK8oD,iBAMV9oD,KAAK8oD,eAAeC,UAAY1nD,MAIpC+mD,EAASpmD,UAAU2zE,QAAUpC,EAAYoC,QACzCvtB,EAASpmD,UAAUi1E,WAAa1D,EAAY2D,UAC5C9uB,EAASpmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CjpD,KAAKge,KAAK,MACVirC,EAAGnG,IAOLsF,EAASpmD,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GACzC,IACI0xD,EADArrE,EAAQ/iB,KAAK8oD,eAgBjB,OAbK/lC,EAAM2wD,WAUT0a,GAAiB,EATI,iBAAVxgC,KACTlxB,EAAWA,GAAY3Z,EAAMsxD,mBACZtxD,EAAM2Z,WACrBkxB,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,GAC3BA,EAAW,IAEb0xD,GAAiB,GAMdF,EAAiBluF,KAAM4tD,EAAOlxB,GAAU,EAAO0xD,IAIxDhmC,EAASpmD,UAAUkjD,QAAU,SAAU0I,GACrC,OAAOsgC,EAAiBluF,KAAM4tD,EAAO,MAAM,GAAM,IAwEnDxF,EAASpmD,UAAU2sF,SAAW,WAC5B,OAAuC,IAAhC3uF,KAAK8oD,eAAeukC,SAI7BjlC,EAASpmD,UAAU4sF,YAAc,SAAUnwC,GAIzC,OAHKiD,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D1hD,KAAK8oD,eAAeklC,QAAU,IAAItsC,EAAcjD,GAChDz+C,KAAK8oD,eAAepsB,SAAW+hB,EACxBz+C,MAwBT,SAAS6uF,EAAchtF,EAAGkhB,GACxB,OAAIlhB,GAAK,GAAsB,IAAjBkhB,EAAMpe,QAAgBoe,EAAM4lC,MAAc,EACpD5lC,EAAM2wD,WAAmB,EACzB7xE,GAAMA,EAEJkhB,EAAMsqE,SAAWtqE,EAAMpe,OAAeoe,EAAMjK,OAAO+nC,KAAKprB,KAAK9wB,OAAmBoe,EAAMpe,QAGxF9C,EAAIkhB,EAAM8lC,gBAAe9lC,EAAM8lC,cA3BrC,SAAiChnD,GAc/B,OAbIA,GAFQ,QAGVA,EAHU,SAOVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAEKA,EAa4CitF,CAAwBjtF,IACvEA,GAAKkhB,EAAMpe,OAAe9C,EAEzBkhB,EAAM4lC,MAIJ5lC,EAAMpe,QAHXoe,EAAMwqE,cAAe,EACd,IA4HX,SAASc,EAAate,GACpB,IAAIhtD,EAAQgtD,EAAOjnB,eACnB/lC,EAAMwqE,cAAe,EAChBxqE,EAAMyqE,kBACTnB,EAAM,eAAgBtpE,EAAMsqE,SAC5BtqE,EAAMyqE,iBAAkB,EACpBzqE,EAAMyxD,KAAMxsB,EAAIjqB,SAASuwD,EAAeve,GAAaue,EAAcve,IAI3E,SAASue,EAAcve,GACrBsc,EAAM,iBACNtc,EAAOlxC,KAAK,YACZ4mC,EAAKsK,GASP,SAAS2e,EAAc3e,EAAQhtD,GACxBA,EAAMgrE,cACThrE,EAAMgrE,aAAc,EACpB/lC,EAAIjqB,SAASgxD,EAAgBhf,EAAQhtD,IAIzC,SAASgsE,EAAehf,EAAQhtD,GAE9B,IADA,IAAIxP,EAAMwP,EAAMpe,QACRoe,EAAMuqE,UAAYvqE,EAAMsqE,UAAYtqE,EAAM4lC,OAAS5lC,EAAMpe,OAASoe,EAAM8lC,gBAC9EwjC,EAAM,wBACNtc,EAAOh7C,KAAK,GACRxhB,IAAQwP,EAAMpe,SAEL4O,EAAMwP,EAAMpe,OAE3Boe,EAAMgrE,aAAc,EAyOtB,SAASmB,EAAiB36E,GACxB83E,EAAM,4BACN93E,EAAKwgB,KAAK,GAsBZ,SAASo6D,EAAQpf,EAAQhtD,GAClBA,EAAMuqE,UACTjB,EAAM,iBACNtc,EAAOh7C,KAAK,IAGdhS,EAAM2qE,iBAAkB,EACxB3qE,EAAM+qE,WAAa,EACnB/d,EAAOlxC,KAAK,UACZ4mC,EAAKsK,GACDhtD,EAAMsqE,UAAYtqE,EAAMuqE,SAASvd,EAAOh7C,KAAK,GAanD,SAAS0wC,EAAKsK,GACZ,IAAIhtD,EAAQgtD,EAAOjnB,eAEnB,IADAujC,EAAM,OAAQtpE,EAAMsqE,SACbtqE,EAAMsqE,SAA6B,OAAlBtd,EAAOh7C,UAmFjC,SAASq6D,EAASvtF,EAAGkhB,GAEnB,OAAqB,IAAjBA,EAAMpe,OAAqB,MAG3Boe,EAAM2wD,WAAYhxC,EAAM3f,EAAMjK,OAAO21B,SAAkB5sC,GAAKA,GAAKkhB,EAAMpe,QAEtD+9B,EAAf3f,EAAMirE,QAAejrE,EAAMjK,OAAOtU,KAAK,IAAqC,IAAxBue,EAAMjK,OAAOnU,OAAoBoe,EAAMjK,OAAO+nC,KAAKprB,KAAgB1S,EAAMjK,OAAO+H,OAAOkC,EAAMpe,QACrJoe,EAAMjK,OAAOyH,SAGbmiB,EASJ,SAAyB7gC,EAAGkW,EAAMk/E,GAChC,IAAIv0D,EACA7gC,EAAIkW,EAAK8oC,KAAKprB,KAAK9wB,QAErB+9B,EAAM3qB,EAAK8oC,KAAKprB,KAAKphB,MAAM,EAAGxS,GAC9BkW,EAAK8oC,KAAKprB,KAAO1d,EAAK8oC,KAAKprB,KAAKphB,MAAMxS,IAGtC6gC,EAFS7gC,IAAMkW,EAAK8oC,KAAKprB,KAAK9wB,OAExBoT,EAAK02B,QAGLwoD,EASV,SAA8Bp1F,EAAGkW,GAC/B,IAAI7V,EAAI6V,EAAK8oC,KACTpgD,EAAI,EACJiiC,EAAMxgC,EAAEuzB,KACZ5zB,GAAK6gC,EAAI/9B,OACT,KAAOzC,EAAIA,EAAEwV,MAAM,CACjB,IAAIpP,EAAMpG,EAAEuzB,KACRmxB,EAAK/kD,EAAIyG,EAAI3D,OAAS2D,EAAI3D,OAAS9C,EAGvC,GAFI+kD,IAAOt+C,EAAI3D,OAAQ+9B,GAAOp6B,EAASo6B,GAAOp6B,EAAI+L,MAAM,EAAGxS,GAEjD,KADVA,GAAK+kD,GACQ,CACPA,IAAOt+C,EAAI3D,UACXlE,EACEyB,EAAEwV,KAAMK,EAAK8oC,KAAO3+C,EAAEwV,KAAUK,EAAK8oC,KAAO9oC,EAAK0T,KAAO,OAE5D1T,EAAK8oC,KAAO3+C,EACZA,EAAEuzB,KAAOntB,EAAI+L,MAAMuyC,IAErB,QAEAnmD,EAGJ,OADAsX,EAAKpT,QAAUlE,EACRiiC,EAhCcw0D,CAAqBr1F,EAAGkW,GAsC/C,SAAwBlW,EAAGkW,GACzB,IAAI2qB,EAAMxG,EAAOM,YAAY36B,GACzBK,EAAI6V,EAAK8oC,KACTpgD,EAAI,EACRyB,EAAEuzB,KAAK4L,KAAKqB,GACZ7gC,GAAKK,EAAEuzB,KAAK9wB,OACZ,KAAOzC,EAAIA,EAAEwV,MAAM,CACjB,IAAIzR,EAAM/D,EAAEuzB,KACRmxB,EAAK/kD,EAAIoE,EAAItB,OAASsB,EAAItB,OAAS9C,EAGvC,GAFAoE,EAAIo7B,KAAKqB,EAAKA,EAAI/9B,OAAS9C,EAAG,EAAG+kD,GAEvB,KADV/kD,GAAK+kD,GACQ,CACPA,IAAO3gD,EAAItB,UACXlE,EACEyB,EAAEwV,KAAMK,EAAK8oC,KAAO3+C,EAAEwV,KAAUK,EAAK8oC,KAAO9oC,EAAK0T,KAAO,OAE5D1T,EAAK8oC,KAAO3+C,EACZA,EAAEuzB,KAAOxvB,EAAIoO,MAAMuyC,IAErB,QAEAnmD,EAGJ,OADAsX,EAAKpT,QAAUlE,EACRiiC,EA9D8Cy0D,CAAet1F,EAAGkW,GAEvE,OAAO2qB,EAtBC00D,CAAgBv1F,EAAGkhB,EAAMjK,OAAQiK,EAAMirE,SAGxCtrD,GAVP,IAAIA,EA4FN,SAAS4sD,EAAYvf,GACnB,IAAIhtD,EAAQgtD,EAAOjnB,eAInB,GAAI/lC,EAAMpe,OAAS,EAAG,MAAM,IAAIuC,MAAM,8CAEjC6b,EAAMwtD,aACTxtD,EAAM4lC,OAAQ,EACdX,EAAIjqB,SAASwxD,EAAexsE,EAAOgtD,IAIvC,SAASwf,EAAcxsE,EAAOgtD,GAEvBhtD,EAAMwtD,YAA+B,IAAjBxtD,EAAMpe,SAC7Boe,EAAMwtD,YAAa,EACnBR,EAAOxnB,UAAW,EAClBwnB,EAAOlxC,KAAK,QAIhB,SAAS50B,EAAQwlF,EAAI9+E,GACnB,IAAK,IAAIvQ,EAAI,EAAGC,EAAIovF,EAAG9qF,OAAQvE,EAAIC,EAAGD,IACpC,GAAIqvF,EAAGrvF,KAAOuQ,EAAG,OAAOvQ,EAE1B,OAAQ,EApoBVgoD,EAASpmD,UAAU+yB,KAAO,SAAUlzB,GAClCwqF,EAAM,OAAQxqF,GACdA,EAAIyI,SAASzI,EAAG,IAChB,IAAIkhB,EAAQ/iB,KAAK8oD,eACb4mC,EAAQ7tF,EAOZ,GALU,IAANA,IAASkhB,EAAMyqE,iBAAkB,GAK3B,IAAN3rF,GAAWkhB,EAAMwqE,eAAiBxqE,EAAMpe,QAAUoe,EAAM8lC,eAAiB9lC,EAAM4lC,OAGjF,OAFA0jC,EAAM,qBAAsBtpE,EAAMpe,OAAQoe,EAAM4lC,OAC3B,IAAjB5lC,EAAMpe,QAAgBoe,EAAM4lC,MAAO2mC,EAAYtvF,MAAWquF,EAAaruF,MACpE,KAMT,GAAU,KAHV6B,EAAIgtF,EAAchtF,EAAGkhB,KAGNA,EAAM4lC,MAEnB,OADqB,IAAjB5lC,EAAMpe,QAAc2qF,EAAYtvF,MAC7B,KA0BT,IA4BI0iC,EA5BAitD,EAAS5sE,EAAMwqE,aAiDnB,OAhDAlB,EAAM,gBAAiBsD,IAGF,IAAjB5sE,EAAMpe,QAAgBoe,EAAMpe,OAAS9C,EAAIkhB,EAAM8lC,gBAEjDwjC,EAAM,6BADNsD,GAAS,GAMP5sE,EAAM4lC,OAAS5lC,EAAMuqE,QAEvBjB,EAAM,mBADNsD,GAAS,GAEAA,IACTtD,EAAM,WACNtpE,EAAMuqE,SAAU,EAChBvqE,EAAMyxD,MAAO,EAEQ,IAAjBzxD,EAAMpe,SAAcoe,EAAMwqE,cAAe,GAE7CvtF,KAAKiuF,MAAMlrE,EAAM8lC,eACjB9lC,EAAMyxD,MAAO,EAGRzxD,EAAMuqE,UAASzrF,EAAIgtF,EAAca,EAAO3sE,KAMnC,QAFD2f,EAAP7gC,EAAI,EAASutF,EAASvtF,EAAGkhB,GAAkB,OAG7CA,EAAMwqE,cAAe,EACrB1rF,EAAI,GAEJkhB,EAAMpe,QAAU9C,EAGG,IAAjBkhB,EAAMpe,SAGHoe,EAAM4lC,QAAO5lC,EAAMwqE,cAAe,GAGnCmC,IAAU7tF,GAAKkhB,EAAM4lC,OAAO2mC,EAAYtvF,OAGlC,OAAR0iC,GAAc1iC,KAAK6+B,KAAK,OAAQ6D,GAE7BA,GAkET0lB,EAASpmD,UAAUisF,MAAQ,SAAUpsF,GACnC7B,KAAK6+B,KAAK,QAAS,IAAI33B,MAAM,gCAG/BkhD,EAASpmD,UAAUq0E,KAAO,SAAU/0C,EAAMsuD,GACxC,IAAI9yE,EAAM9c,KACN+iB,EAAQ/iB,KAAK8oD,eAEjB,OAAQ/lC,EAAMqqE,YACZ,KAAK,EACHrqE,EAAMoqE,MAAQ7rD,EACd,MACF,KAAK,EACHve,EAAMoqE,MAAQ,CAACpqE,EAAMoqE,MAAO7rD,GAC5B,MACF,QACEve,EAAMoqE,MAAMnvE,KAAKsjB,GAGrBve,EAAMqqE,YAAc,EACpBf,EAAM,wBAAyBtpE,EAAMqqE,WAAYwC,GAEjD,IAEIC,IAFUD,IAA6B,IAAjBA,EAASj8E,MAAkB2tB,IAAS7X,EAAQqmE,QAAUxuD,IAAS7X,EAAQsmE,OAE7EtnC,EAAQunC,EAI5B,SAASC,EAAS1nC,EAAU2nC,GAC1B7D,EAAM,YACF9jC,IAAazrC,GACXozE,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5B9D,EAAM,WAEN/qD,EAAK3C,eAAe,QAAS8xC,GAC7BnvC,EAAK3C,eAAe,SAAUwxC,GAC9B7uC,EAAK3C,eAAe,QAASyxD,GAC7B9uD,EAAK3C,eAAe,QAAS6xC,GAC7BlvC,EAAK3C,eAAe,SAAUsxD,GAC9BnzE,EAAI6hB,eAAe,MAAO8pB,GAC1B3rC,EAAI6hB,eAAe,MAAOqxD,GAC1BlzE,EAAI6hB,eAAe,OAAQ0xD,GAE3BC,GAAY,GAORvtE,EAAM+qE,YAAgBxsD,EAAKonB,iBAAkBpnB,EAAKonB,eAAeurB,WAAYmc,KAhCnF,SAAS3nC,IACP4jC,EAAM,SACN/qD,EAAK3tB,MAfHoP,EAAMwtD,WAAYvoB,EAAIjqB,SAAS8xD,GAAY/yE,EAAI2hB,KAAK,MAAOoxD,GAE/DvuD,EAAK/C,GAAG,SAAU0xD,GAoBlB,IAAIG,EA4FN,SAAqBtzE,GACnB,OAAO,WACL,IAAIiG,EAAQjG,EAAIgsC,eAChBujC,EAAM,cAAetpE,EAAM+qE,YACvB/qE,EAAM+qE,YAAY/qE,EAAM+qE,aACH,IAArB/qE,EAAM+qE,YAAoB1B,EAAgBtvE,EAAK,UACjDiG,EAAMsqE,SAAU,EAChB5nB,EAAK3oD,KAnGKyzE,CAAYzzE,GAC1BwkB,EAAK/C,GAAG,QAAS6xD,GAEjB,IAAIE,GAAY,EA2BhB,IAAI+G,GAAsB,EAE1B,SAAShH,EAAOziC,GACdy+B,EAAM,UACNgL,GAAsB,GAElB,IADM/1D,EAAK7d,MAAMmqC,IACCypC,KAKM,IAArBt0E,EAAMqqE,YAAoBrqE,EAAMoqE,QAAU7rD,GAAQve,EAAMqqE,WAAa,IAAqC,IAAhCnjF,EAAQ8Y,EAAMoqE,MAAO7rD,MAAkBgvD,IACpHjE,EAAM,8BAA+BvvE,EAAIgsC,eAAeglC,YACxDhxE,EAAIgsC,eAAeglC,aACnBuJ,GAAsB,GAExBv6E,EAAI0zE,SAMR,SAAShgB,EAAQjqB,GACf8lC,EAAM,UAAW9lC,GACjBypC,IACA1uD,EAAK3C,eAAe,QAAS6xC,GACU,IAAnC4b,EAAgB9qD,EAAM,UAAgBA,EAAKzC,KAAK,QAAS0nB,GAO/D,SAASkqB,IACPnvC,EAAK3C,eAAe,SAAUwxC,GAC9B6f,IAGF,SAAS7f,IACPkc,EAAM,YACN/qD,EAAK3C,eAAe,QAAS8xC,GAC7Buf,IAIF,SAASA,IACP3D,EAAM,UACNvvE,EAAIkzE,OAAO1uD,GAYb,OA1DAxkB,EAAIyhB,GAAG,OAAQ8xD,GA9gBjB,SAAyB1sC,EAAS8sC,EAAO3+B,GAGvC,GAAuC,mBAA5BnO,EAAQ7kB,gBAAgC,OAAO6kB,EAAQ7kB,gBAAgB2xD,EAAO3+B,GAMpFnO,EAAQU,SAAYV,EAAQU,QAAQosC,GAAuCztF,EAAQ2gD,EAAQU,QAAQosC,IAAS9sC,EAAQU,QAAQosC,GAAOvrC,QAAQ4M,GAASnO,EAAQU,QAAQosC,GAAS,CAAC3+B,EAAInO,EAAQU,QAAQosC,IAAtJ9sC,EAAQplB,GAAGkyD,EAAO3+B,GAkiBnEhzB,CAAgBwC,EAAM,QAASkvC,GAO/BlvC,EAAK7C,KAAK,QAASgyC,GAMnBnvC,EAAK7C,KAAK,SAAU0xC,GAQpB7uC,EAAKzC,KAAK,OAAQ/hB,GAGbiG,EAAMsqE,UACThB,EAAM,eACNvvE,EAAImyE,UAGC3tD,GAeT8mB,EAASpmD,UAAUguF,OAAS,SAAU1uD,GACpC,IAAIve,EAAQ/iB,KAAK8oD,eACbonC,EAAa,CAAEC,YAAY,GAG/B,GAAyB,IAArBptE,EAAMqqE,WAAkB,OAAOptF,KAGnC,GAAyB,IAArB+iB,EAAMqqE,WAER,OAAI9rD,GAAQA,IAASve,EAAMoqE,QAEtB7rD,IAAMA,EAAOve,EAAMoqE,OAGxBpqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EACZ/rD,GAAMA,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IARKlwF,KAc3C,IAAKshC,EAAM,CAET,IAAIovD,EAAQ3tE,EAAMoqE,MACd55E,EAAMwP,EAAMqqE,WAChBrqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EAEhB,IAAK,IAAIjtF,EAAI,EAAGA,EAAImT,EAAKnT,IACvBswF,EAAMtwF,GAAGy+B,KAAK,SAAU7+B,KAAMkwF,GAC/B,OAAOlwF,KAIV,IAAI6W,EAAQ5M,EAAQ8Y,EAAMoqE,MAAO7rD,GACjC,OAAe,IAAXzqB,IAEJkM,EAAMoqE,MAAMvsE,OAAO/J,EAAO,GAC1BkM,EAAMqqE,YAAc,EACK,IAArBrqE,EAAMqqE,aAAkBrqE,EAAMoqE,MAAQpqE,EAAMoqE,MAAM,IAEtD7rD,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IANDlwF,MAa3BooD,EAASpmD,UAAUu8B,GAAK,SAAUoyD,EAAI7+B,GACpC,IAAIlkD,EAAM2kE,EAAOvwE,UAAUu8B,GAAGh+B,KAAKP,KAAM2wF,EAAI7+B,GAE7C,GAAW,SAAP6+B,GAEkC,IAAhC3wF,KAAK8oD,eAAeukC,SAAmBrtF,KAAKivF,cAC3C,GAAW,aAAP0B,EAAmB,CAC5B,IAAI5tE,EAAQ/iB,KAAK8oD,eACZ/lC,EAAMwtD,YAAextD,EAAM0qE,oBAC9B1qE,EAAM0qE,kBAAoB1qE,EAAMwqE,cAAe,EAC/CxqE,EAAMyqE,iBAAkB,EACnBzqE,EAAMuqE,QAEAvqE,EAAMpe,QACf0pF,EAAaruF,MAFbgoD,EAAIjqB,SAASmxD,EAAkBlvF,OAOrC,OAAO4N,GAETw6C,EAASpmD,UAAUw8B,YAAc4pB,EAASpmD,UAAUu8B,GASpD6pB,EAASpmD,UAAUitF,OAAS,WAC1B,IAAIlsE,EAAQ/iB,KAAK8oD,eAMjB,OALK/lC,EAAMsqE,UACThB,EAAM,UACNtpE,EAAMsqE,SAAU,EAMpB,SAAgBtd,EAAQhtD,GACjBA,EAAM2qE,kBACT3qE,EAAM2qE,iBAAkB,EACxB1lC,EAAIjqB,SAASoxD,EAASpf,EAAQhtD,IAR9BksE,CAAOjvF,KAAM+iB,IAER/iB,MAuBTooD,EAASpmD,UAAUwuF,MAAQ,WAOzB,OANAnE,EAAM,wBAAyBrsF,KAAK8oD,eAAeukC,UAC/C,IAAUrtF,KAAK8oD,eAAeukC,UAChChB,EAAM,SACNrsF,KAAK8oD,eAAeukC,SAAU,EAC9BrtF,KAAK6+B,KAAK,UAEL7+B,MAYTooD,EAASpmD,UAAU4uF,KAAO,SAAU7gB,GAClC,IAAI2C,EAAQ1yE,KAER+iB,EAAQ/iB,KAAK8oD,eACb6kC,GAAS,EA4Bb,IAAK,IAAIvtF,KA1BT2vE,EAAOxxC,GAAG,OAAO,WAEf,GADA8tD,EAAM,eACFtpE,EAAMirE,UAAYjrE,EAAM4lC,MAAO,CACjC,IAAIiF,EAAQ7qC,EAAMirE,QAAQr6E,MACtBi6C,GAASA,EAAMjpD,QAAQ+tE,EAAM10D,KAAK4vC,GAGxC8kB,EAAM10D,KAAK,SAGb+xD,EAAOxxC,GAAG,QAAQ,SAAUqvB,IAC1By+B,EAAM,gBACFtpE,EAAMirE,UAASpgC,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,IAG3C7qC,EAAM2wD,YAAc,MAAC9lB,KAAyD7qC,EAAM2wD,YAAgB9lB,GAAUA,EAAMjpD,UAE9G+tE,EAAM10D,KAAK4vC,KAEnB+/B,GAAS,EACT5d,EAAOygB,aAMGzgB,OACI5+D,IAAZnR,KAAKI,IAAyC,mBAAd2vE,EAAO3vE,KACzCJ,KAAKI,GAAK,SAAUkoD,GAClB,OAAO,WACL,OAAOynB,EAAOznB,GAAQ74C,MAAMsgE,EAAQrgE,YAF9B,CAIRtP,IAKN,IAAK,IAAIyB,EAAI,EAAGA,EAAIorF,EAAatoF,OAAQ9C,IACvCkuE,EAAOxxC,GAAG0uD,EAAaprF,GAAI7B,KAAK6+B,KAAKj9B,KAAK5B,KAAMitF,EAAaprF,KAa/D,OARA7B,KAAKiuF,MAAQ,SAAUpsF,GACrBwqF,EAAM,gBAAiBxqF,GACnB8rF,IACFA,GAAS,EACT5d,EAAOkf,WAIJjvF,MAGTc,OAAOC,eAAeqnD,EAASpmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAeD,iBAK/BT,EAAS0oC,UAAY1B,I,sCCz3BrBvvF,EAAOD,QAAU,EAAQ,IAAU8jD,c,6BCInC,IAAIsE,EAAM,EAAQ,IA8DlB,SAASipC,EAAY18E,EAAMuuC,GACzBvuC,EAAKsqB,KAAK,QAASikB,GAGrBjjD,EAAOD,QAAU,CACf+1E,QA/DF,SAAiB7yB,EAAKmG,GACpB,IAAIypB,EAAQ1yE,KAERmxF,EAAoBnxF,KAAK8oD,gBAAkB9oD,KAAK8oD,eAAeC,UAC/DqoC,EAAoBpxF,KAAK0oD,gBAAkB1oD,KAAK0oD,eAAeK,UAEnE,OAAIooC,GAAqBC,GACnBnoC,EACFA,EAAGnG,IACMA,GAAS9iD,KAAK0oD,gBAAmB1oD,KAAK0oD,eAAeqsB,cAC9D/sB,EAAIjqB,SAASkzD,EAAajxF,KAAM8iD,GAE3B9iD,OAMLA,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,GAI9B/oD,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,GAGlC/oD,KAAKgpD,SAASlG,GAAO,MAAM,SAAUA,IAC9BmG,GAAMnG,GACTkF,EAAIjqB,SAASkzD,EAAave,EAAO5vB,GAC7B4vB,EAAMhqB,iBACRgqB,EAAMhqB,eAAeqsB,cAAe,IAE7B9rB,GACTA,EAAGnG,MAIA9iD,OA0BPk3E,UAvBF,WACMl3E,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,EAChC/oD,KAAK8oD,eAAewkC,SAAU,EAC9BttF,KAAK8oD,eAAeH,OAAQ,EAC5B3oD,KAAK8oD,eAAeynB,YAAa,GAG/BvwE,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,EAChC/oD,KAAK0oD,eAAeC,OAAQ,EAC5B3oD,KAAK0oD,eAAewrB,QAAS,EAC7Bl0E,KAAK0oD,eAAe2nB,UAAW,EAC/BrwE,KAAK0oD,eAAeqsB,cAAe,M,6BCGvCl1E,EAAOD,QAAU6hD,EAEjB,IAAIyG,EAAS,EAAQ,IAGjBC,EAAOrnD,OAAOY,OAAO,EAAQ,KAMjC,SAASuwF,EAAe1rC,EAAI9wB,GAC1B,IAAIy8D,EAAKlyF,KAAKmyF,gBACdD,EAAGE,cAAe,EAElB,IAAInpC,EAAKipC,EAAGvd,QAEZ,IAAK1rB,EACH,OAAOjpD,KAAK6+B,KAAK,QAAS,IAAI33B,MAAM,yCAGtCgrF,EAAGG,WAAa,KAChBH,EAAGvd,QAAU,KAED,MAARl/C,GACFz1B,KAAKge,KAAKyX,GAEZwzB,EAAG1C,GAEH,IAAI+rC,EAAKtyF,KAAK8oD,eACdwpC,EAAGhF,SAAU,GACTgF,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBACpC7oD,KAAKiuF,MAAMqE,EAAGzpC,eAIlB,SAASpH,EAAUh8B,GACjB,KAAMzlB,gBAAgByhD,GAAY,OAAO,IAAIA,EAAUh8B,GAEvDyiC,EAAO3nD,KAAKP,KAAMylB,GAElBzlB,KAAKmyF,gBAAkB,CACrBF,eAAgBA,EAAerwF,KAAK5B,MACpCuyF,eAAe,EACfH,cAAc,EACdzd,QAAS,KACT0d,WAAY,KACZG,cAAe,MAIjBxyF,KAAK8oD,eAAeykC,cAAe,EAKnCvtF,KAAK8oD,eAAe0rB,MAAO,EAEvB/uD,IAC+B,mBAAtBA,EAAQ5M,YAA0B7Y,KAAK6iD,WAAap9B,EAAQ5M,WAE1C,mBAAlB4M,EAAQ9B,QAAsB3jB,KAAK+iD,OAASt9B,EAAQ9B,QAIjE3jB,KAAKu+B,GAAG,YAAa43C,GAGvB,SAASA,IACP,IAAIzD,EAAQ1yE,KAEe,mBAAhBA,KAAK+iD,OACd/iD,KAAK+iD,QAAO,SAAUwD,EAAI9wB,GACxButB,EAAK0vB,EAAOnsB,EAAI9wB,MAGlButB,EAAKhjD,KAAM,KAAM,MA2DrB,SAASgjD,EAAK+sB,EAAQxpB,EAAI9wB,GACxB,GAAI8wB,EAAI,OAAOwpB,EAAOlxC,KAAK,QAAS0nB,GAOpC,GALY,MAAR9wB,GACFs6C,EAAO/xD,KAAKyX,GAIVs6C,EAAOrnB,eAAe/jD,OAAQ,MAAM,IAAIuC,MAAM,8CAElD,GAAI6oE,EAAOoiB,gBAAgBC,aAAc,MAAM,IAAIlrF,MAAM,kDAEzD,OAAO6oE,EAAO/xD,KAAK,MA7IrBmqC,EAAK3oB,SAAW,EAAQ,GAGxB2oB,EAAK3oB,SAASiiB,EAAWyG,GAuEzBzG,EAAUz/C,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GAE1C,OADA18B,KAAKmyF,gBAAgBI,eAAgB,EAC9BrqC,EAAOlmD,UAAUgc,KAAKzd,KAAKP,KAAM4tD,EAAOlxB,IAajD+kB,EAAUz/C,UAAU6gD,WAAa,SAAU+K,EAAOlxB,EAAUusB,GAC1D,MAAM,IAAI/hD,MAAM,oCAGlBu6C,EAAUz/C,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACtD,IAAIipC,EAAKlyF,KAAKmyF,gBAId,GAHAD,EAAGvd,QAAU1rB,EACbipC,EAAGG,WAAazkC,EAChBskC,EAAGM,cAAgB91D,GACdw1D,EAAGE,aAAc,CACpB,IAAIE,EAAKtyF,KAAK8oD,gBACVopC,EAAGK,eAAiBD,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBAAe7oD,KAAKiuF,MAAMqE,EAAGzpC,iBAO3FpH,EAAUz/C,UAAUisF,MAAQ,SAAUpsF,GACpC,IAAIqwF,EAAKlyF,KAAKmyF,gBAEQ,OAAlBD,EAAGG,YAAuBH,EAAGvd,UAAYud,EAAGE,cAC9CF,EAAGE,cAAe,EAClBpyF,KAAK6iD,WAAWqvC,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,iBAIpDC,EAAGK,eAAgB,GAIvB9wC,EAAUz/C,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC5C,IAAIquC,EAASt3F,KAEbkoD,EAAOlmD,UAAUgnD,SAASzoD,KAAKP,KAAM8iD,GAAK,SAAU2vC,GAClDxpC,EAAGwpC,GACH6E,EAAOz4D,KAAK,c,6BCnMhB,IAAIW,EAAW,EAAQ,GACnB+3D,EAAS,EAAQ,KACjBxtC,EAAO,EAAQ,IACf7tB,EAAS,EAAQ,GAAeA,OAChCs7D,EAAM,EAAQ,IACdjpC,EAAY,EAAQ,IAEpBC,EAAM,EAAQ,IAEdipC,EAAQv7D,EAAOK,MAAM,KAEzB,SAASm7D,EAAMjpC,EAAK9sD,GAClBooD,EAAKxpD,KAAKP,KAAM,UACG,iBAAR2B,IACTA,EAAMu6B,EAAO1b,KAAK7e,IAGpB,IAAIg2F,EAAqB,WAARlpC,GAA4B,WAARA,EAAoB,IAAM,IAE/DzuD,KAAK43F,KAAOnpC,EACZzuD,KAAK2zD,KAAOhyD,EACRA,EAAIgD,OAASgzF,GAEfh2F,GADmB,WAAR8sD,EAAmB,IAAIF,EAAcC,EAAIC,IACzCtM,OAAOxgD,GAAK6pD,SACd7pD,EAAIgD,OAASgzF,IACtBh2F,EAAMu6B,EAAOrb,OAAO,CAAClf,EAAK81F,GAAQE,IAMpC,IAHA,IAAIE,EAAO73F,KAAK83F,MAAQ57D,EAAOM,YAAYm7D,GACvCI,EAAO/3F,KAAKg4F,MAAQ97D,EAAOM,YAAYm7D,GAElCv3F,EAAI,EAAGA,EAAIu3F,EAAWv3F,IAC7By3F,EAAKz3F,GAAc,GAATuB,EAAIvB,GACd23F,EAAK33F,GAAc,GAATuB,EAAIvB,GAEhBJ,KAAKyrD,MAAgB,WAARgD,EAAmB,IAAIF,EAAcC,EAAIC,GACtDzuD,KAAKyrD,MAAMtJ,OAAO01C,GAGpBr4D,EAASk4D,EAAM3tC,GAEf2tC,EAAK11F,UAAUugD,QAAU,SAAU9sB,GACjCz1B,KAAKyrD,MAAMtJ,OAAO1sB,IAGpBiiE,EAAK11F,UAAU+/C,OAAS,WACtB,IAAIrU,EAAI1tC,KAAKyrD,MAAMD,SAEnB,OADyB,WAAdxrD,KAAK43F,KAAoB,IAAIrpC,EAAcC,EAAIxuD,KAAK43F,OACnDz1C,OAAOniD,KAAKg4F,OAAO71C,OAAOzU,GAAG8d,UAG3C3rD,EAAOD,QAAU,SAAqB6uD,EAAK9sD,GAEzC,MAAY,YADZ8sD,EAAMA,EAAInpC,gBACsB,cAARmpC,EACf,IAAIipC,EAAK,SAAU/1F,GAEhB,QAAR8sD,EACK,IAAI8oC,EAAOC,EAAK71F,GAElB,IAAI+1F,EAAKjpC,EAAK9sD,K,gBC5DvB,IAAI2sD,EAAM,EAAQ,IAElBzuD,EAAOD,QAAU,SAAUkZ,GACzB,OAAO,IAAIw1C,GAAMnM,OAAOrpC,GAAQ0yC,W,qnECHlC5rD,EAAQq4F,OAAS,EAAQ,KACzBr4F,EAAQ86D,WAAa,EAAQ,K,cCD7B,IAAIw9B,EAAYnxF,KAAKoD,IAAI,EAAG,IAAM,EAElCtK,EAAOD,QAAU,SAAUu4F,EAAY19B,GACrC,GAA0B,iBAAf09B,EACT,MAAM,IAAI9kF,UAAU,2BAGtB,GAAI8kF,EAAa,EACf,MAAM,IAAI9kF,UAAU,kBAGtB,GAAsB,iBAAXonD,EACT,MAAM,IAAIpnD,UAAU,2BAGtB,GAAIonD,EAAS,GAAKA,EAASy9B,GAAaz9B,GAAWA,EACjD,MAAM,IAAIpnD,UAAU,oB,iBChBxB,kBAEA,GAAIoW,EAAQyU,QACVm2C,EAAkB,aACb,GAAI5qD,EAAQ4U,QAAS,CAG1Bg2C,EAFoB/pE,SAASmf,EAAQ4U,QAAQwV,MAAM,KAAK,GAAGx/B,MAAM,GAAI,KAElC,EAAI,QAAU,cAEjDggE,EAAkB,QAEpBx0E,EAAOD,QAAUy0E,I,iCCXjB,IAAImjB,EAAM,EAAQ,IACdjpC,EAAY,EAAQ,IACpBC,EAAM,EAAQ,IACdtyB,EAAS,EAAQ,GAAeA,OAEhCk8D,EAAkB,EAAQ,IAC1B/jB,EAAkB,EAAQ,IAC1BzxC,EAAW,EAAQ,IAEnB60D,EAAQv7D,EAAOK,MAAM,KACrB87D,EAAQ,CACVb,IAAK,GACLtlB,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRgmB,OAAQ,GACR1c,UAAW,IAGb,SAAS8b,EAAMjpC,EAAK9sD,EAAK42F,GACvB,IAAIzxF,EAkCN,SAAoB2nD,GAClB,SAAS+pC,EAAS/iE,GAChB,OAAO+4B,EAAIC,GAAKtM,OAAO1sB,GAAM+1B,SAM/B,MAAY,WAARiD,GAA4B,cAARA,EAJxB,SAAqBh5B,GACnB,OAAO,IAAI84B,GAAYpM,OAAO1sB,GAAM+1B,UAI1B,QAARiD,EAAsB+oC,EACnBgB,EA5CIC,CAAUhqC,GACjBkpC,EAAqB,WAARlpC,GAA4B,WAARA,EAAoB,IAAM,GAE3D9sD,EAAIgD,OAASgzF,EACfh2F,EAAMmF,EAAKnF,GACFA,EAAIgD,OAASgzF,IACtBh2F,EAAMu6B,EAAOrb,OAAO,CAAClf,EAAK81F,GAAQE,IAKpC,IAFA,IAAIE,EAAO37D,EAAOM,YAAYm7D,EAAYU,EAAM5pC,IAC5CspC,EAAO77D,EAAOM,YAAYm7D,EAAYU,EAAM5pC,IACvCruD,EAAI,EAAGA,EAAIu3F,EAAWv3F,IAC7By3F,EAAKz3F,GAAc,GAATuB,EAAIvB,GACd23F,EAAK33F,GAAc,GAATuB,EAAIvB,GAGhB,IAAIs4F,EAAQx8D,EAAOM,YAAYm7D,EAAYY,EAAU,GACrDV,EAAKx2D,KAAKq3D,EAAO,EAAG,EAAGf,GACvB33F,KAAK04F,MAAQA,EACb14F,KAAK24F,MAAQd,EACb73F,KAAK+3F,KAAOA,EACZ/3F,KAAKyuD,IAAMA,EACXzuD,KAAK23F,UAAYA,EACjB33F,KAAK8G,KAAOA,EACZ9G,KAAKoK,KAAOiuF,EAAM5pC,GAGpBipC,EAAK11F,UAAU07B,IAAM,SAAUjI,EAAMoiE,GAInC,OAHApiE,EAAK4L,KAAKw2D,EAAM73F,KAAK23F,WACb33F,KAAK8G,KAAK+wF,GAChBx2D,KAAKrhC,KAAK+3F,KAAM/3F,KAAK23F,WAChB33F,KAAK8G,KAAK9G,KAAK+3F,OAmDxBl4F,EAAOD,QAnCP,SAAiBg1D,EAAUC,EAAMsjC,EAAY19B,EAAQjP,GACnD4sC,EAAgBD,EAAY19B,GAM5B,IAAIkhB,EAAO,IAAI+b,EAFflsC,EAASA,GAAU,OAHnBoJ,EAAWhyB,EAASgyB,EAAUyf,EAAiB,aAC/Cxf,EAAOjyB,EAASiyB,EAAMwf,EAAiB,SAII1vE,QAEvCi0F,EAAK18D,EAAOM,YAAYi+B,GACxBo+B,EAAS38D,EAAOM,YAAYq4B,EAAKlwD,OAAS,GAC9CkwD,EAAKxzB,KAAKw3D,EAAQ,EAAG,EAAGhkC,EAAKlwD,QAM7B,IAJA,IAAIm0F,EAAU,EACVC,EAAOV,EAAM7sC,GACbnrD,EAAI0G,KAAKiH,KAAKysD,EAASs+B,GAElB34F,EAAI,EAAGA,GAAKC,EAAGD,IAAK,CAC3By4F,EAAOj9C,cAAcx7C,EAAGy0D,EAAKlwD,QAK7B,IAHA,IAAIq0F,EAAIrd,EAAKj+C,IAAIm7D,EAAQld,EAAK+c,OAC1BO,EAAID,EAEC/gF,EAAI,EAAGA,EAAIkgF,EAAYlgF,IAAK,CACnCghF,EAAItd,EAAKj+C,IAAIu7D,EAAGtd,EAAKgd,OACrB,IAAK,IAAIjlF,EAAI,EAAGA,EAAIqlF,EAAMrlF,IAAKslF,EAAEtlF,IAAMulF,EAAEvlF,GAG3CslF,EAAE33D,KAAKu3D,EAAIE,GACXA,GAAWC,EAGb,OAAOH,I,gBCrGT,IAAI18D,EAAS,EAAQ,GAAeA,OAEpCr8B,EAAOD,QAAU,SAAU8qD,EAAOhuB,EAAU/7B,GAC1C,GAAIu7B,EAAOqZ,SAASmV,GAClB,OAAOA,EACF,GAAqB,iBAAVA,EAChB,OAAOxuB,EAAO1b,KAAKkqC,EAAOhuB,GACrB,GAAI14B,YAAYC,OAAOymD,GAC5B,OAAOxuB,EAAO1b,KAAKkqC,EAAM5xC,QAEzB,MAAM,IAAIzF,UAAU1S,EAAO,8D,6BCR/Bf,EAAQ86C,aAAe,SAAsBpyB,EAAOoW,GAKlD,OAJYpW,EAAM,EAAIoW,IAAQ,GAClBpW,EAAM,EAAIoW,IAAQ,GAClBpW,EAAM,EAAIoW,IAAQ,EACnBpW,EAAM,EAAIoW,MACN,GAGjB9+B,EAAQg8C,cAAgB,SAAuBtzB,EAAOjnB,EAAOq9B,GAC3DpW,EAAM,EAAIoW,GAAOr9B,IAAU,GAC3BinB,EAAM,EAAIoW,GAAQr9B,IAAU,GAAM,IAClCinB,EAAM,EAAIoW,GAAQr9B,IAAU,EAAK,IACjCinB,EAAM,EAAIoW,GAAe,IAARr9B,GAGnBzB,EAAQs5F,GAAK,SAAYC,EAAKC,EAAKr3D,EAAKrD,GAItC,IAHA,IAAI26D,EAAO,EACPC,EAAO,EAEFl5F,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAAK,IAAI6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BohF,IAAS,EACTA,GAASD,IAASnhF,EAAI7X,EAAM,EAE9B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BohF,IAAS,EACTA,GAASF,IAASlhF,EAAI7X,EAAM,EAIhC,IAASA,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BqhF,IAAS,EACTA,GAASF,IAASnhF,EAAI7X,EAAM,EAE9B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BqhF,IAAS,EACTA,GAASH,IAASlhF,EAAI7X,EAAM,EAIhC2hC,EAAIrD,EAAM,GAAK26D,IAAS,EACxBt3D,EAAIrD,EAAM,GAAK46D,IAAS,GAG1B15F,EAAQ25F,IAAM,SAAaJ,EAAKC,EAAKr3D,EAAKrD,GAIxC,IAHA,IAAI26D,EAAO,EACPC,EAAO,EAEFl5F,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAI6X,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5BohF,IAAS,EACTA,GAASD,IAASnhF,EAAI7X,EAAM,EAC5Bi5F,IAAS,EACTA,GAASF,IAASlhF,EAAI7X,EAAM,EAGhC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAS6X,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5BqhF,IAAS,EACTA,GAASF,IAASnhF,EAAI7X,EAAM,EAC5Bk5F,IAAS,EACTA,GAASH,IAASlhF,EAAI7X,EAAM,EAIhC2hC,EAAIrD,EAAM,GAAK26D,IAAS,EACxBt3D,EAAIrD,EAAM,GAAK46D,IAAS,GAG1B15F,EAAQ45F,IAAM,SAAaL,EAAKC,EAAKr3D,EAAKrD,GAQxC,IAPA,IAAI26D,EAAO,EACPC,EAAO,EAMFl5F,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAK,IAAI6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BohF,IAAS,EACTA,GAASD,GAAQnhF,EAAI7X,EAAM,EAE7B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BohF,IAAS,EACTA,GAASF,GAAQlhF,EAAI7X,EAAM,EAG/B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BohF,IAAS,EACTA,GAASD,GAAQnhF,EAAI7X,EAAM,EAO7B,IAASA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BqhF,IAAS,EACTA,GAASF,GAAQnhF,EAAI7X,EAAM,EAE7B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BqhF,IAAS,EACTA,GAASH,GAAQlhF,EAAI7X,EAAM,EAG/B,IAAS6X,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5BqhF,IAAS,EACTA,GAASH,GAAQlhF,EAAI7X,EAAM,EAG7B2hC,EAAIrD,EAAM,GAAK26D,IAAS,EACxBt3D,EAAIrD,EAAM,GAAK46D,IAAS,GAG1B15F,EAAQ65F,OAAS,SAAgBl5D,EAAKkO,GACpC,OAASlO,GAAOkO,EAAS,UAAclO,IAAS,GAAKkO,GAGvD,IAAIirD,EAAW,CAEb,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAC3B,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAGzB,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EACzB,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAG5B95F,EAAQ+5F,IAAM,SAAaR,EAAKC,EAAKr3D,EAAKrD,GAKxC,IAJA,IAAI26D,EAAO,EACPC,EAAO,EAEP/lF,EAAMmmF,EAAS/0F,SAAW,EACrBvE,EAAI,EAAGA,EAAImT,EAAKnT,IACvBi5F,IAAS,EACTA,GAASF,IAAQO,EAASt5F,GAAM,EAElC,IAASA,EAAImT,EAAKnT,EAAIs5F,EAAS/0F,OAAQvE,IACrCk5F,IAAS,EACTA,GAASF,IAAQM,EAASt5F,GAAM,EAGlC2hC,EAAIrD,EAAM,GAAK26D,IAAS,EACxBt3D,EAAIrD,EAAM,GAAK46D,IAAS,GAG1B15F,EAAQg6F,OAAS,SAAgB14F,EAAG6gC,EAAKrD,GACvC,IAAI26D,EAAO,EACPC,EAAO,EAEXD,GAAa,EAAJn4F,IAAU,EAAMA,IAAM,GAC/B,IAAK,IAAId,EAAI,GAAIA,GAAK,GAAIA,GAAK,EAC7Bi5F,IAAS,EACTA,GAASn4F,IAAMd,EAAK,GAEtB,IAASA,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5Bk5F,GAASp4F,IAAMd,EAAK,GACpBk5F,IAAS,EAEXA,IAAc,GAAJp4F,IAAa,EAAMA,IAAM,GAEnC6gC,EAAIrD,EAAM,GAAK26D,IAAS,EACxBt3D,EAAIrD,EAAM,GAAK46D,IAAS,GAG1B,IAAIO,EAAS,CACX,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAClD,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAEnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACpD,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAElD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GACjD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EACpD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EACjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAEpD,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EACnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GACnD,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAElD,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAElD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GACnD,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAClD,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EACnD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGpDj6F,EAAQk6F,WAAa,SAAoBX,EAAKC,GAE5C,IADA,IAAIr3D,EAAM,EACD3hC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B2hC,IAAQ,EACRA,GAHS83D,EAAW,GAAJz5F,GADP+4F,IAAS,GAAS,EAAJ/4F,EAAU,KAMnC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B2hC,IAAQ,EACRA,GAHS83D,EAAO,IAAe,GAAJz5F,GADlBg5F,IAAS,GAAS,EAAJh5F,EAAU,KAMnC,OAAO2hC,IAAQ,GAGjB,IAAIg4D,EAAe,CACjB,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GACvD,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAG1Dn6F,EAAQmrC,QAAU,SAAiBxK,GAEjC,IADA,IAAIwB,EAAM,EACD3hC,EAAI,EAAGA,EAAI25F,EAAap1F,OAAQvE,IACvC2hC,IAAQ,EACRA,GAAQxB,IAAQw5D,EAAa35F,GAAM,EAErC,OAAO2hC,IAAQ,GAGjBniC,EAAQo6F,SAAW,SAAkBz5D,EAAKn2B,EAAMw/E,GAE9C,IADA,IAAIthF,EAAMi4B,EAAIp8B,SAAS,GAChBmE,EAAI3D,OAASyF,GAClB9B,EAAM,IAAMA,EAGd,IADA,IAAIy5B,EAAM,GACD3hC,EAAI,EAAGA,EAAIgK,EAAMhK,GAAKwpF,EAC7B7nD,EAAI/jB,KAAK1V,EAAI+L,MAAMjU,EAAGA,EAAIwpF,IAC5B,OAAO7nD,EAAIv9B,KAAK,O,6BC5PlB,IAAI86B,EAAS,EAAQ,GACjBE,EAAW,EAAQ,GAEnBwd,EAAQ,EAAQ,IAChBm6B,EAAS,EAAQ,IAErB,SAAS8iB,IACPj6F,KAAK4d,IAAM,IAAI7a,MAAM,GACrB/C,KAAKshB,KAAO,KAGd,SAAS44E,EAAIz0E,GACX0xD,EAAO52E,KAAKP,KAAMylB,GAElB,IAAI1C,EAAQ,IAAIk3E,EAChBj6F,KAAKm6F,UAAYp3E,EAEjB/iB,KAAKo6F,WAAWr3E,EAAO0C,EAAQ9jB,KAEjC69B,EAAS06D,EAAK/iB,GACdt3E,EAAOD,QAAUs6F,EAEjBA,EAAIx4F,OAAS,SAAgB+jB,GAC3B,OAAO,IAAIy0E,EAAIz0E,IAGjB,IAAI40E,EAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGvBH,EAAIl4F,UAAUo4F,WAAa,SAAoBr3E,EAAOphB,GACpDohB,EAAMzB,KAAO,IAAIve,MAAM,IAEvBu8B,EAAOyd,MAAMp7C,EAAIgD,OAAQ3E,KAAKgrD,UAAW,sBAEzC,IAAIsvC,EAAKt9C,EAAMtC,aAAa/4C,EAAK,GAC7B44F,EAAKv9C,EAAMtC,aAAa/4C,EAAK,GAEjCq7C,EAAMw8C,IAAIc,EAAIC,EAAIx3E,EAAMnF,IAAK,GAC7B08E,EAAKv3E,EAAMnF,IAAI,GACf28E,EAAKx3E,EAAMnF,IAAI,GACf,IAAK,IAAIxd,EAAI,EAAGA,EAAI2iB,EAAMzB,KAAK3c,OAAQvE,GAAK,EAAG,CAC7C,IAAIquC,EAAQ4rD,EAAWj6F,IAAM,GAC7Bk6F,EAAKt9C,EAAMy8C,OAAOa,EAAI7rD,GACtB8rD,EAAKv9C,EAAMy8C,OAAOc,EAAI9rD,GACtBuO,EAAM28C,IAAIW,EAAIC,EAAIx3E,EAAMzB,KAAMlhB,KAIlC85F,EAAIl4F,UAAUugD,QAAU,SAAiBi4C,EAAKC,EAAO14D,EAAK24D,GACxD,IAAI33E,EAAQ/iB,KAAKm6F,UAEb95F,EAAI28C,EAAMtC,aAAa8/C,EAAKC,GAC5Bv5F,EAAI87C,EAAMtC,aAAa8/C,EAAKC,EAAQ,GAGxCz9C,EAAMk8C,GAAG74F,EAAGa,EAAG6hB,EAAMnF,IAAK,GAC1Bvd,EAAI0iB,EAAMnF,IAAI,GACd1c,EAAI6hB,EAAMnF,IAAI,GAEI,YAAd5d,KAAKoW,KACPpW,KAAK26F,SAAS53E,EAAO1iB,EAAGa,EAAG6hB,EAAMnF,IAAK,GAEtC5d,KAAK46F,SAAS73E,EAAO1iB,EAAGa,EAAG6hB,EAAMnF,IAAK,GAExCvd,EAAI0iB,EAAMnF,IAAI,GACd1c,EAAI6hB,EAAMnF,IAAI,GAEdo/B,EAAMpB,cAAc7Z,EAAK1hC,EAAGq6F,GAC5B19C,EAAMpB,cAAc7Z,EAAK7gC,EAAGw5F,EAAS,IAGvCR,EAAIl4F,UAAU+tD,KAAO,SAAcj3C,EAAQ4lB,GAEzC,IADA,IAAIr9B,EAAQyX,EAAOnU,OAAS+5B,EACnBt+B,EAAIs+B,EAAKt+B,EAAI0Y,EAAOnU,OAAQvE,IACnC0Y,EAAO1Y,GAAKiB,EAEd,OAAO,GAGT64F,EAAIl4F,UAAU61E,OAAS,SAAgB/+D,GAErC,IADA,IAAI+hF,EAAM/hF,EAAOA,EAAOnU,OAAS,GACxBvE,EAAI0Y,EAAOnU,OAASk2F,EAAKz6F,EAAI0Y,EAAOnU,OAAQvE,IACnDk/B,EAAOyd,MAAMjkC,EAAO1Y,GAAIy6F,GAE1B,OAAO/hF,EAAOzE,MAAM,EAAGyE,EAAOnU,OAASk2F,IAGzCX,EAAIl4F,UAAU24F,SAAW,SAAkB53E,EAAO+3E,EAAQC,EAAQh5D,EAAKrD,GAKrE,IAJA,IAAIr+B,EAAIy6F,EACJ55F,EAAI65F,EAGC36F,EAAI,EAAGA,EAAI2iB,EAAMzB,KAAK3c,OAAQvE,GAAK,EAAG,CAC7C,IAAI46F,EAAOj4E,EAAMzB,KAAKlhB,GAClB66F,EAAOl4E,EAAMzB,KAAKlhB,EAAI,GAG1B48C,EAAM48C,OAAO14F,EAAG6hB,EAAMnF,IAAK,GAE3Bo9E,GAAQj4E,EAAMnF,IAAI,GAClBq9E,GAAQl4E,EAAMnF,IAAI,GAClB,IAAIzb,EAAI66C,EAAM88C,WAAWkB,EAAMC,GAG3B35F,EAAIJ,EACRA,GAAKb,EAHG28C,EAAMjS,QAAQ5oC,MAGN,EAChB9B,EAAIiB,EAIN07C,EAAMu8C,IAAIr4F,EAAGb,EAAG0hC,EAAKrD,IAGvBw7D,EAAIl4F,UAAU44F,SAAW,SAAkB73E,EAAO+3E,EAAQC,EAAQh5D,EAAKrD,GAKrE,IAJA,IAAIr+B,EAAI06F,EACJ75F,EAAI45F,EAGC16F,EAAI2iB,EAAMzB,KAAK3c,OAAS,EAAGvE,GAAK,EAAGA,GAAK,EAAG,CAClD,IAAI46F,EAAOj4E,EAAMzB,KAAKlhB,GAClB66F,EAAOl4E,EAAMzB,KAAKlhB,EAAI,GAG1B48C,EAAM48C,OAAOv5F,EAAG0iB,EAAMnF,IAAK,GAE3Bo9E,GAAQj4E,EAAMnF,IAAI,GAClBq9E,GAAQl4E,EAAMnF,IAAI,GAClB,IAAIzb,EAAI66C,EAAM88C,WAAWkB,EAAMC,GAG3B35F,EAAIjB,EACRA,GAAKa,EAHG87C,EAAMjS,QAAQ5oC,MAGN,EAChBjB,EAAII,EAIN07C,EAAMu8C,IAAIl5F,EAAGa,EAAG6gC,EAAKrD,K,gBC5IvB,IAAIjwB,EAAM,EAAQ,IACdytB,EAAS,EAAQ,GAAeA,OAChCg/D,EAAS,EAAQ,KAErB,SAASC,EAAU5mF,GACjB,IAAIwtB,EAAMxtB,EAAK6mF,QAAQ7mC,gBAAgBhgD,EAAK8mF,OAE5C,OADAH,EAAO3mF,EAAK8mF,OACLt5D,EAITniC,EAAQ07F,QAAU,SAAU/mF,EAAMq5C,GAChC,IAAI2tC,EAAWx0F,KAAKiH,KAAK4/C,EAAMjpD,OAFjB,IAGV6O,EAAQe,EAAKinF,OAAO72F,OACxB4P,EAAKinF,OAASt/D,EAAOrb,OAAO,CAC1BtM,EAAKinF,OACLt/D,EAAOM,YANK,GAMO++D,KAErB,IAAK,IAAIn7F,EAAI,EAAGA,EAAIm7F,EAAUn7F,IAAK,CACjC,IAAI2hC,EAAMo5D,EAAS5mF,GACfR,EAASP,EAVD,GAUSpT,EACrBmU,EAAKinF,OAAO5/C,cAAc7Z,EAAI,GAAIhuB,EAAS,GAC3CQ,EAAKinF,OAAO5/C,cAAc7Z,EAAI,GAAIhuB,EAAS,GAC3CQ,EAAKinF,OAAO5/C,cAAc7Z,EAAI,GAAIhuB,EAAS,GAC3CQ,EAAKinF,OAAO5/C,cAAc7Z,EAAI,GAAIhuB,EAAS,IAE7C,IAAI8mF,EAAMtmF,EAAKinF,OAAOnnF,MAAM,EAAGu5C,EAAMjpD,QAErC,OADA4P,EAAKinF,OAASjnF,EAAKinF,OAAOnnF,MAAMu5C,EAAMjpD,QAC/B8J,EAAIm/C,EAAOitC,K,cCdpBh7F,EAAOD,QAdP,SAAiBq1D,GAGf,IAFA,IACIh+C,EADA1D,EAAM0hD,EAAGtwD,OAEN4O,KAAO,CAEZ,GAAa,OADb0D,EAAOg+C,EAAG1a,UAAUhnC,IAGb,CACL0D,IACAg+C,EAAGzZ,WAAWvkC,EAAM1D,GACpB,MAJA0hD,EAAGzZ,WAAW,EAAGjoC,M,4lECNvB,IAAIkoF,EAAM,EAAQ,IACdv/D,EAAS,EAAQ,GAAeA,OAChCulB,EAAY,EAAQ,IACpBjiB,EAAW,EAAQ,GACnBk8D,EAAQ,EAAQ,KAChBjtF,EAAM,EAAQ,IACdysF,EAAS,EAAQ,KAqCrB,SAASS,EAAcp6F,EAAMI,EAAKszD,EAAIiF,GACpCzY,EAAUlhD,KAAKP,MAEf,IAAI0tC,EAAIxR,EAAOK,MAAM,EAAG,GAExBv8B,KAAKo7F,QAAU,IAAIK,EAAI/nC,IAAI/xD,GAC3B,IAAIi6F,EAAK57F,KAAKo7F,QAAQ5mC,aAAa9mB,GACnC1tC,KAAK67F,OAAS,IAAIH,EAAME,GACxB3mC,EA/BF,SAAiB1gD,EAAM0gD,EAAI2mC,GACzB,GAAkB,KAAd3mC,EAAGtwD,OAEL,OADA4P,EAAKunF,OAAS5/D,EAAOrb,OAAO,CAACo0C,EAAI/4B,EAAO1b,KAAK,CAAC,EAAG,EAAG,EAAG,MAChD0b,EAAOrb,OAAO,CAACo0C,EAAI/4B,EAAO1b,KAAK,CAAC,EAAG,EAAG,EAAG,MAElD,IAAIu7E,EAAQ,IAAIL,EAAME,GAClBroF,EAAM0hD,EAAGtwD,OACTq3F,EAAQzoF,EAAM,GAClBwoF,EAAM55C,OAAO8S,GACT+mC,IACFA,EAAQ,GAAKA,EACbD,EAAM55C,OAAOjmB,EAAOK,MAAMy/D,EAAO,KAEnCD,EAAM55C,OAAOjmB,EAAOK,MAAM,EAAG,IAC7B,IAAI0/D,EAAe,EAAN1oF,EACTkY,EAAOyQ,EAAOK,MAAM,GACxB9Q,EAAK8vB,YAAY0gD,EAAQ,EAAG,GAC5BF,EAAM55C,OAAO12B,GACblX,EAAKunF,OAASC,EAAMh5E,MACpB,IAAIgf,EAAM7F,EAAO1b,KAAKjM,EAAKunF,QAE3B,OADAZ,EAAOn5D,GACAA,EAUFm6D,CAAOl8F,KAAMi1D,EAAI2mC,GAEtB57F,KAAKq7F,MAAQn/D,EAAO1b,KAAKy0C,GACzBj1D,KAAKw7F,OAASt/D,EAAOM,YAAY,GACjCx8B,KAAKm8F,UAAYjgE,EAAOM,YAAY,GACpCx8B,KAAK46F,SAAW1gC,EAChBl6D,KAAKo8F,MAAQ,EACbp8F,KAAKqrD,KAAO,EACZrrD,KAAKq8F,MAAQ96F,EAEbvB,KAAKs8F,SAAW,KAChBt8F,KAAKu8F,SAAU,EAGjB/8D,EAASm8D,EAAcl6C,GAEvBk6C,EAAa35F,UAAUugD,QAAU,SAAUqL,GACzC,IAAK5tD,KAAKu8F,SAAWv8F,KAAKo8F,MAAO,CAC/B,IAAII,EAAO,GAAMx8F,KAAKo8F,MAAQ,GAC1BI,EAAO,KACTA,EAAOtgE,EAAOK,MAAMigE,EAAM,GAC1Bx8F,KAAK67F,OAAO15C,OAAOq6C,IAIvBx8F,KAAKu8F,SAAU,EACf,IAAIx6D,EAAM/hC,KAAKq8F,MAAMf,QAAQt7F,KAAM4tD,GAOnC,OANI5tD,KAAK46F,SACP56F,KAAK67F,OAAO15C,OAAOyL,GAEnB5tD,KAAK67F,OAAO15C,OAAOpgB,GAErB/hC,KAAKqrD,MAAQuC,EAAMjpD,OACZo9B,GAGT45D,EAAa35F,UAAU+/C,OAAS,WAC9B,GAAI/hD,KAAK46F,WAAa56F,KAAKs8F,SAAU,MAAM,IAAIp1F,MAAM,oDAErD,IAAImyD,EAAM5qD,EAAIzO,KAAK67F,OAAO/5C,MAAmB,EAAb9hD,KAAKo8F,MAAuB,EAAZp8F,KAAKqrD,MAAWrrD,KAAKo7F,QAAQ5mC,aAAax0D,KAAK87F,SAC/F,GAAI97F,KAAK46F,UAnFX,SAAkB93F,EAAG4B,GACnB,IAAIq9B,EAAM,EACNj/B,EAAE6B,SAAWD,EAAEC,QAAQo9B,IAG3B,IADA,IAAIxuB,EAAMxM,KAAKsD,IAAIvH,EAAE6B,OAAQD,EAAEC,QACtBvE,EAAI,EAAGA,EAAImT,IAAOnT,EACzB2hC,GAAQj/B,EAAE1C,GAAKsE,EAAEtE,GAGnB,OAAO2hC,EA0Ec06D,CAAQpjC,EAAKr5D,KAAKs8F,UAAW,MAAM,IAAIp1F,MAAM,oDAElElH,KAAKs8F,SAAWjjC,EAChBr5D,KAAKo7F,QAAQzmC,SAGfgnC,EAAa35F,UAAU0gD,WAAa,WAClC,GAAI1iD,KAAK46F,WAAa1+D,EAAOqZ,SAASv1C,KAAKs8F,UAAW,MAAM,IAAIp1F,MAAM,mDAEtE,OAAOlH,KAAKs8F,UAGdX,EAAa35F,UAAU2gD,WAAa,SAAqB0W,GACvD,IAAKr5D,KAAK46F,SAAU,MAAM,IAAI1zF,MAAM,mDAEpClH,KAAKs8F,SAAWjjC,GAGlBsiC,EAAa35F,UAAU4gD,OAAS,SAAiB38C,GAC/C,GAAIjG,KAAKu8F,QAAS,MAAM,IAAIr1F,MAAM,8CAElClH,KAAK67F,OAAO15C,OAAOl8C,GACnBjG,KAAKo8F,OAASn2F,EAAItB,QAGpB9E,EAAOD,QAAU+7F,G,gBCpHjB,IAAIF,EAAM,EAAQ,IACdv/D,EAAS,EAAQ,GAAeA,OAChCulB,EAAY,EAAQ,IAGxB,SAASk6C,EAAcp6F,EAAMI,EAAKszD,EAAIiF,GACpCzY,EAAUlhD,KAAKP,MAEfA,KAAKo7F,QAAU,IAAIK,EAAI/nC,IAAI/xD,GAC3B3B,KAAKq7F,MAAQn/D,EAAO1b,KAAKy0C,GACzBj1D,KAAKw7F,OAASt/D,EAAOM,YAAY,GACjCx8B,KAAKm8F,UAAYjgE,EAAOM,YAAY,GACpCx8B,KAAK46F,SAAW1gC,EAChBl6D,KAAKq8F,MAAQ96F,EAVA,EAAQ,EAavBi+B,CAASm8D,EAAcl6C,GAEvBk6C,EAAa35F,UAAUugD,QAAU,SAAUqL,GACzC,OAAO5tD,KAAKq8F,MAAMf,QAAQt7F,KAAM4tD,EAAO5tD,KAAK46F,WAG9Ce,EAAa35F,UAAU+/C,OAAS,WAC9B/hD,KAAKo7F,QAAQzmC,SAGf90D,EAAOD,QAAU+7F,G,gBC1BjB,IAAIliB,EAAc,EAAQ,IAC1B55E,EAAOD,QAAU88F,EACjBA,EAAUC,YAAcA,EACxBD,EAAUE,WAAaA,EACvB,IAAIn9D,EAAK,EAAQ,GACbo9D,EAAa,IAAIp9D,EAAG,IAEpBq9D,EAAc,IADA,EAAQ,MAEtB/xF,EAAM,IAAI00B,EAAG,GACbs9D,EAAM,IAAIt9D,EAAG,GACbu9D,EAAO,IAAIv9D,EAAG,GAGdw9D,GAFU,IAAIx9D,EAAG,IACT,IAAIA,EAAG,GACT,IAAIA,EAAG,KACby9D,EAAQ,IAAIz9D,EAAG,GAEf09D,GADQ,IAAI19D,EAAG,GACN,IAAIA,EAAG,KAChB29D,EAAO,IAAI39D,EAAG,GAEdiT,GADS,IAAIjT,EAAG,IACP,MAEb,SAAS49D,IACP,GAAe,OAAX3qD,EACF,OAAOA,EAET,IACI9kC,EAAM,GACVA,EAAI,GAAK,EACT,IAAK,IAAIxN,EAAI,EAAGsT,EAAI,EAAGA,EAHX,QAGsBA,GAAK,EAAG,CAExC,IADA,IAAIjC,EAAO1K,KAAKiH,KAAKjH,KAAK0K,KAAKiC,IACtBuE,EAAI,EAAGA,EAAI7X,GAAKwN,EAAIqK,IAAMxG,GAC7BiC,EAAI9F,EAAIqK,IAAO,EADoBA,KAIrC7X,IAAM6X,GAAKrK,EAAIqK,IAAMxG,IAGzB7D,EAAIxN,KAAOsT,GAGb,OADAg/B,EAAS9kC,EACFA,EAGT,SAAS+uF,EAAYz6F,GAGnB,IAFA,IAAIwwC,EAAS2qD,IAEJj9F,EAAI,EAAGA,EAAIsyC,EAAO/tC,OAAQvE,IACjC,GAA0B,IAAtB8B,EAAEsgC,KAAKkQ,EAAOtyC,IAChB,OAA0B,IAAtB8B,EAAEkuC,KAAKsC,EAAOtyC,IAOtB,OAAO,EAGT,SAASw8F,EAAW16F,GAClB,IAAI49B,EAAML,EAAGgV,KAAKvyC,GAClB,OAA8D,IAAvD66F,EAAI5rD,MAAMrR,GAAK2S,OAAOvwC,EAAEosC,KAAK,IAAIiD,UAAUnB,KAAK,GAGzD,SAASssD,EAAU36E,EAAMu7E,GACvB,GAAIv7E,EAAO,GAET,OACS,IAAI0d,EADD,IAAR69D,GAAqB,IAARA,EACD,CAAC,IAAM,KAEP,CAAC,IAAM,KAKzB,IAAI/8D,EAAK9Y,EAET,IAJA61E,EAAM,IAAI79D,EAAG69D,KAIA,CAEX,IADA/8D,EAAM,IAAId,EAAGg6C,EAAY1yE,KAAKiH,KAAK+T,EAAO,KACnCwe,EAAIgD,YAAcxhB,GACvBwe,EAAIsN,MAAM,GAQZ,GANItN,EAAIqP,UACNrP,EAAI0E,KAAKl6B,GAENw1B,EAAIwD,MAAM,IACbxD,EAAI0E,KAAK83D,GAENO,EAAI98D,IAAIu8D,IAIN,IAAKO,EAAI98D,IAAIw8D,GAClB,KAAOz8D,EAAIplB,IAAI8hF,GAAKz8D,IAAI08D,IACtB38D,EAAI0E,KAAKm4D,QALX,KAAO78D,EAAIplB,IAAI0hF,GAAYr8D,IAAI28D,IAC7B58D,EAAI0E,KAAKm4D,GAQb,GAAIT,EADJl1E,EAAK8Y,EAAIyN,KAAK,KACS2uD,EAAYp8D,IACjCq8D,EAAWn1E,IAAOm1E,EAAWr8D,IAC7Bu8D,EAAYp2E,KAAKe,IAAOq1E,EAAYp2E,KAAK6Z,GACzC,OAAOA,K,gBCpGb,IAAIg9D,EAAK,EAAQ,GACbC,EAAU,EAAQ,IAEtB,SAASC,EAAYrkB,GACnBp5E,KAAKo5E,KAAOA,GAAQ,IAAIokB,EAAQrkB,KAElCt5E,EAAOD,QAAU69F,EAEjBA,EAAY/7F,OAAS,SAAgB03E,GACnC,OAAO,IAAIqkB,EAAYrkB,IAGzBqkB,EAAYz7F,UAAU07F,WAAa,SAAoB77F,GACrD,IAAI0R,EAAM1R,EAAE0hC,YACRo6D,EAAY52F,KAAKiH,KAAKuF,EAAM,GAIhC,GACE,IAAIzQ,EAAI,IAAIy6F,EAAGv9F,KAAKo5E,KAAKC,SAASskB,UAC7B76F,EAAE09B,IAAI3+B,IAAM,GAEnB,OAAOiB,GAGT26F,EAAYz7F,UAAU47F,WAAa,SAAoBpqF,EAAOqqF,GAE5D,IAAIzzF,EAAOyzF,EAAK14D,IAAI3xB,GACpB,OAAOA,EAAM/I,IAAIzK,KAAK09F,WAAWtzF,KAGnCqzF,EAAYz7F,UAAU0kB,KAAO,SAAc7kB,EAAG6R,EAAGu1C,GAC/C,IAAI11C,EAAM1R,EAAE0hC,YACRzD,EAAMy9D,EAAG9oD,KAAK5yC,GACdi8F,EAAO,IAAIP,EAAG,GAAGpsD,MAAMrR,GAEtBpsB,IACHA,EAAI3M,KAAK8G,IAAI,EAAI0F,EAAM,GAAM,IAI/B,IADA,IAAIiU,EAAK3lB,EAAEysC,KAAK,GACPnsC,EAAI,GAAIqlB,EAAGuc,MAAM5hC,GAAIA,KAM9B,IALA,IAAIzB,EAAImB,EAAEmsC,KAAK7rC,GAEX47F,EAAMv2E,EAAG2pB,MAAMrR,GAGZpsB,EAAI,EAAGA,IAAK,CACjB,IAAI5Q,EAAI9C,KAAK49F,WAAW,IAAIL,EAAG,GAAI/1E,GAC/ByhC,GACFA,EAAGnmD,GAEL,IAAI6N,EAAI7N,EAAEquC,MAAMrR,GAAK2S,OAAO/xC,GAC5B,GAAoB,IAAhBiQ,EAAE6vB,IAAIs9D,IAA8B,IAAfntF,EAAE6vB,IAAIu9D,GAA/B,CAGA,IAAK,IAAI39F,EAAI,EAAGA,EAAI+B,EAAG/B,IAAK,CAG1B,GAAoB,KAFpBuQ,EAAIA,EAAEwhC,UAEA3R,IAAIs9D,GACR,OAAO,EACT,GAAmB,IAAfntF,EAAE6vB,IAAIu9D,GACR,MAGJ,GAAI39F,IAAM+B,EACR,OAAO,GAGX,OAvBY,GA0Bds7F,EAAYz7F,UAAUg8F,WAAa,SAAoBn8F,EAAG6R,GACxD,IAAIH,EAAM1R,EAAE0hC,YACRzD,EAAMy9D,EAAG9oD,KAAK5yC,GACdi8F,EAAO,IAAIP,EAAG,GAAGpsD,MAAMrR,GAEtBpsB,IACHA,EAAI3M,KAAK8G,IAAI,EAAI0F,EAAM,GAAM,IAI/B,IADA,IAAIiU,EAAK3lB,EAAEysC,KAAK,GACPnsC,EAAI,GAAIqlB,EAAGuc,MAAM5hC,GAAIA,KAK9B,IAJA,IAAIzB,EAAImB,EAAEmsC,KAAK7rC,GAEX47F,EAAMv2E,EAAG2pB,MAAMrR,GAEZpsB,EAAI,EAAGA,IAAK,CACjB,IAAI5Q,EAAI9C,KAAK49F,WAAW,IAAIL,EAAG,GAAI/1E,GAE/BmoB,EAAI9tC,EAAEouC,IAAIntC,GACd,GAAkB,IAAd6sC,EAAES,KAAK,GACT,OAAOT,EAET,IAAIh/B,EAAI7N,EAAEquC,MAAMrR,GAAK2S,OAAO/xC,GAC5B,GAAoB,IAAhBiQ,EAAE6vB,IAAIs9D,IAA8B,IAAfntF,EAAE6vB,IAAIu9D,GAA/B,CAGA,IAAK,IAAI39F,EAAI,EAAGA,EAAI+B,EAAG/B,IAAK,CAG1B,GAAoB,KAFpBuQ,EAAIA,EAAEwhC,UAEA3R,IAAIs9D,GACR,OAAOntF,EAAE4gC,UAAUjD,KAAK,GAAG2B,IAAIpuC,GACjC,GAAmB,IAAf8O,EAAE6vB,IAAIu9D,GACR,MAGJ,GAAI39F,IAAM+B,EAER,OADAwO,EAAIA,EAAEwhC,UACGZ,UAAUjD,KAAK,GAAG2B,IAAIpuC,IAInC,OAAO,I,8BCjHT,cAyBA,IAAIqmD,EAHJroD,EAAOD,QAAUwoD,EAMjBA,EAAS+jC,cAAgBA,EAGhB,EAAQ,IAAUzoC,aAA3B,IAEI0oC,EAAkB,SAAyBzoC,EAASvtC,GACtD,OAAOutC,EAAQ3kB,UAAU5oB,GAAMzR,QAO7B4tE,EAAS,EAAQ,KAIjBr2C,EAAS,EAAQ,GAAUA,OAE3Bm3C,EAAgB76B,EAAOvD,YAAc,aAYzC,IAEIo3C,EAFAC,EAAY,EAAQ,KAKtBD,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAKV,IAcI7qC,EACA8qC,EACAhsE,EAhBAisE,EAAa,EAAQ,KAErBlZ,EAAc,EAAQ,KAGtBmZ,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,IAAa9iC,MACtC+iC,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAOxD,EAAQ,EAAR,CAAoB3kC,EAAUmqB,GAE9B,IAAIya,EAAiBzZ,EAAYyZ,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASd,EAAc1mE,EAASsqD,EAAQ0D,GACtCvrB,EAASA,GAAU,EAAQ,IAC3BziC,EAAUA,GAAW,GAMG,kBAAbguD,IAAwBA,EAAW1D,aAAkB7nB,GAGhEloD,KAAK0zE,aAAejuD,EAAQiuD,WACxBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQynE,oBAG7DltF,KAAK6oD,cAAgB6jC,EAAiB1sF,KAAMylB,EAAS,wBAAyBguD,GAI9EzzE,KAAK8Y,OAAS,IAAI2zE,EAClBzsF,KAAK2E,OAAS,EACd3E,KAAKmtF,MAAQ,KACbntF,KAAKotF,WAAa,EAClBptF,KAAKqtF,QAAU,KACfrtF,KAAK2oD,OAAQ,EACb3oD,KAAKuwE,YAAa,EAClBvwE,KAAKstF,SAAU,EAKfttF,KAAKw0E,MAAO,EAGZx0E,KAAKutF,cAAe,EACpBvtF,KAAKwtF,iBAAkB,EACvBxtF,KAAKytF,mBAAoB,EACzBztF,KAAK0tF,iBAAkB,EACvB1tF,KAAK2tF,QAAS,EAEd3tF,KAAK4tF,WAAkC,IAAtBnoE,EAAQmoE,UAEzB5tF,KAAK6tF,cAAgBpoE,EAAQooE,YAE7B7tF,KAAK+oD,WAAY,EAIjB/oD,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAElDr0E,KAAK8tF,WAAa,EAElB9tF,KAAK+tF,aAAc,EACnB/tF,KAAKguF,QAAU,KACfhuF,KAAK08B,SAAW,KAEZjX,EAAQiX,WACLglB,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D1hD,KAAKguF,QAAU,IAAItsC,EAAcj8B,EAAQiX,UACzC18B,KAAK08B,SAAWjX,EAAQiX,UAI5B,SAAS0rB,EAAS3iC,GAEhB,GADAyiC,EAASA,GAAU,EAAQ,MACrBloD,gBAAgBooD,GAAW,OAAO,IAAIA,EAAS3iC,GAGrD,IAAIguD,EAAWzzE,gBAAgBkoD,EAC/BloD,KAAK8oD,eAAiB,IAAIqjC,EAAc1mE,EAASzlB,KAAMyzE,GAEvDzzE,KAAKuoD,UAAW,EAEZ9iC,IAC0B,mBAAjBA,EAAQsP,OAAqB/0B,KAAKiuF,MAAQxoE,EAAQsP,MAC9B,mBAApBtP,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,UAGrEpD,EAAOhyE,KAAKP,MAiEd,SAASkuF,EAAiBne,EAAQniB,EAAOlxB,EAAUyxD,EAAYC,GAC7D/B,EAAM,mBAAoBz+B,GAC1B,IAMMrH,EANFxjC,EAAQgtD,EAAOjnB,eAEnB,GAAc,OAAV8E,EACF7qC,EAAMuqE,SAAU,EAyOpB,SAAoBvd,EAAQhtD,GAE1B,GADAspE,EAAM,cACFtpE,EAAM4lC,MAAO,OAEjB,GAAI5lC,EAAMirE,QAAS,CACjB,IAAIpgC,EAAQ7qC,EAAMirE,QAAQr6E,MAEtBi6C,GAASA,EAAMjpD,SACjBoe,EAAMjK,OAAOkF,KAAK4vC,GAClB7qC,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,QAIjDoe,EAAM4lC,OAAQ,EAEV5lC,EAAMyxD,KAIR6Z,EAAate,IAGbhtD,EAAMwqE,cAAe,EAEhBxqE,EAAMyqE,kBACTzqE,EAAMyqE,iBAAkB,EACxBc,EAAcve,KAlQhBwe,CAAWxe,EAAQhtD,QAKnB,GAFKqrE,IAAgB7nC,EAmDzB,SAAsBxjC,EAAO6qC,GAC3B,IAAIrH,EAhQiBhhD,EAkQFqoD,EAjQZ1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAiQA,iBAAVzlB,QAAgCz8C,IAAVy8C,GAAwB7qC,EAAM2wD,aACtFntB,EAAK,IAAIqmC,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAeh/B,IAnQ/E,IAAuBroD,EAsQrB,OAAOghD,EA1DqBioC,CAAazrE,EAAO6qC,IAE1CrH,EACFymC,EAAejd,EAAQxpB,QAClB,GAAIxjC,EAAM2wD,YAAc9lB,GAASA,EAAMjpD,OAAS,EAKrD,GAJqB,iBAAVipD,GAAuB7qC,EAAM2wD,YAAc5yE,OAAOsU,eAAew4C,KAAW1xB,EAAOl6B,YAC5F4rD,EAtNR,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GAqNL0oB,CAAoB1oB,IAG1BugC,EACEprE,EAAMwtD,WAAYyc,EAAejd,EAAQ,IAAIgd,GAA2C0B,EAAS1e,EAAQhtD,EAAO6qC,GAAO,QACtH,GAAI7qC,EAAM4lC,MACfqkC,EAAejd,EAAQ,IAAI8c,OACtB,IAAI9pE,EAAMgmC,UACf,OAAO,EAEPhmC,EAAMuqE,SAAU,EAEZvqE,EAAMirE,UAAYtxD,GACpBkxB,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,GACxB7qC,EAAM2wD,YAA+B,IAAjB9lB,EAAMjpD,OAAc8pF,EAAS1e,EAAQhtD,EAAO6qC,GAAO,GAAY8gC,EAAc3e,EAAQhtD,IAE7G0rE,EAAS1e,EAAQhtD,EAAO6qC,GAAO,QAGzBugC,IACVprE,EAAMuqE,SAAU,EAChBoB,EAAc3e,EAAQhtD,IAO1B,OAAQA,EAAM4lC,QAAU5lC,EAAMpe,OAASoe,EAAM8lC,eAAkC,IAAjB9lC,EAAMpe,QAGtE,SAAS8pF,EAAS1e,EAAQhtD,EAAO6qC,EAAOugC,GAClCprE,EAAMsqE,SAA4B,IAAjBtqE,EAAMpe,SAAiBoe,EAAMyxD,MAChDzxD,EAAM+qE,WAAa,EACnB/d,EAAOlxC,KAAK,OAAQ+uB,KAGpB7qC,EAAMpe,QAAUoe,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACzCwpF,EAAYprE,EAAMjK,OAAOosC,QAAQ0I,GAAY7qC,EAAMjK,OAAOkF,KAAK4vC,GAC/D7qC,EAAMwqE,cAAcc,EAAate,IAGvC2e,EAAc3e,EAAQhtD,GAvHxBjiB,OAAOC,eAAeqnD,EAASpmD,UAAW,YAAa,CAIrDhB,YAAY,EACZC,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK8oD,gBAIF9oD,KAAK8oD,eAAeC,WAE7B1jD,IAAK,SAAahE,GAGXrB,KAAK8oD,iBAMV9oD,KAAK8oD,eAAeC,UAAY1nD,MAGpC+mD,EAASpmD,UAAU2zE,QAAUpC,EAAYoC,QACzCvtB,EAASpmD,UAAUi1E,WAAa1D,EAAY2D,UAE5C9uB,EAASpmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CA,EAAGnG,IAOLsF,EAASpmD,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GACzC,IACI0xD,EADArrE,EAAQ/iB,KAAK8oD,eAkBjB,OAfK/lC,EAAM2wD,WAYT0a,GAAiB,EAXI,iBAAVxgC,KACTlxB,EAAWA,GAAY3Z,EAAMsxD,mBAEZtxD,EAAM2Z,WACrBkxB,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,GAC3BA,EAAW,IAGb0xD,GAAiB,GAMdF,EAAiBluF,KAAM4tD,EAAOlxB,GAAU,EAAO0xD,IAIxDhmC,EAASpmD,UAAUkjD,QAAU,SAAU0I,GACrC,OAAOsgC,EAAiBluF,KAAM4tD,EAAO,MAAM,GAAM,IAyEnDxF,EAASpmD,UAAU2sF,SAAW,WAC5B,OAAuC,IAAhC3uF,KAAK8oD,eAAeukC,SAI7BjlC,EAASpmD,UAAU4sF,YAAc,SAAUnwC,GACpCiD,IAAeA,EAAgB,EAAQ,IAAmBA,eAC/D,IAAIssC,EAAU,IAAItsC,EAAcjD,GAChCz+C,KAAK8oD,eAAeklC,QAAUA,EAE9BhuF,KAAK8oD,eAAepsB,SAAW18B,KAAK8oD,eAAeklC,QAAQtxD,SAK3D,IAHA,IAAIx6B,EAAIlC,KAAK8oD,eAAehwC,OAAO+nC,KAC/B/7B,EAAU,GAED,OAAN5iB,GACL4iB,GAAWkpE,EAAQvqE,MAAMvhB,EAAEuzB,MAC3BvzB,EAAIA,EAAEwV,KAOR,OAJA1X,KAAK8oD,eAAehwC,OAAOyH,QAEX,KAAZuE,GAAgB9kB,KAAK8oD,eAAehwC,OAAOkF,KAAK8G,GACpD9kB,KAAK8oD,eAAenkD,OAASmgB,EAAQngB,OAC9B3E,MA2BT,SAAS6uF,EAAchtF,EAAGkhB,GACxB,OAAIlhB,GAAK,GAAsB,IAAjBkhB,EAAMpe,QAAgBoe,EAAM4lC,MAAc,EACpD5lC,EAAM2wD,WAAmB,EAEzB7xE,GAAMA,EAEJkhB,EAAMsqE,SAAWtqE,EAAMpe,OAAeoe,EAAMjK,OAAO+nC,KAAKprB,KAAK9wB,OAAmBoe,EAAMpe,QAIxF9C,EAAIkhB,EAAM8lC,gBAAe9lC,EAAM8lC,cA/BrC,SAAiChnD,GAgB/B,OAfIA,GAHQ,WAKVA,EALU,YASVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,EAe4CitF,CAAwBjtF,IACvEA,GAAKkhB,EAAMpe,OAAe9C,EAEzBkhB,EAAM4lC,MAKJ5lC,EAAMpe,QAJXoe,EAAMwqE,cAAe,EACd,IAwIX,SAASc,EAAate,GACpB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,eAAgBtpE,EAAMwqE,aAAcxqE,EAAMyqE,iBAChDzqE,EAAMwqE,cAAe,EAEhBxqE,EAAMyqE,kBACTnB,EAAM,eAAgBtpE,EAAMsqE,SAC5BtqE,EAAMyqE,iBAAkB,EACxB/jE,EAAQsU,SAASuwD,EAAeve,IAIpC,SAASue,EAAcve,GACrB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,gBAAiBtpE,EAAMgmC,UAAWhmC,EAAMpe,OAAQoe,EAAM4lC,OAEvD5lC,EAAMgmC,YAAchmC,EAAMpe,SAAUoe,EAAM4lC,QAC7ConB,EAAOlxC,KAAK,YACZ9b,EAAMyqE,iBAAkB,GAS1BzqE,EAAMwqE,cAAgBxqE,EAAMsqE,UAAYtqE,EAAM4lC,OAAS5lC,EAAMpe,QAAUoe,EAAM8lC,cAC7E4c,EAAKsK,GASP,SAAS2e,EAAc3e,EAAQhtD,GACxBA,EAAMgrE,cACThrE,EAAMgrE,aAAc,EACpBtkE,EAAQsU,SAASgxD,EAAgBhf,EAAQhtD,IAI7C,SAASgsE,EAAehf,EAAQhtD,GAwB9B,MAAQA,EAAMuqE,UAAYvqE,EAAM4lC,QAAU5lC,EAAMpe,OAASoe,EAAM8lC,eAAiB9lC,EAAMsqE,SAA4B,IAAjBtqE,EAAMpe,SAAe,CACpH,IAAI4O,EAAMwP,EAAMpe,OAGhB,GAFA0nF,EAAM,wBACNtc,EAAOh7C,KAAK,GACRxhB,IAAQwP,EAAMpe,OAChB,MAGJoe,EAAMgrE,aAAc,EA6QtB,SAASiB,EAAwBz6E,GAC/B,IAAIwO,EAAQxO,EAAKu0C,eACjB/lC,EAAM0qE,kBAAoBl5E,EAAKwxC,cAAc,YAAc,EAEvDhjC,EAAM2qE,kBAAoB3qE,EAAM4qE,OAGlC5qE,EAAMsqE,SAAU,EACP94E,EAAKwxC,cAAc,QAAU,GACtCxxC,EAAK06E,SAIT,SAASC,EAAiB36E,GACxB83E,EAAM,4BACN93E,EAAKwgB,KAAK,GA4BZ,SAASo6D,EAAQpf,EAAQhtD,GACvBspE,EAAM,SAAUtpE,EAAMuqE,SAEjBvqE,EAAMuqE,SACTvd,EAAOh7C,KAAK,GAGdhS,EAAM2qE,iBAAkB,EACxB3d,EAAOlxC,KAAK,UACZ4mC,EAAKsK,GACDhtD,EAAMsqE,UAAYtqE,EAAMuqE,SAASvd,EAAOh7C,KAAK,GAgBnD,SAAS0wC,EAAKsK,GACZ,IAAIhtD,EAAQgtD,EAAOjnB,eAGnB,IAFAujC,EAAM,OAAQtpE,EAAMsqE,SAEbtqE,EAAMsqE,SAA6B,OAAlBtd,EAAOh7C,UA4HjC,SAASq6D,EAASvtF,EAAGkhB,GAEnB,OAAqB,IAAjBA,EAAMpe,OAAqB,MAE3Boe,EAAM2wD,WAAYhxC,EAAM3f,EAAMjK,OAAO21B,SAAkB5sC,GAAKA,GAAKkhB,EAAMpe,QAEtD+9B,EAAf3f,EAAMirE,QAAejrE,EAAMjK,OAAOtU,KAAK,IAAqC,IAAxBue,EAAMjK,OAAOnU,OAAoBoe,EAAMjK,OAAOG,QAAmB8J,EAAMjK,OAAO+H,OAAOkC,EAAMpe,QACnJoe,EAAMjK,OAAOyH,SAGbmiB,EAAM3f,EAAMjK,OAAOu2E,QAAQxtF,EAAGkhB,EAAMirE,SAE/BtrD,GATP,IAAIA,EAYN,SAAS4sD,EAAYvf,GACnB,IAAIhtD,EAAQgtD,EAAOjnB,eACnBujC,EAAM,cAAetpE,EAAMwtD,YAEtBxtD,EAAMwtD,aACTxtD,EAAM4lC,OAAQ,EACdl/B,EAAQsU,SAASwxD,EAAexsE,EAAOgtD,IAI3C,SAASwf,EAAcxsE,EAAOgtD,GAG5B,GAFAsc,EAAM,gBAAiBtpE,EAAMwtD,WAAYxtD,EAAMpe,SAE1Coe,EAAMwtD,YAA+B,IAAjBxtD,EAAMpe,SAC7Boe,EAAMwtD,YAAa,EACnBR,EAAOxnB,UAAW,EAClBwnB,EAAOlxC,KAAK,OAER9b,EAAM8qE,aAAa,CAGrB,IAAI2B,EAASzf,EAAOrnB,iBAEf8mC,GAAUA,EAAO3B,aAAe2B,EAAOnf,WAC1CN,EAAO4F,WAgBf,SAAS1rE,EAAQwlF,EAAI9+E,GACnB,IAAK,IAAIvQ,EAAI,EAAGC,EAAIovF,EAAG9qF,OAAQvE,EAAIC,EAAGD,IACpC,GAAIqvF,EAAGrvF,KAAOuQ,EAAG,OAAOvQ,EAG1B,OAAQ,EA3tBVgoD,EAASpmD,UAAU+yB,KAAO,SAAUlzB,GAClCwqF,EAAM,OAAQxqF,GACdA,EAAIyI,SAASzI,EAAG,IAChB,IAAIkhB,EAAQ/iB,KAAK8oD,eACb4mC,EAAQ7tF,EAKZ,GAJU,IAANA,IAASkhB,EAAMyqE,iBAAkB,GAI3B,IAAN3rF,GAAWkhB,EAAMwqE,gBAA0C,IAAxBxqE,EAAM8lC,cAAsB9lC,EAAMpe,QAAUoe,EAAM8lC,cAAgB9lC,EAAMpe,OAAS,IAAMoe,EAAM4lC,OAGlI,OAFA0jC,EAAM,qBAAsBtpE,EAAMpe,OAAQoe,EAAM4lC,OAC3B,IAAjB5lC,EAAMpe,QAAgBoe,EAAM4lC,MAAO2mC,EAAYtvF,MAAWquF,EAAaruF,MACpE,KAKT,GAAU,KAFV6B,EAAIgtF,EAAchtF,EAAGkhB,KAENA,EAAM4lC,MAEnB,OADqB,IAAjB5lC,EAAMpe,QAAc2qF,EAAYtvF,MAC7B,KAyBT,IA4BI0iC,EA5BAitD,EAAS5sE,EAAMwqE,aAgDnB,OA/CAlB,EAAM,gBAAiBsD,IAEF,IAAjB5sE,EAAMpe,QAAgBoe,EAAMpe,OAAS9C,EAAIkhB,EAAM8lC,gBAEjDwjC,EAAM,6BADNsD,GAAS,GAMP5sE,EAAM4lC,OAAS5lC,EAAMuqE,QAEvBjB,EAAM,mBADNsD,GAAS,GAEAA,IACTtD,EAAM,WACNtpE,EAAMuqE,SAAU,EAChBvqE,EAAMyxD,MAAO,EAEQ,IAAjBzxD,EAAMpe,SAAcoe,EAAMwqE,cAAe,GAE7CvtF,KAAKiuF,MAAMlrE,EAAM8lC,eAEjB9lC,EAAMyxD,MAAO,EAGRzxD,EAAMuqE,UAASzrF,EAAIgtF,EAAca,EAAO3sE,KAMnC,QAFD2f,EAAP7gC,EAAI,EAASutF,EAASvtF,EAAGkhB,GAAkB,OAG7CA,EAAMwqE,aAAexqE,EAAMpe,QAAUoe,EAAM8lC,cAC3ChnD,EAAI,IAEJkhB,EAAMpe,QAAU9C,EAChBkhB,EAAM+qE,WAAa,GAGA,IAAjB/qE,EAAMpe,SAGHoe,EAAM4lC,QAAO5lC,EAAMwqE,cAAe,GAEnCmC,IAAU7tF,GAAKkhB,EAAM4lC,OAAO2mC,EAAYtvF,OAGlC,OAAR0iC,GAAc1iC,KAAK6+B,KAAK,OAAQ6D,GAC7BA,GAwHT0lB,EAASpmD,UAAUisF,MAAQ,SAAUpsF,GACnCmrF,EAAehtF,KAAM,IAAI8sF,EAA2B,aAGtD1kC,EAASpmD,UAAUq0E,KAAO,SAAU/0C,EAAMsuD,GACxC,IAAI9yE,EAAM9c,KACN+iB,EAAQ/iB,KAAK8oD,eAEjB,OAAQ/lC,EAAMqqE,YACZ,KAAK,EACHrqE,EAAMoqE,MAAQ7rD,EACd,MAEF,KAAK,EACHve,EAAMoqE,MAAQ,CAACpqE,EAAMoqE,MAAO7rD,GAC5B,MAEF,QACEve,EAAMoqE,MAAMnvE,KAAKsjB,GAIrBve,EAAMqqE,YAAc,EACpBf,EAAM,wBAAyBtpE,EAAMqqE,WAAYwC,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASj8E,MAAkB2tB,IAAS7X,EAAQqmE,QAAUxuD,IAAS7X,EAAQsmE,OAC7EtnC,EAAQunC,EAI5B,SAASC,EAAS1nC,EAAU2nC,GAC1B7D,EAAM,YAEF9jC,IAAazrC,GACXozE,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5B9D,EAAM,WAEN/qD,EAAK3C,eAAe,QAAS8xC,GAC7BnvC,EAAK3C,eAAe,SAAUwxC,GAC9B7uC,EAAK3C,eAAe,QAASyxD,GAC7B9uD,EAAK3C,eAAe,QAAS6xC,GAC7BlvC,EAAK3C,eAAe,SAAUsxD,GAC9BnzE,EAAI6hB,eAAe,MAAO8pB,GAC1B3rC,EAAI6hB,eAAe,MAAOqxD,GAC1BlzE,EAAI6hB,eAAe,OAAQ0xD,GAC3BC,GAAY,GAMRvtE,EAAM+qE,YAAgBxsD,EAAKonB,iBAAkBpnB,EAAKonB,eAAeurB,WAAYmc,KA9BnF,SAAS3nC,IACP4jC,EAAM,SACN/qD,EAAK3tB,MAhBHoP,EAAMwtD,WAAY9mD,EAAQsU,SAAS8xD,GAAY/yE,EAAI2hB,KAAK,MAAOoxD,GACnEvuD,EAAK/C,GAAG,SAAU0xD,GAsBlB,IAAIG,EAwFN,SAAqBtzE,GACnB,OAAO,WACL,IAAIiG,EAAQjG,EAAIgsC,eAChBujC,EAAM,cAAetpE,EAAM+qE,YACvB/qE,EAAM+qE,YAAY/qE,EAAM+qE,aAEH,IAArB/qE,EAAM+qE,YAAoB1B,EAAgBtvE,EAAK,UACjDiG,EAAMsqE,SAAU,EAChB5nB,EAAK3oD,KAhGKyzE,CAAYzzE,GAC1BwkB,EAAK/C,GAAG,QAAS6xD,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAOziC,GACdy+B,EAAM,UACN,IAAI3pD,EAAMpB,EAAK7d,MAAMmqC,GACrBy+B,EAAM,aAAc3pD,IAER,IAARA,KAKwB,IAArB3f,EAAMqqE,YAAoBrqE,EAAMoqE,QAAU7rD,GAAQve,EAAMqqE,WAAa,IAAqC,IAAhCnjF,EAAQ8Y,EAAMoqE,MAAO7rD,MAAkBgvD,IACpHjE,EAAM,8BAA+BtpE,EAAM+qE,YAC3C/qE,EAAM+qE,cAGRhxE,EAAI0zE,SAMR,SAAShgB,EAAQjqB,GACf8lC,EAAM,UAAW9lC,GACjBypC,IACA1uD,EAAK3C,eAAe,QAAS6xC,GACU,IAAnC4b,EAAgB9qD,EAAM,UAAgB0rD,EAAe1rD,EAAMilB,GAMjE,SAASkqB,IACPnvC,EAAK3C,eAAe,SAAUwxC,GAC9B6f,IAKF,SAAS7f,IACPkc,EAAM,YACN/qD,EAAK3C,eAAe,QAAS8xC,GAC7Buf,IAKF,SAASA,IACP3D,EAAM,UACNvvE,EAAIkzE,OAAO1uD,GAWb,OA7DAxkB,EAAIyhB,GAAG,OAAQ8xD,GAtkBjB,SAAyB1sC,EAAS8sC,EAAO3+B,GAGvC,GAAuC,mBAA5BnO,EAAQ7kB,gBAAgC,OAAO6kB,EAAQ7kB,gBAAgB2xD,EAAO3+B,GAKpFnO,EAAQU,SAAYV,EAAQU,QAAQosC,GAAuC1tF,MAAMC,QAAQ2gD,EAAQU,QAAQosC,IAAS9sC,EAAQU,QAAQosC,GAAOvrC,QAAQ4M,GAASnO,EAAQU,QAAQosC,GAAS,CAAC3+B,EAAInO,EAAQU,QAAQosC,IAA5J9sC,EAAQplB,GAAGkyD,EAAO3+B,GA6lBnEhzB,CAAgBwC,EAAM,QAASkvC,GAO/BlvC,EAAK7C,KAAK,QAASgyC,GAQnBnvC,EAAK7C,KAAK,SAAU0xC,GAQpB7uC,EAAKzC,KAAK,OAAQ/hB,GAEbiG,EAAMsqE,UACThB,EAAM,eACNvvE,EAAImyE,UAGC3tD,GAgBT8mB,EAASpmD,UAAUguF,OAAS,SAAU1uD,GACpC,IAAIve,EAAQ/iB,KAAK8oD,eACbonC,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBptE,EAAMqqE,WAAkB,OAAOptF,KAEnC,GAAyB,IAArB+iB,EAAMqqE,WAER,OAAI9rD,GAAQA,IAASve,EAAMoqE,QACtB7rD,IAAMA,EAAOve,EAAMoqE,OAExBpqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EACZ/rD,GAAMA,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IANKlwF,KAW3C,IAAKshC,EAAM,CAET,IAAIovD,EAAQ3tE,EAAMoqE,MACd55E,EAAMwP,EAAMqqE,WAChBrqE,EAAMoqE,MAAQ,KACdpqE,EAAMqqE,WAAa,EACnBrqE,EAAMsqE,SAAU,EAEhB,IAAK,IAAIjtF,EAAI,EAAGA,EAAImT,EAAKnT,IACvBswF,EAAMtwF,GAAGy+B,KAAK,SAAU7+B,KAAM,CAC5BmwF,YAAY,IAIhB,OAAOnwF,KAIT,IAAI6W,EAAQ5M,EAAQ8Y,EAAMoqE,MAAO7rD,GACjC,OAAe,IAAXzqB,IACJkM,EAAMoqE,MAAMvsE,OAAO/J,EAAO,GAC1BkM,EAAMqqE,YAAc,EACK,IAArBrqE,EAAMqqE,aAAkBrqE,EAAMoqE,MAAQpqE,EAAMoqE,MAAM,IACtD7rD,EAAKzC,KAAK,SAAU7+B,KAAMkwF,IAJDlwF,MAU3BooD,EAASpmD,UAAUu8B,GAAK,SAAUoyD,EAAI7+B,GACpC,IAAIlkD,EAAM2kE,EAAOvwE,UAAUu8B,GAAGh+B,KAAKP,KAAM2wF,EAAI7+B,GACzC/uC,EAAQ/iB,KAAK8oD,eAuBjB,MArBW,SAAP6nC,GAGF5tE,EAAM0qE,kBAAoBztF,KAAK+lD,cAAc,YAAc,GAErC,IAAlBhjC,EAAMsqE,SAAmBrtF,KAAKivF,UAClB,aAAP0B,IACJ5tE,EAAMwtD,YAAextD,EAAM0qE,oBAC9B1qE,EAAM0qE,kBAAoB1qE,EAAMwqE,cAAe,EAC/CxqE,EAAMsqE,SAAU,EAChBtqE,EAAMyqE,iBAAkB,EACxBnB,EAAM,cAAetpE,EAAMpe,OAAQoe,EAAMuqE,SAErCvqE,EAAMpe,OACR0pF,EAAaruF,MACH+iB,EAAMuqE,SAChB7jE,EAAQsU,SAASmxD,EAAkBlvF,QAKlC4N,GAGTw6C,EAASpmD,UAAUw8B,YAAc4pB,EAASpmD,UAAUu8B,GAEpD6pB,EAASpmD,UAAU28B,eAAiB,SAAUgyD,EAAI7+B,GAChD,IAAIlkD,EAAM2kE,EAAOvwE,UAAU28B,eAAep+B,KAAKP,KAAM2wF,EAAI7+B,GAYzD,MAVW,aAAP6+B,GAOFlnE,EAAQsU,SAASixD,EAAyBhvF,MAGrC4N,GAGTw6C,EAASpmD,UAAU48B,mBAAqB,SAAU+xD,GAChD,IAAI/iF,EAAM2kE,EAAOvwE,UAAU48B,mBAAmBnvB,MAAMzP,KAAM0P,WAY1D,MAVW,aAAPihF,QAA4Bx/E,IAAPw/E,GAOvBlnE,EAAQsU,SAASixD,EAAyBhvF,MAGrC4N,GAuBTw6C,EAASpmD,UAAUitF,OAAS,WAC1B,IAAIlsE,EAAQ/iB,KAAK8oD,eAYjB,OAVK/lC,EAAMsqE,UACThB,EAAM,UAINtpE,EAAMsqE,SAAWtqE,EAAM0qE,kBAQ3B,SAAgB1d,EAAQhtD,GACjBA,EAAM2qE,kBACT3qE,EAAM2qE,iBAAkB,EACxBjkE,EAAQsU,SAASoxD,EAASpf,EAAQhtD,IAVlCksE,CAAOjvF,KAAM+iB,IAGfA,EAAM4qE,QAAS,EACR3tF,MAuBTooD,EAASpmD,UAAUwuF,MAAQ,WAUzB,OATAnE,EAAM,wBAAyBrsF,KAAK8oD,eAAeukC,UAEf,IAAhCrtF,KAAK8oD,eAAeukC,UACtBhB,EAAM,SACNrsF,KAAK8oD,eAAeukC,SAAU,EAC9BrtF,KAAK6+B,KAAK,UAGZ7+B,KAAK8oD,eAAe6kC,QAAS,EACtB3tF,MAeTooD,EAASpmD,UAAU4uF,KAAO,SAAU7gB,GAClC,IAAI2C,EAAQ1yE,KAER+iB,EAAQ/iB,KAAK8oD,eACb6kC,GAAS,EA0Bb,IAAK,IAAIvtF,KAzBT2vE,EAAOxxC,GAAG,OAAO,WAGf,GAFA8tD,EAAM,eAEFtpE,EAAMirE,UAAYjrE,EAAM4lC,MAAO,CACjC,IAAIiF,EAAQ7qC,EAAMirE,QAAQr6E,MACtBi6C,GAASA,EAAMjpD,QAAQ+tE,EAAM10D,KAAK4vC,GAGxC8kB,EAAM10D,KAAK,SAEb+xD,EAAOxxC,GAAG,QAAQ,SAAUqvB,IAC1By+B,EAAM,gBACFtpE,EAAMirE,UAASpgC,EAAQ7qC,EAAMirE,QAAQvqE,MAAMmqC,IAE3C7qC,EAAM2wD,YAAc,MAAC9lB,KAAyD7qC,EAAM2wD,YAAgB9lB,GAAUA,EAAMjpD,UAE9G+tE,EAAM10D,KAAK4vC,KAGnB+/B,GAAS,EACT5d,EAAOygB,aAKGzgB,OACI5+D,IAAZnR,KAAKI,IAAyC,mBAAd2vE,EAAO3vE,KACzCJ,KAAKI,GAAK,SAAoBkoD,GAC5B,OAAO,WACL,OAAOynB,EAAOznB,GAAQ74C,MAAMsgE,EAAQrgE,YAF9B,CAIRtP,IAKN,IAAK,IAAIyB,EAAI,EAAGA,EAAIorF,EAAatoF,OAAQ9C,IACvCkuE,EAAOxxC,GAAG0uD,EAAaprF,GAAI7B,KAAK6+B,KAAKj9B,KAAK5B,KAAMitF,EAAaprF,KAc/D,OATA7B,KAAKiuF,MAAQ,SAAUpsF,GACrBwqF,EAAM,gBAAiBxqF,GAEnB8rF,IACFA,GAAS,EACT5d,EAAOkf,WAIJjvF,MAGa,mBAAXmB,SACTinD,EAASpmD,UAAUb,OAAO0vF,eAAiB,WAKzC,YAJ0C1/E,IAAtCq7E,IACFA,EAAoC,EAAQ,MAGvCA,EAAkCxsF,QAI7Cc,OAAOC,eAAeqnD,EAASpmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAeD,iBAG/B/nD,OAAOC,eAAeqnD,EAASpmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,gBAAkB9oD,KAAK8oD,eAAehwC,UAGtDhY,OAAOC,eAAeqnD,EAASpmD,UAAW,kBAAmB,CAI3DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAeukC,SAE7BhoF,IAAK,SAAa0d,GACZ/iB,KAAK8oD,iBACP9oD,KAAK8oD,eAAeukC,QAAUtqE,MAKpCqlC,EAAS0oC,UAAY1B,EACrBtuF,OAAOC,eAAeqnD,EAASpmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK8oD,eAAenkD,UAoDT,mBAAXxD,SACTinD,EAAS5nC,KAAO,SAAUuwE,EAAU/gB,GAKlC,YAJa7+D,IAATqP,IACFA,EAAO,EAAQ,MAGVA,EAAK4nC,EAAU2oC,EAAU/gB,O,sCCzlCpCnwE,EAAOD,QAAU,EAAQ,IAAU8jD,c,8BCAnC,YAuDA,SAASstC,EAAoBz8E,EAAMuuC,GACjCmuC,EAAY18E,EAAMuuC,GAClBouC,EAAY38E,GAGd,SAAS28E,EAAY38E,GACfA,EAAKm0C,iBAAmBn0C,EAAKm0C,eAAeklC,WAC5Cr5E,EAAKu0C,iBAAmBv0C,EAAKu0C,eAAe8kC,WAChDr5E,EAAKsqB,KAAK,SAsBZ,SAASoyD,EAAY18E,EAAMuuC,GACzBvuC,EAAKsqB,KAAK,QAASikB,GAcrBjjD,EAAOD,QAAU,CACf+1E,QAnGF,SAAiB7yB,EAAKmG,GACpB,IAAIypB,EAAQ1yE,KAERmxF,EAAoBnxF,KAAK8oD,gBAAkB9oD,KAAK8oD,eAAeC,UAC/DqoC,EAAoBpxF,KAAK0oD,gBAAkB1oD,KAAK0oD,eAAeK,UAEnE,OAAIooC,GAAqBC,GACnBnoC,EACFA,EAAGnG,GACMA,IACJ9iD,KAAK0oD,eAEE1oD,KAAK0oD,eAAeqsB,eAC9B/0E,KAAK0oD,eAAeqsB,cAAe,EACnCtrD,EAAQsU,SAASkzD,EAAajxF,KAAM8iD,IAHpCr5B,EAAQsU,SAASkzD,EAAajxF,KAAM8iD,IAOjC9iD,OAKLA,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,GAI9B/oD,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,GAGlC/oD,KAAKgpD,SAASlG,GAAO,MAAM,SAAUA,IAC9BmG,GAAMnG,EACJ4vB,EAAMhqB,eAECgqB,EAAMhqB,eAAeqsB,aAI/BtrD,EAAQsU,SAASmzD,EAAaxe,IAH9BA,EAAMhqB,eAAeqsB,cAAe,EACpCtrD,EAAQsU,SAASizD,EAAqBte,EAAO5vB,IAH7Cr5B,EAAQsU,SAASizD,EAAqBte,EAAO5vB,GAOtCmG,GACTx/B,EAAQsU,SAASmzD,EAAaxe,GAC9BzpB,EAAGnG,IAEHr5B,EAAQsU,SAASmzD,EAAaxe,MAI3B1yE,OAkDPk3E,UApCF,WACMl3E,KAAK8oD,iBACP9oD,KAAK8oD,eAAeC,WAAY,EAChC/oD,KAAK8oD,eAAewkC,SAAU,EAC9BttF,KAAK8oD,eAAeH,OAAQ,EAC5B3oD,KAAK8oD,eAAeynB,YAAa,GAG/BvwE,KAAK0oD,iBACP1oD,KAAK0oD,eAAeK,WAAY,EAChC/oD,KAAK0oD,eAAeC,OAAQ,EAC5B3oD,KAAK0oD,eAAewrB,QAAS,EAC7Bl0E,KAAK0oD,eAAesrB,aAAc,EAClCh0E,KAAK0oD,eAAe4sB,aAAc,EAClCt1E,KAAK0oD,eAAe2nB,UAAW,EAC/BrwE,KAAK0oD,eAAeqsB,cAAe,IAsBrCiY,eAdF,SAAwBjd,EAAQjtB,GAM9B,IAAIuuC,EAASthB,EAAOjnB,eAChB0mC,EAASzf,EAAOrnB,eAChB2oC,GAAUA,EAAOxD,aAAe2B,GAAUA,EAAO3B,YAAa9d,EAAO4F,QAAQ7yB,GAAUitB,EAAOlxC,KAAK,QAASikB,O,8CC/FlH,IAAIwuC,EAAwB,EAAQ,IAAmBznC,MAAMynC,sBAsB7DzxF,EAAOD,QAAU,CACf8sF,iBAjBF,SAA0B3pE,EAAO0C,EAAS8rE,EAAW9d,GACnD,IAAIG,EALN,SAA2BnuD,EAASguD,EAAU8d,GAC5C,OAAgC,MAAzB9rE,EAAQojC,cAAwBpjC,EAAQojC,cAAgB4qB,EAAWhuD,EAAQ8rE,GAAa,KAIrFC,CAAkB/rE,EAASguD,EAAU8d,GAE/C,GAAW,MAAP3d,EAAa,CACf,IAAM1hE,SAAS0hE,IAAQ7sE,KAAK+G,MAAM8lE,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI0d,EADC7d,EAAW8d,EAAY,gBACI3d,GAGxC,OAAO7sE,KAAK+G,MAAM8lE,GAIpB,OAAO7wD,EAAM2wD,WAAa,GAAK,S,8BCrBjC,cAqCA,SAASjB,EAAc1vD,GACrB,IAAI2vD,EAAQ1yE,KAEZA,KAAK0X,KAAO,KACZ1X,KAAK0gB,MAAQ,KAEb1gB,KAAK2yE,OAAS,YAimBhB,SAAwBC,EAAS7vD,EAAO+/B,GACtC,IAAIpiC,EAAQkyD,EAAQlyD,MACpBkyD,EAAQlyD,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIuoC,EAAKvoC,EAAMjM,SACfsO,EAAM8vD,YACN5pB,EAAGnG,GACHpiC,EAAQA,EAAMhJ,KAIhBqL,EAAM+vD,mBAAmBp7D,KAAOk7D,EA5mB9BG,CAAeL,EAAO3vD,IAQ1B,IAAImlC,EA3BJroD,EAAOD,QAAUyoD,EA8BjBA,EAAS6qB,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW,EAAQ,KAMjBb,EAAS,EAAQ,KAIjBr2C,EAAS,EAAQ,GAAUA,OAE3Bm3C,EAAgB76B,EAAOvD,YAAc,aAUzC,IAkIIq+B,EAlIAC,EAAc,EAAQ,KAGtBmZ,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,IAAa9iC,MACtC+iC,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5C2E,EAAwB9E,EAAe8E,sBACvCC,EAAyB/E,EAAe+E,uBACxCC,EAAuBhF,EAAegF,qBACtCC,EAAyBjF,EAAeiF,uBACxCC,EAA6BlF,EAAekF,2BAC5CC,EAAuBnF,EAAemF,qBAEtC9E,EAAiBzZ,EAAYyZ,eAIjC,SAASxZ,KAET,SAASN,EAAcztD,EAASsqD,EAAQ0D,GACtCvrB,EAASA,GAAU,EAAQ,IAC3BziC,EAAUA,GAAW,GAMG,kBAAbguD,IAAwBA,EAAW1D,aAAkB7nB,GAGhEloD,KAAK0zE,aAAejuD,EAAQiuD,WACxBD,IAAUzzE,KAAK0zE,WAAa1zE,KAAK0zE,cAAgBjuD,EAAQkuD,oBAI7D3zE,KAAK6oD,cAAgB6jC,EAAiB1sF,KAAMylB,EAAS,wBAAyBguD,GAE9EzzE,KAAKg0E,aAAc,EAEnBh0E,KAAKi0E,WAAY,EAEjBj0E,KAAKk0E,QAAS,EAEdl0E,KAAK2oD,OAAQ,EAEb3oD,KAAKqwE,UAAW,EAEhBrwE,KAAK+oD,WAAY,EAIjB,IAAIorB,GAAqC,IAA1B1uD,EAAQ2uD,cACvBp0E,KAAKo0E,eAAiBD,EAItBn0E,KAAKq0E,gBAAkB5uD,EAAQ4uD,iBAAmB,OAIlDr0E,KAAK2E,OAAS,EAEd3E,KAAKs0E,SAAU,EAEft0E,KAAKu0E,OAAS,EAKdv0E,KAAKw0E,MAAO,EAIZx0E,KAAKy0E,kBAAmB,EAExBz0E,KAAK00E,QAAU,SAAUnuB,IA6R3B,SAAiBwpB,EAAQxpB,GACvB,IAAIxjC,EAAQgtD,EAAOrnB,eACf8rB,EAAOzxD,EAAMyxD,KACbvrB,EAAKlmC,EAAM4xD,QACf,GAAkB,mBAAP1rB,EAAmB,MAAM,IAAIwoC,EAExC,GAbF,SAA4B1uE,GAC1BA,EAAMuxD,SAAU,EAChBvxD,EAAM4xD,QAAU,KAChB5xD,EAAMpe,QAAUoe,EAAM6xD,SACtB7xD,EAAM6xD,SAAW,EAQjBC,CAAmB9xD,GACfwjC,GArCN,SAAsBwpB,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,KAC3ClmC,EAAM8vD,UAEJ2B,GAGF/qD,EAAQsU,SAASkrB,EAAI1C,GAGrB98B,EAAQsU,SAAS+2C,EAAa/E,EAAQhtD,GACtCgtD,EAAOrnB,eAAeqsB,cAAe,EACrCiY,EAAejd,EAAQxpB,KAIvB0C,EAAG1C,GACHwpB,EAAOrnB,eAAeqsB,cAAe,EACrCiY,EAAejd,EAAQxpB,GAGvBuuB,EAAY/E,EAAQhtD,IAiBdiyD,CAAajF,EAAQhtD,EAAOyxD,EAAMjuB,EAAI0C,OAAS,CAErD,IAAIonB,EAAW4E,EAAWlyD,IAAUgtD,EAAOhnB,UAEtCsnB,GAAattD,EAAMwxD,QAAWxxD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBACjEC,EAAYpF,EAAQhtD,GAGlByxD,EACF/qD,EAAQsU,SAASq3C,EAAYrF,EAAQhtD,EAAOstD,EAAUpnB,GAEtDmsB,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,IA7StCyrB,CAAQ3E,EAAQxpB,IAIlBvmD,KAAK20E,QAAU,KAEf30E,KAAK40E,SAAW,EAChB50E,KAAKk1E,gBAAkB,KACvBl1E,KAAKq1E,oBAAsB,KAG3Br1E,KAAK6yE,UAAY,EAGjB7yE,KAAKs1E,aAAc,EAEnBt1E,KAAK+0E,cAAe,EAEpB/0E,KAAK4tF,WAAkC,IAAtBnoE,EAAQmoE,UAEzB5tF,KAAK6tF,cAAgBpoE,EAAQooE,YAE7B7tF,KAAKu1E,qBAAuB,EAG5Bv1E,KAAK8yE,mBAAqB,IAAIL,EAAczyE,MA4C9C,SAASqoD,EAAS5iC,GAUhB,IAAIguD,EAAWzzE,gBATfkoD,EAASA,GAAU,EAAQ,KAU3B,IAAKurB,IAAaH,EAAgB/yE,KAAK8nD,EAAUroD,MAAO,OAAO,IAAIqoD,EAAS5iC,GAC5EzlB,KAAK0oD,eAAiB,IAAIwqB,EAAcztD,EAASzlB,KAAMyzE,GAEvDzzE,KAAKwC,UAAW,EAEZijB,IAC2B,mBAAlBA,EAAQhC,QAAsBzjB,KAAKw1E,OAAS/vD,EAAQhC,OACjC,mBAAnBgC,EAAQgwD,SAAuBz1E,KAAK01E,QAAUjwD,EAAQgwD,QAClC,mBAApBhwD,EAAQkwD,UAAwB31E,KAAKgpD,SAAWvjC,EAAQkwD,SACtC,mBAAlBlwD,EAAQq8B,QAAsB9hD,KAAK+hD,OAASt8B,EAAQq8B,QAGjEywB,EAAOhyE,KAAKP,MAwJd,SAAS41E,EAAQ7F,EAAQhtD,EAAO0yD,EAAQliE,EAAKq6C,EAAOlxB,EAAUusB,GAC5DlmC,EAAM6xD,SAAWrhE,EACjBwP,EAAM4xD,QAAU1rB,EAChBlmC,EAAMuxD,SAAU,EAChBvxD,EAAMyxD,MAAO,EACTzxD,EAAMgmC,UAAWhmC,EAAM2xD,QAAQ,IAAIid,EAAqB,UAAmBlc,EAAQ1F,EAAO2F,QAAQ9nB,EAAO7qC,EAAM2xD,SAAc3E,EAAOyF,OAAO5nB,EAAOlxB,EAAU3Z,EAAM2xD,SACtK3xD,EAAMyxD,MAAO,EAwDf,SAASY,EAAWrF,EAAQhtD,EAAOstD,EAAUpnB,GACtConB,GASP,SAAsBN,EAAQhtD,GACP,IAAjBA,EAAMpe,QAAgBoe,EAAMkxD,YAC9BlxD,EAAMkxD,WAAY,EAClBlE,EAAOlxC,KAAK,UAZCg3C,CAAa9F,EAAQhtD,GACpCA,EAAM8vD,YACN5pB,IACA6rB,EAAY/E,EAAQhtD,GActB,SAASoyD,EAAYpF,EAAQhtD,GAC3BA,EAAM0xD,kBAAmB,EACzB,IAAI/zD,EAAQqC,EAAMmyD,gBAElB,GAAInF,EAAO2F,SAAWh1D,GAASA,EAAMhJ,KAAM,CAEzC,IAAIrX,EAAI0iB,EAAMwyD,qBACVz8D,EAAS,IAAI/V,MAAM1C,GACnBy1E,EAAS/yD,EAAM+vD,mBACnBgD,EAAOp1D,MAAQA,EAIf,IAHA,IAAIlJ,EAAQ,EACRu+D,GAAa,EAEVr1D,GACL5H,EAAOtB,GAASkJ,EACXA,EAAMs1D,QAAOD,GAAa,GAC/Br1D,EAAQA,EAAMhJ,KACdF,GAAS,EAGXsB,EAAOi9D,WAAaA,EACpBH,EAAQ7F,EAAQhtD,GAAO,EAAMA,EAAMpe,OAAQmU,EAAQ,GAAIg9D,EAAOnD,QAG9D5vD,EAAM8vD,YACN9vD,EAAMsyD,oBAAsB,KAExBS,EAAOp+D,MACTqL,EAAM+vD,mBAAqBgD,EAAOp+D,KAClCo+D,EAAOp+D,KAAO,MAEdqL,EAAM+vD,mBAAqB,IAAIL,EAAc1vD,GAG/CA,EAAMwyD,qBAAuB,MACxB,CAEL,KAAO70D,GAAO,CACZ,IAAIktC,EAAQltC,EAAMktC,MACdlxB,EAAWhc,EAAMgc,SACjBusB,EAAKvoC,EAAMjM,SASf,GAPAmhE,EAAQ7F,EAAQhtD,GAAO,EADbA,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACJipD,EAAOlxB,EAAUusB,GACpDvoC,EAAQA,EAAMhJ,KACdqL,EAAMwyD,uBAKFxyD,EAAMuxD,QACR,MAIU,OAAV5zD,IAAgBqC,EAAMsyD,oBAAsB,MAGlDtyD,EAAMmyD,gBAAkBx0D,EACxBqC,EAAM0xD,kBAAmB,EA2C3B,SAASQ,EAAWlyD,GAClB,OAAOA,EAAMmxD,QAA2B,IAAjBnxD,EAAMpe,QAA0C,OAA1Boe,EAAMmyD,kBAA6BnyD,EAAMstD,WAAattD,EAAMuxD,QAG3G,SAAS2B,EAAUlG,EAAQhtD,GACzBgtD,EAAOhuB,QAAO,SAAUe,GACtB//B,EAAM8vD,YAEF/vB,GACFkqC,EAAejd,EAAQjtB,GAGzB//B,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,aACZi2C,EAAY/E,EAAQhtD,MAiBxB,SAAS+xD,EAAY/E,EAAQhtD,GAC3B,IAAImzD,EAAOjB,EAAWlyD,GAEtB,GAAImzD,IAhBN,SAAmBnG,EAAQhtD,GACpBA,EAAMuyD,aAAgBvyD,EAAMixD,cACF,mBAAlBjE,EAAOhuB,QAA0Bh/B,EAAMgmC,WAKhDhmC,EAAMuyD,aAAc,EACpBvF,EAAOlxC,KAAK,eALZ9b,EAAM8vD,YACN9vD,EAAMixD,aAAc,EACpBvqD,EAAQsU,SAASk4C,EAAWlG,EAAQhtD,KAYtCozD,CAAUpG,EAAQhtD,GAEM,IAApBA,EAAM8vD,YACR9vD,EAAMstD,UAAW,EACjBN,EAAOlxC,KAAK,UAER9b,EAAM8qE,cAAa,CAGrB,IAAIwD,EAASthB,EAAOjnB,iBAEfuoC,GAAUA,EAAOxD,aAAewD,EAAO9gB,aAC1CR,EAAO4F,UAMf,OAAOO,EA3hBT,EAAQ,EAAR,CAAoB7tB,EAAUkqB,GAyF9BW,EAAclxE,UAAU8oD,UAAY,WAIlC,IAHA,IAAInvC,EAAU3b,KAAKk1E,gBACfnzC,EAAM,GAEHpmB,GACLomB,EAAI/jB,KAAKrC,GACTA,EAAUA,EAAQjE,KAGpB,OAAOqqB,GAGT,WACE,IACEjhC,OAAOC,eAAemyE,EAAclxE,UAAW,SAAU,CACvDf,IAAKkyE,EAAaC,WAAU,WAC1B,OAAOpzE,KAAK8qD,cACX,6EAAmF,aAExF,MAAOloD,KAPX,GAcsB,mBAAXzB,QAAyBA,OAAOi1E,aAAiE,mBAA3C9hE,SAAStS,UAAUb,OAAOi1E,cACzF9C,EAAkBh/D,SAAStS,UAAUb,OAAOi1E,aAC5Ct1E,OAAOC,eAAesnD,EAAUlnD,OAAOi1E,YAAa,CAClD/0E,MAAO,SAAeS,GACpB,QAAIwxE,EAAgB/yE,KAAKP,KAAM8B,IAC3B9B,OAASqoD,IACNvmD,GAAUA,EAAO4mD,0BAA0BwqB,OAItDI,EAAkB,SAAyBxxE,GACzC,OAAOA,aAAkB9B,MA+B7BqoD,EAASrmD,UAAUq0E,KAAO,WACxB2W,EAAehtF,KAAM,IAAI0xF,IA+B3BrpC,EAASrmD,UAAUyhB,MAAQ,SAAUmqC,EAAOlxB,EAAUusB,GACpD,IAnNqB1jD,EAmNjBwd,EAAQ/iB,KAAK0oD,eACbhmB,GAAM,EAENszC,GAASjzD,EAAM2wD,aAtNEnuE,EAsN0BqoD,EArNxC1xB,EAAOqZ,SAAShwC,IAAQA,aAAe8tE,GAsO9C,OAfI2C,IAAU95C,EAAOqZ,SAASqY,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAO1xB,EAAO1b,KAAKotC,GA4NT0oB,CAAoB1oB,IAGN,mBAAblxB,IACTusB,EAAKvsB,EACLA,EAAW,MAGTs5C,EAAOt5C,EAAW,SAAmBA,IAAUA,EAAW3Z,EAAMsxD,iBAClD,mBAAPprB,IAAmBA,EAAKuqB,GAC/BzwD,EAAMmxD,OA7CZ,SAAuBnE,EAAQ9mB,GAC7B,IAAI1C,EAAK,IAAIsrC,EAEb7E,EAAejd,EAAQxpB,GACvB98B,EAAQsU,SAASkrB,EAAI1C,GAyCHgwB,CAAcv2E,KAAMipD,IAAa+sB,GAnCrD,SAAoBjG,EAAQhtD,EAAO6qC,EAAO3E,GACxC,IAAI1C,EAQJ,OANc,OAAVqH,EACFrH,EAAK,IAAIqrC,EACiB,iBAAVhkC,GAAuB7qC,EAAM2wD,aAC7CntB,EAAK,IAAIqmC,EAAqB,QAAS,CAAC,SAAU,UAAWh/B,KAG3DrH,IACFymC,EAAejd,EAAQxpB,GACvB98B,EAAQsU,SAASkrB,EAAI1C,IACd,GAuBmDkwB,CAAWz2E,KAAM+iB,EAAO6qC,EAAO3E,MACzFlmC,EAAM8vD,YACNnwC,EAwDJ,SAAuBqtC,EAAQhtD,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,GAC5D,IAAK+sB,EAAO,CACV,IAAIU,EAtBR,SAAqB3zD,EAAO6qC,EAAOlxB,GAC5B3Z,EAAM2wD,aAAsC,IAAxB3wD,EAAMqxD,eAA4C,iBAAVxmB,IAC/DA,EAAQ1xB,EAAO1b,KAAKotC,EAAOlxB,IAG7B,OAAOkxB,EAiBU+oB,CAAY5zD,EAAO6qC,EAAOlxB,GAErCkxB,IAAU8oB,IACZV,GAAQ,EACRt5C,EAAW,SACXkxB,EAAQ8oB,GAIZ,IAAInjE,EAAMwP,EAAM2wD,WAAa,EAAI9lB,EAAMjpD,OACvCoe,EAAMpe,QAAU4O,EAChB,IAAImvB,EAAM3f,EAAMpe,OAASoe,EAAM8lC,cAE1BnmB,IAAK3f,EAAMkxD,WAAY,GAE5B,GAAIlxD,EAAMuxD,SAAWvxD,EAAMwxD,OAAQ,CACjC,IAAIv7D,EAAO+J,EAAMsyD,oBACjBtyD,EAAMsyD,oBAAsB,CAC1BznB,MAAOA,EACPlxB,SAAUA,EACVs5C,MAAOA,EACPvhE,SAAUw0C,EACVvxC,KAAM,MAGJsB,EACFA,EAAKtB,KAAOqL,EAAMsyD,oBAElBtyD,EAAMmyD,gBAAkBnyD,EAAMsyD,oBAGhCtyD,EAAMwyD,sBAAwB,OAE9BK,EAAQ7F,EAAQhtD,GAAO,EAAOxP,EAAKq6C,EAAOlxB,EAAUusB,GAGtD,OAAOvmB,EA9FCk0C,CAAc52E,KAAM+iB,EAAOizD,EAAOpoB,EAAOlxB,EAAUusB,IAEpDvmB,GAGT2lB,EAASrmD,UAAU60E,KAAO,WACxB72E,KAAK0oD,eAAe6rB,UAGtBlsB,EAASrmD,UAAU80E,OAAS,WAC1B,IAAI/zD,EAAQ/iB,KAAK0oD,eAEb3lC,EAAMwxD,SACRxxD,EAAMwxD,SACDxxD,EAAMuxD,SAAYvxD,EAAMwxD,QAAWxxD,EAAM0xD,mBAAoB1xD,EAAMmyD,iBAAiBC,EAAYn1E,KAAM+iB,KAI/GslC,EAASrmD,UAAU+0E,mBAAqB,SAA4Br6C,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASpX,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOrb,SAASyyB,EAAW,IAAIpX,gBAAkB,GAAI,MAAM,IAAIwsE,EAAqBp1D,GAExL,OADA18B,KAAK0oD,eAAe2rB,gBAAkB33C,EAC/B18B,MAGTc,OAAOC,eAAesnD,EAASrmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,gBAAkB1oD,KAAK0oD,eAAeoC,eAYtDhqD,OAAOC,eAAesnD,EAASrmD,UAAW,wBAAyB,CAIjEhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,eAAeG,iBA4L/BR,EAASrmD,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACrDA,EAAG,IAAI6jC,EAA2B,cAGpCzkC,EAASrmD,UAAU0zE,QAAU,KAE7BrtB,EAASrmD,UAAU2R,IAAM,SAAUi6C,EAAOlxB,EAAUusB,GAClD,IAAIlmC,EAAQ/iB,KAAK0oD,eAoBjB,MAlBqB,mBAAVkF,GACT3E,EAAK2E,EACLA,EAAQ,KACRlxB,EAAW,MACkB,mBAAbA,IAChBusB,EAAKvsB,EACLA,EAAW,MAGTkxB,SAAuC5tD,KAAKyjB,MAAMmqC,EAAOlxB,GAEzD3Z,EAAMwxD,SACRxxD,EAAMwxD,OAAS,EACfv0E,KAAK82E,UAIF/zD,EAAMmxD,QAsEb,SAAqBnE,EAAQhtD,EAAOkmC,GAClClmC,EAAMmxD,QAAS,EACfY,EAAY/E,EAAQhtD,GAEhBkmC,IACElmC,EAAMstD,SAAU5mD,EAAQsU,SAASkrB,GAAS8mB,EAAOtxC,KAAK,SAAUwqB,IAGtElmC,EAAM4lC,OAAQ,EACdonB,EAAOvtE,UAAW,EA/ECw0E,CAAYh3E,KAAM+iB,EAAOkmC,GACrCjpD,MAGTc,OAAOC,eAAesnD,EAASrmD,UAAW,iBAAkB,CAI1DhB,YAAY,EACZC,IAAK,WACH,OAAOjB,KAAK0oD,eAAe/jD,UAuF/B7D,OAAOC,eAAesnD,EAASrmD,UAAW,YAAa,CAIrDhB,YAAY,EACZC,IAAK,WACH,YAA4BkQ,IAAxBnR,KAAK0oD,gBAIF1oD,KAAK0oD,eAAeK,WAE7B1jD,IAAK,SAAahE,GAGXrB,KAAK0oD,iBAMV1oD,KAAK0oD,eAAeK,UAAY1nD,MAGpCgnD,EAASrmD,UAAU2zE,QAAUpC,EAAYoC,QACzCttB,EAASrmD,UAAUi1E,WAAa1D,EAAY2D,UAE5C7uB,EAASrmD,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC3CA,EAAGnG,M,mDCxnBLjjD,EAAOD,QAAU6hD,EAEjB,IAAIkrC,EAAiB,EAAQ,IAAa9iC,MACtCijC,EAA6BH,EAAeG,2BAC5C2E,EAAwB9E,EAAe8E,sBACvCM,EAAqCpF,EAAeoF,mCACpDC,EAA8BrF,EAAeqF,4BAE7C9pC,EAAS,EAAQ,IAIrB,SAAS+pC,EAAe1rC,EAAI9wB,GAC1B,IAAIy8D,EAAKlyF,KAAKmyF,gBACdD,EAAGE,cAAe,EAClB,IAAInpC,EAAKipC,EAAGvd,QAEZ,GAAW,OAAP1rB,EACF,OAAOjpD,KAAK6+B,KAAK,QAAS,IAAI4yD,GAGhCS,EAAGG,WAAa,KAChBH,EAAGvd,QAAU,KACD,MAARl/C,GACFz1B,KAAKge,KAAKyX,GACZwzB,EAAG1C,GACH,IAAI+rC,EAAKtyF,KAAK8oD,eACdwpC,EAAGhF,SAAU,GAETgF,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBACpC7oD,KAAKiuF,MAAMqE,EAAGzpC,eAIlB,SAASpH,EAAUh8B,GACjB,KAAMzlB,gBAAgByhD,GAAY,OAAO,IAAIA,EAAUh8B,GACvDyiC,EAAO3nD,KAAKP,KAAMylB,GAClBzlB,KAAKmyF,gBAAkB,CACrBF,eAAgBA,EAAerwF,KAAK5B,MACpCuyF,eAAe,EACfH,cAAc,EACdzd,QAAS,KACT0d,WAAY,KACZG,cAAe,MAGjBxyF,KAAK8oD,eAAeykC,cAAe,EAInCvtF,KAAK8oD,eAAe0rB,MAAO,EAEvB/uD,IAC+B,mBAAtBA,EAAQ5M,YAA0B7Y,KAAK6iD,WAAap9B,EAAQ5M,WAC1C,mBAAlB4M,EAAQ9B,QAAsB3jB,KAAK+iD,OAASt9B,EAAQ9B,QAIjE3jB,KAAKu+B,GAAG,YAAa43C,GAGvB,SAASA,IACP,IAAIzD,EAAQ1yE,KAEe,mBAAhBA,KAAK+iD,QAA0B/iD,KAAK8oD,eAAeC,UAK5D/F,EAAKhjD,KAAM,KAAM,MAJjBA,KAAK+iD,QAAO,SAAUwD,EAAI9wB,GACxButB,EAAK0vB,EAAOnsB,EAAI9wB,MA6DtB,SAASutB,EAAK+sB,EAAQxpB,EAAI9wB,GACxB,GAAI8wB,EAAI,OAAOwpB,EAAOlxC,KAAK,QAAS0nB,GAMpC,GALY,MAAR9wB,GACFs6C,EAAO/xD,KAAKyX,GAIVs6C,EAAOrnB,eAAe/jD,OAAQ,MAAM,IAAIqtF,EAC5C,GAAIjiB,EAAOoiB,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAOhiB,EAAO/xD,KAAK,MA9HrB,EAAQ,EAAR,CAAoByjC,EAAWyG,GA+D/BzG,EAAUz/C,UAAUgc,KAAO,SAAU4vC,EAAOlxB,GAE1C,OADA18B,KAAKmyF,gBAAgBI,eAAgB,EAC9BrqC,EAAOlmD,UAAUgc,KAAKzd,KAAKP,KAAM4tD,EAAOlxB,IAajD+kB,EAAUz/C,UAAU6gD,WAAa,SAAU+K,EAAOlxB,EAAUusB,GAC1DA,EAAG,IAAI6jC,EAA2B,kBAGpCrrC,EAAUz/C,UAAUwzE,OAAS,SAAU5nB,EAAOlxB,EAAUusB,GACtD,IAAIipC,EAAKlyF,KAAKmyF,gBAKd,GAJAD,EAAGvd,QAAU1rB,EACbipC,EAAGG,WAAazkC,EAChBskC,EAAGM,cAAgB91D,GAEdw1D,EAAGE,aAAc,CACpB,IAAIE,EAAKtyF,KAAK8oD,gBACVopC,EAAGK,eAAiBD,EAAG/E,cAAgB+E,EAAG3tF,OAAS2tF,EAAGzpC,gBAAe7oD,KAAKiuF,MAAMqE,EAAGzpC,iBAO3FpH,EAAUz/C,UAAUisF,MAAQ,SAAUpsF,GACpC,IAAIqwF,EAAKlyF,KAAKmyF,gBAEQ,OAAlBD,EAAGG,YAAwBH,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBpyF,KAAK6iD,WAAWqvC,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,kBAQxDxwC,EAAUz/C,UAAUgnD,SAAW,SAAUlG,EAAKmG,GAC5Cf,EAAOlmD,UAAUgnD,SAASzoD,KAAKP,KAAM8iD,GAAK,SAAU2vC,GAClDxpC,EAAGwpC,Q,6BCxLP,IAAIz1C,EAAQp9C,EAkCZ,SAASu9C,EAAMjc,GACb,OAAoB,IAAhBA,EAAKv8B,OACA,IAAMu8B,EAENA,EAIX,SAASuY,EAAMla,GAEb,IADA,IAAI3xB,EAAM,GACDxN,EAAI,EAAGA,EAAIm/B,EAAI56B,OAAQvE,IAC9BwN,GAAOuvC,EAAM5d,EAAIn/B,GAAG+D,SAAS,KAC/B,OAAOyJ,EAdTovC,EAAMn/B,QA9BN,SAAiB0hB,EAAKkf,GACpB,GAAI17C,MAAMC,QAAQu8B,GAChB,OAAOA,EAAIlrB,QACb,IAAKkrB,EACH,MAAO,GACT,IAAI3xB,EAAM,GACV,GAAmB,iBAAR2xB,EAAkB,CAC3B,IAAK,IAAIn/B,EAAI,EAAGA,EAAIm/B,EAAI56B,OAAQvE,IAC9BwN,EAAIxN,GAAc,EAATm/B,EAAIn/B,GACf,OAAOwN,EAET,GAAY,QAAR6wC,EAAe,EACjBlf,EAAMA,EAAI1Y,QAAQ,eAAgB,KAC1BliB,OAAS,GAAM,IACrB46B,EAAM,IAAMA,GACd,IAASn/B,EAAI,EAAGA,EAAIm/B,EAAI56B,OAAQvE,GAAK,EACnCwN,EAAIoQ,KAAK1T,SAASi1B,EAAIn/B,GAAKm/B,EAAIn/B,EAAI,GAAI,UAEzC,IAASA,EAAI,EAAGA,EAAIm/B,EAAI56B,OAAQvE,IAAK,CACnC,IAAIK,EAAI8+B,EAAI/2B,WAAWpI,GACnBojC,EAAK/iC,GAAK,EACVuhC,EAAS,IAAJvhC,EACL+iC,EACF51B,EAAIoQ,KAAKwlB,EAAIxB,GAEbp0B,EAAIoQ,KAAKgkB,GAGf,OAAOp0B,GAUTovC,EAAMG,MAAQA,EAQdH,EAAMvD,MAAQA,EAEduD,EAAMI,OAAS,SAAgBt4C,EAAK25C,GAClC,MAAY,QAARA,EACKhF,EAAM30C,GAENA,I,6BCtDX,IAAIsxD,EAAQx2D,EAEZw2D,EAAM9+B,KAAO,EAAQ,IACrB8+B,EAAM+kB,MAAQ,EAAQ,KACtB/kB,EAAM3hB,KAAO,EAAQ,KACrB2hB,EAAMglB,QAAU,EAAQ,M,6BCLxB,IACIv8B,EADQ,EAAQ,IACDA,OAYnB,SAASo/C,EAAKttF,EAAGoB,EAAGuiC,GAClB,OAAQ3jC,EAAIoB,GAAQpB,EAAK2jC,EAI3B,SAAS4pD,EAAMvtF,EAAGoB,EAAGuiC,GACnB,OAAQ3jC,EAAIoB,EAAMpB,EAAI2jC,EAAMviC,EAAIuiC,EAIlC,SAAS6pD,EAAIxtF,EAAGoB,EAAGuiC,GACjB,OAAO3jC,EAAIoB,EAAIuiC,EAbjB10C,EAAQw+F,KARR,SAAcj8F,EAAGwO,EAAGoB,EAAGuiC,GACrB,OAAU,IAANnyC,EACK87F,EAAKttF,EAAGoB,EAAGuiC,GACV,IAANnyC,GAAiB,IAANA,EACNg8F,EAAIxtF,EAAGoB,EAAGuiC,GACT,IAANnyC,EACK+7F,EAAMvtF,EAAGoB,EAAGuiC,QADrB,GAQF10C,EAAQq+F,KAAOA,EAKfr+F,EAAQs+F,MAAQA,EAKhBt+F,EAAQu+F,IAAMA,EAKdv+F,EAAQy+F,OAHR,SAAgB1tF,GACd,OAAOkuC,EAAOluC,EAAG,GAAKkuC,EAAOluC,EAAG,IAAMkuC,EAAOluC,EAAG,KAOlD/Q,EAAQ0+F,OAHR,SAAgB3tF,GACd,OAAOkuC,EAAOluC,EAAG,GAAKkuC,EAAOluC,EAAG,IAAMkuC,EAAOluC,EAAG,KAOlD/Q,EAAQ2+F,OAHR,SAAgB5tF,GACd,OAAOkuC,EAAOluC,EAAG,GAAKkuC,EAAOluC,EAAG,IAAOA,IAAM,GAO/C/Q,EAAQ4+F,OAHR,SAAgB7tF,GACd,OAAOkuC,EAAOluC,EAAG,IAAMkuC,EAAOluC,EAAG,IAAOA,IAAM,K,6BC5ChD,IAAIqsC,EAAQ,EAAQ,IAChBy+B,EAAS,EAAQ,IACjBgjB,EAAY,EAAQ,KACpBn/D,EAAS,EAAQ,GAEjByf,EAAQ/B,EAAM+B,MACdE,EAAUjC,EAAMiC,QAChBC,EAAUlC,EAAMkC,QAChB++C,EAAOQ,EAAUR,KACjBC,EAAQO,EAAUP,MAClBG,EAASI,EAAUJ,OACnBC,EAASG,EAAUH,OACnBC,EAASE,EAAUF,OACnBC,EAASC,EAAUD,OAEnBjvC,EAAYksB,EAAOlsB,UAEnBmvC,EAAW,CACb,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGtC,SAASC,IACP,KAAM3+F,gBAAgB2+F,GACpB,OAAO,IAAIA,EAEbpvC,EAAUhvD,KAAKP,MACfA,KAAK0tC,EAAI,CACP,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YAEtC1tC,KAAK0T,EAAIgrF,EACT1+F,KAAK2yF,EAAI,IAAI5vF,MAAM,IAErBi6C,EAAMxd,SAASm/D,EAAQpvC,GACvB1vD,EAAOD,QAAU++F,EAEjBA,EAAO3zC,UAAY,IACnB2zC,EAAOjvC,QAAU,IACjBivC,EAAOhvC,aAAe,IACtBgvC,EAAO/uC,UAAY,GAEnB+uC,EAAO38F,UAAUugD,QAAU,SAAiBhjB,EAAK/rB,GAG/C,IAFA,IAAIm/E,EAAI3yF,KAAK2yF,EAEJvyF,EAAI,EAAGA,EAAI,GAAIA,IACtBuyF,EAAEvyF,GAAKm/B,EAAI/rB,EAAQpT,GACrB,KAAOA,EAAIuyF,EAAEhuF,OAAQvE,IACnBuyF,EAAEvyF,GAAK6+C,EAAQu/C,EAAO7L,EAAEvyF,EAAI,IAAKuyF,EAAEvyF,EAAI,GAAIm+F,EAAO5L,EAAEvyF,EAAI,KAAMuyF,EAAEvyF,EAAI,KAEtE,IAAI0C,EAAI9C,KAAK0tC,EAAE,GACXhpC,EAAI1E,KAAK0tC,EAAE,GACXjtC,EAAIT,KAAK0tC,EAAE,GACXhtC,EAAIV,KAAK0tC,EAAE,GACXnpC,EAAIvE,KAAK0tC,EAAE,GACXxoC,EAAIlF,KAAK0tC,EAAE,GACXiC,EAAI3vC,KAAK0tC,EAAE,GACXA,EAAI1tC,KAAK0tC,EAAE,GAGf,IADApO,EAAOt/B,KAAK0T,EAAE/O,SAAWguF,EAAEhuF,QACtBvE,EAAI,EAAGA,EAAIuyF,EAAEhuF,OAAQvE,IAAK,CAC7B,IAAIizF,EAAKn0C,EAAQxR,EAAG4wD,EAAO/5F,GAAI05F,EAAK15F,EAAGW,EAAGyqC,GAAI3vC,KAAK0T,EAAEtT,GAAIuyF,EAAEvyF,IACvDkzF,EAAKv0C,EAAMs/C,EAAOv7F,GAAIo7F,EAAMp7F,EAAG4B,EAAGjE,IACtCitC,EAAIiC,EACJA,EAAIzqC,EACJA,EAAIX,EACJA,EAAIw6C,EAAMr+C,EAAG2yF,GACb3yF,EAAID,EACJA,EAAIiE,EACJA,EAAI5B,EACJA,EAAIi8C,EAAMs0C,EAAIC,GAGhBtzF,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAI5qC,GAC7B9C,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIhpC,GAC7B1E,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIjtC,GAC7BT,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIhtC,GAC7BV,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAInpC,GAC7BvE,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIxoC,GAC7BlF,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIiC,GAC7B3vC,KAAK0tC,EAAE,GAAKqR,EAAM/+C,KAAK0tC,EAAE,GAAIA,IAG/BixD,EAAO38F,UAAUguD,QAAU,SAAgBvR,GACzC,MAAY,QAARA,EACKzB,EAAM0B,QAAQ1+C,KAAK0tC,EAAG,OAEtBsP,EAAM4B,QAAQ5+C,KAAK0tC,EAAG,S,6BCrGjC,IAAIsP,EAAQ,EAAQ,IAChBy+B,EAAS,EAAQ,IACjBn8C,EAAS,EAAQ,GAEjB8gB,EAAYpD,EAAMoD,UAClBC,EAAYrD,EAAMqD,UAClBC,EAAWtD,EAAMsD,SACjBC,EAAWvD,EAAMuD,SACjBpB,EAAQnC,EAAMmC,MACdI,EAAWvC,EAAMuC,SACjBE,EAAWzC,EAAMyC,SACjBC,EAAa1C,EAAM0C,WACnBK,EAAa/C,EAAM+C,WACnBC,EAAahD,EAAMgD,WACnBG,EAAanD,EAAMmD,WAEnBoP,EAAYksB,EAAOlsB,UAEnBqvC,EAAW,CACb,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGtC,SAASC,IACP,KAAM7+F,gBAAgB6+F,GACpB,OAAO,IAAIA,EAEbtvC,EAAUhvD,KAAKP,MACfA,KAAK0tC,EAAI,CACP,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACd1tC,KAAK0T,EAAIkrF,EACT5+F,KAAK2yF,EAAI,IAAI5vF,MAAM,KAyIrB,SAAS+7F,EAAQzJ,EAAI3B,EAAIqL,EAAIC,EAAIC,GAC/B,IAAI/9F,EAAKm0F,EAAK0J,GAAS1J,EAAM4J,EAG7B,OAFI/9F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASg+F,EAAQ7J,EAAI3B,EAAIqL,EAAIC,EAAIC,EAAIluB,GACnC,IAAI7vE,EAAKwyF,EAAKsL,GAAStL,EAAM3iB,EAG7B,OAFI7vE,EAAI,IACNA,GAAK,YACAA,EAGT,SAASi+F,EAAS9J,EAAI3B,EAAIqL,EAAIC,EAAIC,GAChC,IAAI/9F,EAAKm0F,EAAK0J,EAAO1J,EAAK4J,EAAOF,EAAKE,EAGtC,OAFI/9F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASk+F,EAAS/J,EAAI3B,EAAIqL,EAAIC,EAAIC,EAAIluB,GACpC,IAAI7vE,EAAKwyF,EAAKsL,EAAOtL,EAAK3iB,EAAOiuB,EAAKjuB,EAGtC,OAFI7vE,EAAI,IACNA,GAAK,YACAA,EAGT,SAASm+F,EAAUhK,EAAI3B,GACrB,IAIIxyF,EAJQk/C,EAAUi1C,EAAI3B,EAAI,IAClBtzC,EAAUszC,EAAI2B,EAAI,GAClBj1C,EAAUszC,EAAI2B,EAAI,GAK9B,OAFIn0F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASo+F,EAAUjK,EAAI3B,GACrB,IAIIxyF,EAJQm/C,EAAUg1C,EAAI3B,EAAI,IAClBrzC,EAAUqzC,EAAI2B,EAAI,GAClBh1C,EAAUqzC,EAAI2B,EAAI,GAK9B,OAFIn0F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASq+F,EAAUlK,EAAI3B,GACrB,IAIIxyF,EAJQk/C,EAAUi1C,EAAI3B,EAAI,IAClBtzC,EAAUi1C,EAAI3B,EAAI,IAClBtzC,EAAUszC,EAAI2B,EAAI,GAK9B,OAFIn0F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASs+F,EAAUnK,EAAI3B,GACrB,IAIIxyF,EAJQm/C,EAAUg1C,EAAI3B,EAAI,IAClBrzC,EAAUg1C,EAAI3B,EAAI,IAClBrzC,EAAUqzC,EAAI2B,EAAI,GAK9B,OAFIn0F,EAAI,IACNA,GAAK,YACAA,EAGT,SAASu+F,EAAUpK,EAAI3B,GACrB,IAIIxyF,EAJQk/C,EAAUi1C,EAAI3B,EAAI,GAClBtzC,EAAUi1C,EAAI3B,EAAI,GAClBpzC,EAAS+0C,EAAI3B,EAAI,GAK7B,OAFIxyF,EAAI,IACNA,GAAK,YACAA,EAGT,SAASw+F,EAAUrK,EAAI3B,GACrB,IAIIxyF,EAJQm/C,EAAUg1C,EAAI3B,EAAI,GAClBrzC,EAAUg1C,EAAI3B,EAAI,GAClBnzC,EAAS80C,EAAI3B,EAAI,GAK7B,OAFIxyF,EAAI,IACNA,GAAK,YACAA,EAGT,SAASy+F,EAAUtK,EAAI3B,GACrB,IAIIxyF,EAJQk/C,EAAUi1C,EAAI3B,EAAI,IAClBtzC,EAAUszC,EAAI2B,EAAI,IAClB/0C,EAAS+0C,EAAI3B,EAAI,GAK7B,OAFIxyF,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS0+F,EAAUvK,EAAI3B,GACrB,IAIIxyF,EAJQm/C,EAAUg1C,EAAI3B,EAAI,IAClBrzC,EAAUqzC,EAAI2B,EAAI,IAClB90C,EAAS80C,EAAI3B,EAAI,GAK7B,OAFIxyF,EAAI,IACNA,GAAK,YACAA,EAxPT87C,EAAMxd,SAASq/D,EAAQtvC,GACvB1vD,EAAOD,QAAUi/F,EAEjBA,EAAO7zC,UAAY,KACnB6zC,EAAOnvC,QAAU,IACjBmvC,EAAOlvC,aAAe,IACtBkvC,EAAOjvC,UAAY,IAEnBivC,EAAO78F,UAAU69F,cAAgB,SAAuBtgE,EAAK/rB,GAI3D,IAHA,IAAIm/E,EAAI3yF,KAAK2yF,EAGJvyF,EAAI,EAAGA,EAAI,GAAIA,IACtBuyF,EAAEvyF,GAAKm/B,EAAI/rB,EAAQpT,GACrB,KAAOA,EAAIuyF,EAAEhuF,OAAQvE,GAAK,EAAG,CAC3B,IAAI0/F,EAAQH,EAAUhN,EAAEvyF,EAAI,GAAIuyF,EAAEvyF,EAAI,IAClC2/F,EAAQH,EAAUjN,EAAEvyF,EAAI,GAAIuyF,EAAEvyF,EAAI,IAClC4/F,EAAQrN,EAAEvyF,EAAI,IACd6/F,EAAQtN,EAAEvyF,EAAI,IACd8/F,EAAQT,EAAU9M,EAAEvyF,EAAI,IAAKuyF,EAAEvyF,EAAI,KACnC+/F,EAAQT,EAAU/M,EAAEvyF,EAAI,IAAKuyF,EAAEvyF,EAAI,KACnCggG,EAAQzN,EAAEvyF,EAAI,IACdigG,EAAQ1N,EAAEvyF,EAAI,IAElBuyF,EAAEvyF,GAAKs/C,EACLogD,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACT1N,EAAEvyF,EAAI,GAAK2/C,EACT+/C,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,KAIbxB,EAAO78F,UAAUugD,QAAU,SAAiBhjB,EAAK/rB,GAC/CxT,KAAK6/F,cAActgE,EAAK/rB,GAExB,IAAIm/E,EAAI3yF,KAAK2yF,EAETvzC,EAAKp/C,KAAK0tC,EAAE,GACZ2R,EAAKr/C,KAAK0tC,EAAE,GACZ4R,EAAKt/C,KAAK0tC,EAAE,GACZ8R,EAAKx/C,KAAK0tC,EAAE,GACZiS,EAAK3/C,KAAK0tC,EAAE,GACZkS,EAAK5/C,KAAK0tC,EAAE,GACZmS,EAAK7/C,KAAK0tC,EAAE,GACZoS,EAAK9/C,KAAK0tC,EAAE,GACZuS,EAAKjgD,KAAK0tC,EAAE,GACZwS,EAAKlgD,KAAK0tC,EAAE,GACZsnD,EAAKh1F,KAAK0tC,EAAE,IACZynD,EAAKn1F,KAAK0tC,EAAE,IACZunD,EAAKj1F,KAAK0tC,EAAE,IACZ0nD,EAAKp1F,KAAK0tC,EAAE,IACZwnD,EAAKl1F,KAAK0tC,EAAE,IACZyjC,EAAKnxE,KAAK0tC,EAAE,IAEhBpO,EAAOt/B,KAAK0T,EAAE/O,SAAWguF,EAAEhuF,QAC3B,IAAK,IAAIvE,EAAI,EAAGA,EAAIuyF,EAAEhuF,OAAQvE,GAAK,EAAG,CACpC,IAAI0/F,EAAQ5K,EACR6K,EAAQ5uB,EACR6uB,EAAQT,EAAUt/C,EAAIC,GACtB+/C,EAAQT,EAAUv/C,EAAIC,GACtBggD,EAAQpB,EAAQ7+C,EAAIC,EAAI80C,EAAIG,EAAIF,GAChCkL,EAAQjB,EAAQj/C,EAAIC,EAAI80C,EAAIG,EAAIF,EAAIG,GACpCgL,EAAQpgG,KAAK0T,EAAEtT,GACfigG,EAAQrgG,KAAK0T,EAAEtT,EAAI,GACnBkgG,EAAQ3N,EAAEvyF,GACVmgG,EAAQ5N,EAAEvyF,EAAI,GAEdogG,EAAQxgD,EACV8/C,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACLE,EAAQtgD,EACV2/C,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GAETT,EAAQT,EAAUjgD,EAAIC,GACtB0gD,EAAQT,EAAUlgD,EAAIC,GACtB2gD,EAAQb,EAAS//C,EAAIC,EAAIC,EAAIE,EAAIG,GACjCsgD,EAAQb,EAAShgD,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,GAErC,IAAI8gD,EAAQnhD,EAASugD,EAAOC,EAAOC,EAAOC,GACtCU,EAAQlhD,EAASqgD,EAAOC,EAAOC,EAAOC,GAE1C/K,EAAKD,EACL9jB,EAAKikB,EAELH,EAAKD,EACLI,EAAKD,EAELH,EAAK/0C,EACLk1C,EAAKj1C,EAELD,EAAKV,EAASM,EAAIC,EAAI0gD,EAAOC,GAC7BvgD,EAAKT,EAASK,EAAIA,EAAI0gD,EAAOC,GAE7B5gD,EAAKF,EACLG,EAAKF,EAELD,EAAKL,EACLM,EAAKJ,EAELF,EAAKF,EACLI,EAAKH,EAELD,EAAKG,EAASihD,EAAOC,EAAOC,EAAOC,GACnCthD,EAAKI,EAAS+gD,EAAOC,EAAOC,EAAOC,GAGrCxhD,EAAMn/C,KAAK0tC,EAAG,EAAG0R,EAAIC,GACrBF,EAAMn/C,KAAK0tC,EAAG,EAAG4R,EAAIE,GACrBL,EAAMn/C,KAAK0tC,EAAG,EAAGiS,EAAIC,GACrBT,EAAMn/C,KAAK0tC,EAAG,EAAGmS,EAAIC,GACrBX,EAAMn/C,KAAK0tC,EAAG,EAAGuS,EAAIC,GACrBf,EAAMn/C,KAAK0tC,EAAG,GAAIsnD,EAAIG,GACtBh2C,EAAMn/C,KAAK0tC,EAAG,GAAIunD,EAAIG,GACtBj2C,EAAMn/C,KAAK0tC,EAAG,GAAIwnD,EAAI/jB,IAGxB0tB,EAAO78F,UAAUguD,QAAU,SAAgBvR,GACzC,MAAY,QAARA,EACKzB,EAAM0B,QAAQ1+C,KAAK0tC,EAAG,OAEtBsP,EAAM4B,QAAQ5+C,KAAK0tC,EAAG,S,iBCpNjC,2BACE,aAGA,SAASpO,EAAQtzB,EAAKuzB,GACpB,IAAKvzB,EAAK,MAAM,IAAI9E,MAAMq4B,GAAO,oBAKnC,SAASC,EAAUp9B,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIK,EAAW,aACfA,EAASV,UAAYK,EAAUL,UAC/BI,EAAKJ,UAAY,IAAIU,EACrBN,EAAKJ,UAAUO,YAAcH,EAK/B,SAASq9B,EAAIvL,EAAQoD,EAAMoI,GACzB,GAAID,EAAGE,KAAKzL,GACV,OAAOA,EAGTl0B,KAAK4/B,SAAW,EAChB5/B,KAAK6/B,MAAQ,KACb7/B,KAAK2E,OAAS,EAGd3E,KAAK8/B,IAAM,KAEI,OAAX5L,IACW,OAAToD,GAA0B,OAATA,IACnBoI,EAASpI,EACTA,EAAO,IAGTt3B,KAAK+/B,MAAM7L,GAAU,EAAGoD,GAAQ,GAAIoI,GAAU,OAYlD,IAAIxD,EATkB,iBAAXr8B,EACTA,EAAOD,QAAU6/B,EAEjB7/B,EAAQ6/B,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGO,SAAW,GAGd,IAEI9D,EADoB,oBAAX+D,aAAmD,IAAlBA,OAAO/D,OACxC+D,OAAO/D,OAEP,EAAQ,KAAUA,OAE7B,MAAO33B,IAgIT,SAAS27B,EAAeha,EAAQrP,GAC9B,IAAIpW,EAAIylB,EAAO1d,WAAWqO,GAE1B,OAAIpW,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,GAClBA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,QAEX6+B,GAAO,EAAO,wBAA0BpZ,GAI5C,SAASia,EAAcja,EAAQka,EAAYvpB,GACzC,IAAI3V,EAAIg/B,EAAcha,EAAQrP,GAI9B,OAHIA,EAAQ,GAAKupB,IACfl/B,GAAKg/B,EAAcha,EAAQrP,EAAQ,IAAM,GAEpC3V,EA8CT,SAASm/B,EAAW/3B,EAAKkL,EAAOG,EAAK2sB,GAInC,IAHA,IAAIp/B,EAAI,EACJwD,EAAI,EACJ6O,EAAMxM,KAAKsD,IAAI/B,EAAI3D,OAAQgP,GACtBvT,EAAIoT,EAAOpT,EAAImT,EAAKnT,IAAK,CAChC,IAAIK,EAAI6H,EAAIE,WAAWpI,GAAK,GAE5Bc,GAAKo/B,EAIH57B,EADEjE,GAAK,GACHA,EAAI,GAAK,GAGJA,GAAK,GACVA,EAAI,GAAK,GAITA,EAEN6+B,EAAO7+B,GAAK,GAAKiE,EAAI47B,EAAK,qBAC1Bp/B,GAAKwD,EAEP,OAAOxD,EA4DT,SAAS0/F,EAAMt/D,EAAMxkB,GACnBwkB,EAAKzB,MAAQ/iB,EAAI+iB,MACjByB,EAAK38B,OAASmY,EAAInY,OAClB28B,EAAK1B,SAAW9iB,EAAI8iB,SACpB0B,EAAKxB,IAAMhjB,EAAIgjB,IAsCjB,GA9TAL,EAAGE,KAAO,SAAeY,GACvB,OAAIA,aAAed,GAIJ,OAARc,GAA+B,iBAARA,GAC5BA,EAAIh+B,YAAYy9B,WAAaP,EAAGO,UAAYj9B,MAAMC,QAAQu9B,EAAIV,QAGlEJ,EAAG5xB,IAAM,SAAcyR,EAAMG,GAC3B,OAAIH,EAAKkhB,IAAI/gB,GAAS,EAAUH,EACzBG,GAGTggB,EAAGp1B,IAAM,SAAciV,EAAMG,GAC3B,OAAIH,EAAKkhB,IAAI/gB,GAAS,EAAUH,EACzBG,GAGTggB,EAAGz9B,UAAU+9B,MAAQ,SAAe7L,EAAQoD,EAAMoI,GAChD,GAAsB,iBAAXxL,EACT,OAAOl0B,KAAKygC,YAAYvM,EAAQoD,EAAMoI,GAGxC,GAAsB,iBAAXxL,EACT,OAAOl0B,KAAK0gC,WAAWxM,EAAQoD,EAAMoI,GAG1B,QAATpI,IACFA,EAAO,IAETgI,EAAOhI,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI9jB,EAAQ,EACM,OAFlB0gB,EAASA,EAAO/vB,WAAW0iB,QAAQ,OAAQ,KAEhC,KACTrT,IACAxT,KAAK4/B,SAAW,GAGdpsB,EAAQ0gB,EAAOvvB,SACJ,KAAT2yB,EACFt3B,KAAK2gC,UAAUzM,EAAQ1gB,EAAOksB,IAE9B1/B,KAAK4gC,WAAW1M,EAAQoD,EAAM9jB,GACf,OAAXksB,GACF1/B,KAAK0gC,WAAW1gC,KAAK6d,UAAWyZ,EAAMoI,MAM9CD,EAAGz9B,UAAUy+B,YAAc,SAAsBvM,EAAQoD,EAAMoI,GACzDxL,EAAS,IACXl0B,KAAK4/B,SAAW,EAChB1L,GAAUA,GAERA,EAAS,UACXl0B,KAAK6/B,MAAQ,CAAU,SAAT3L,GACdl0B,KAAK2E,OAAS,GACLuvB,EAAS,kBAClBl0B,KAAK6/B,MAAQ,CACF,SAAT3L,EACCA,EAAS,SAAa,UAEzBl0B,KAAK2E,OAAS,IAEd26B,EAAOpL,EAAS,kBAChBl0B,KAAK6/B,MAAQ,CACF,SAAT3L,EACCA,EAAS,SAAa,SACvB,GAEFl0B,KAAK2E,OAAS,GAGD,OAAX+6B,GAGJ1/B,KAAK0gC,WAAW1gC,KAAK6d,UAAWyZ,EAAMoI,IAGxCD,EAAGz9B,UAAU0+B,WAAa,SAAqBxM,EAAQoD,EAAMoI,GAG3D,GADAJ,EAAgC,iBAAlBpL,EAAOvvB,QACjBuvB,EAAOvvB,QAAU,EAGnB,OAFA3E,KAAK6/B,MAAQ,CAAC,GACd7/B,KAAK2E,OAAS,EACP3E,KAGTA,KAAK2E,OAASoC,KAAKiH,KAAKkmB,EAAOvvB,OAAS,GACxC3E,KAAK6/B,MAAQ,IAAI98B,MAAM/C,KAAK2E,QAC5B,IAAK,IAAIvE,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAC/BJ,KAAK6/B,MAAMz/B,GAAK,EAGlB,IAAI6X,EAAG4oB,EACHnC,EAAM,EACV,GAAe,OAAXgB,EACF,IAAKt/B,EAAI8zB,EAAOvvB,OAAS,EAAGsT,EAAI,EAAG7X,GAAK,EAAGA,GAAK,EAC9CygC,EAAI3M,EAAO9zB,GAAM8zB,EAAO9zB,EAAI,IAAM,EAAM8zB,EAAO9zB,EAAI,IAAM,GACzDJ,KAAK6/B,MAAM5nB,IAAO4oB,GAAKnC,EAAO,SAC9B1+B,KAAK6/B,MAAM5nB,EAAI,GAAM4oB,IAAO,GAAKnC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPzmB,UAGC,GAAe,OAAXynB,EACT,IAAKt/B,EAAI,EAAG6X,EAAI,EAAG7X,EAAI8zB,EAAOvvB,OAAQvE,GAAK,EACzCygC,EAAI3M,EAAO9zB,GAAM8zB,EAAO9zB,EAAI,IAAM,EAAM8zB,EAAO9zB,EAAI,IAAM,GACzDJ,KAAK6/B,MAAM5nB,IAAO4oB,GAAKnC,EAAO,SAC9B1+B,KAAK6/B,MAAM5nB,EAAI,GAAM4oB,IAAO,GAAKnC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPzmB,KAIN,OAAOjY,KAAK+zC,UA2BdtU,EAAGz9B,UAAU2+B,UAAY,SAAoBzM,EAAQ1gB,EAAOksB,GAE1D1/B,KAAK2E,OAASoC,KAAKiH,MAAMkmB,EAAOvvB,OAAS6O,GAAS,GAClDxT,KAAK6/B,MAAQ,IAAI98B,MAAM/C,KAAK2E,QAC5B,IAAK,IAAIvE,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAC/BJ,KAAK6/B,MAAMz/B,GAAK,EAIlB,IAGIygC,EAHAnC,EAAM,EACNzmB,EAAI,EAGR,GAAe,OAAXynB,EACF,IAAKt/B,EAAI8zB,EAAOvvB,OAAS,EAAGvE,GAAKoT,EAAOpT,GAAK,EAC3CygC,EAAIV,EAAajM,EAAQ1gB,EAAOpT,IAAMs+B,EACtC1+B,KAAK6/B,MAAM5nB,IAAU,SAAJ4oB,EACbnC,GAAO,IACTA,GAAO,GACPzmB,GAAK,EACLjY,KAAK6/B,MAAM5nB,IAAM4oB,IAAM,IAEvBnC,GAAO,OAKX,IAAKt+B,GADa8zB,EAAOvvB,OAAS6O,GACX,GAAM,EAAIA,EAAQ,EAAIA,EAAOpT,EAAI8zB,EAAOvvB,OAAQvE,GAAK,EAC1EygC,EAAIV,EAAajM,EAAQ1gB,EAAOpT,IAAMs+B,EACtC1+B,KAAK6/B,MAAM5nB,IAAU,SAAJ4oB,EACbnC,GAAO,IACTA,GAAO,GACPzmB,GAAK,EACLjY,KAAK6/B,MAAM5nB,IAAM4oB,IAAM,IAEvBnC,GAAO,EAKb1+B,KAAK+zC,UA8BPtU,EAAGz9B,UAAU4+B,WAAa,SAAqB1M,EAAQoD,EAAM9jB,GAE3DxT,KAAK6/B,MAAQ,CAAC,GACd7/B,KAAK2E,OAAS,EAGd,IAAK,IAAIo8B,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAW1J,EAClEyJ,IAEFA,IACAC,EAAWA,EAAU1J,EAAQ,EAO7B,IALA,IAAI2J,EAAQ/M,EAAOvvB,OAAS6O,EACxB2H,EAAM8lB,EAAQF,EACdptB,EAAM5M,KAAKsD,IAAI42B,EAAOA,EAAQ9lB,GAAO3H,EAErC0tB,EAAO,EACF9gC,EAAIoT,EAAOpT,EAAIuT,EAAKvT,GAAK2gC,EAChCG,EAAOb,EAAUnM,EAAQ9zB,EAAGA,EAAI2gC,EAASzJ,GAEzCt3B,KAAKmhC,MAAMH,GACPhhC,KAAK6/B,MAAM,GAAKqB,EAAO,SACzBlhC,KAAK6/B,MAAM,IAAMqB,EAEjBlhC,KAAKohC,OAAOF,GAIhB,GAAY,IAAR/lB,EAAW,CACb,IAAIhR,EAAM,EAGV,IAFA+2B,EAAOb,EAAUnM,EAAQ9zB,EAAG8zB,EAAOvvB,OAAQ2yB,GAEtCl3B,EAAI,EAAGA,EAAI+a,EAAK/a,IACnB+J,GAAOmtB,EAGTt3B,KAAKmhC,MAAMh3B,GACPnK,KAAK6/B,MAAM,GAAKqB,EAAO,SACzBlhC,KAAK6/B,MAAM,IAAMqB,EAEjBlhC,KAAKohC,OAAOF,GAIhBlhC,KAAK+zC,UAGPtU,EAAGz9B,UAAUq/B,KAAO,SAAeC,GACjCA,EAAKzB,MAAQ,IAAI98B,MAAM/C,KAAK2E,QAC5B,IAAK,IAAIvE,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAC/BkhC,EAAKzB,MAAMz/B,GAAKJ,KAAK6/B,MAAMz/B,GAE7BkhC,EAAK38B,OAAS3E,KAAK2E,OACnB28B,EAAK1B,SAAW5/B,KAAK4/B,SACrB0B,EAAKxB,IAAM9/B,KAAK8/B,KAUlBL,EAAGz9B,UAAU6+F,MAAQ,SAAgBv/D,GACnCs/D,EAAKt/D,EAAMthC,OAGby/B,EAAGz9B,UAAUu/B,MAAQ,WACnB,IAAIrgC,EAAI,IAAIu+B,EAAG,MAEf,OADAz/B,KAAKqhC,KAAKngC,GACHA,GAGTu+B,EAAGz9B,UAAUw/B,QAAU,SAAkBp3B,GACvC,KAAOpK,KAAK2E,OAASyF,GACnBpK,KAAK6/B,MAAM7/B,KAAK2E,UAAY,EAE9B,OAAO3E,MAITy/B,EAAGz9B,UAAU+xC,OAAS,WACpB,KAAO/zC,KAAK2E,OAAS,GAAqC,IAAhC3E,KAAK6/B,MAAM7/B,KAAK2E,OAAS,IACjD3E,KAAK2E,SAEP,OAAO3E,KAAKyhC,aAGdhC,EAAGz9B,UAAUy/B,UAAY,WAKvB,OAHoB,IAAhBzhC,KAAK2E,QAAkC,IAAlB3E,KAAK6/B,MAAM,KAClC7/B,KAAK4/B,SAAW,GAEX5/B,MAKa,oBAAXmB,QAAgD,mBAAfA,OAAO2/F,IACjD,IACErhE,EAAGz9B,UAAUb,OAAO2/F,IAAI,+BAAiCp/D,EACzD,MAAOn9B,GACPk7B,EAAGz9B,UAAU0/B,QAAUA,OAGzBjC,EAAGz9B,UAAU0/B,QAAUA,EAGzB,SAASA,IACP,OAAQ1hC,KAAK8/B,IAAM,UAAY,SAAW9/B,KAAKmE,SAAS,IAAM,IAiChE,IAAIw9B,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAG9DpC,EAAGz9B,UAAUmC,SAAW,SAAmBmzB,EAAM+K,GAI/C,IAAIN,EACJ,GAHAM,EAAoB,EAAVA,GAAe,EAGZ,MAJb/K,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjCyK,EAAM,GAGN,IAFA,IAAIrD,EAAM,EACNuD,EAAQ,EACH7hC,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAAK,CACpC,IAAIygC,EAAI7gC,KAAK6/B,MAAMz/B,GACf8gC,GAA+B,UAArBL,GAAKnC,EAAOuD,IAAmB99B,SAAS,IAGpD49B,EADY,KADdE,EAASpB,IAAO,GAAKnC,EAAQ,WACVt+B,IAAMJ,KAAK2E,OAAS,EAC/Bg9B,EAAM,EAAIT,EAAKv8B,QAAUu8B,EAAOa,EAEhCb,EAAOa,GAEfrD,GAAO,IACI,KACTA,GAAO,GACPt+B,KAMJ,IAHc,IAAV6hC,IACFF,EAAME,EAAM99B,SAAS,IAAM49B,GAEtBA,EAAIp9B,OAAS09B,GAAY,GAC9BN,EAAM,IAAMA,EAKd,OAHsB,IAAlB/hC,KAAK4/B,WACPmC,EAAM,IAAMA,GAEPA,EAGT,GAAIzK,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIgL,EAAYV,EAAWtK,GAEvBiL,EAAYV,EAAWvK,GAC3ByK,EAAM,GACN,IAAIthC,EAAIT,KAAKuhC,QAEb,IADA9gC,EAAEm/B,SAAW,GACLn/B,EAAE2K,UAAU,CAClB,IAAIlK,EAAIT,EAAEsgG,MAAMx+D,GAAWp+B,SAASmzB,GAMlCyK,GALFthC,EAAIA,EAAEgiC,MAAMF,IAELn3B,SAGClK,EAAI6gC,EAFJJ,EAAMW,EAAYphC,EAAEyD,QAAUzD,EAAI6gC,EAQ5C,IAHI/hC,KAAKoL,WACP22B,EAAM,IAAMA,GAEPA,EAAIp9B,OAAS09B,GAAY,GAC9BN,EAAM,IAAMA,EAKd,OAHsB,IAAlB/hC,KAAK4/B,WACPmC,EAAM,IAAMA,GAEPA,EAGTzC,GAAO,EAAO,oCAGhBG,EAAGz9B,UAAUkJ,SAAW,WACtB,IAAIw3B,EAAM1iC,KAAK6/B,MAAM,GASrB,OARoB,IAAhB7/B,KAAK2E,OACP+9B,GAAuB,SAAhB1iC,KAAK6/B,MAAM,GACO,IAAhB7/B,KAAK2E,QAAkC,IAAlB3E,KAAK6/B,MAAM,GAEzC6C,GAAO,iBAAoC,SAAhB1iC,KAAK6/B,MAAM,GAC7B7/B,KAAK2E,OAAS,GACvB26B,GAAO,EAAO,8CAEU,IAAlBt/B,KAAK4/B,UAAmB8C,EAAMA,GAGxCjD,EAAGz9B,UAAU2gC,OAAS,WACpB,OAAO3iC,KAAKmE,SAAS,GAAI,IAGvB+3B,IACFuD,EAAGz9B,UAAU4gC,SAAW,SAAmBlD,EAAQ/6B,GACjD,OAAO3E,KAAK6iC,YAAY3G,EAAQwD,EAAQ/6B,KAI5C86B,EAAGz9B,UAAU6b,QAAU,SAAkB6hB,EAAQ/6B,GAC/C,OAAO3E,KAAK6iC,YAAY9/B,MAAO28B,EAAQ/6B,IA4gBzC,SAASm9B,EAAYvtB,EAAMgsB,EAAKwB,GAC9BA,EAAInC,SAAWW,EAAIX,SAAWrrB,EAAKqrB,SACnC,IAAIrsB,EAAOgB,EAAK5P,OAAS47B,EAAI57B,OAAU,EACvCo9B,EAAIp9B,OAAS4O,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIzQ,EAAoB,EAAhByR,EAAKsrB,MAAM,GACfn7B,EAAmB,EAAf67B,EAAIV,MAAM,GACd3+B,EAAI4B,EAAI4B,EAERs9B,EAAS,SAAJ9gC,EACL+gC,EAAS/gC,EAAI,SAAa,EAC9B6gC,EAAIlC,MAAM,GAAKmC,EAEf,IAAK,IAAItuB,EAAI,EAAGA,EAAIH,EAAKG,IAAK,CAM5B,IAHA,IAAIwuB,EAASD,IAAU,GACnBE,EAAgB,SAARF,EACRG,EAAOr7B,KAAKsD,IAAIqJ,EAAG6sB,EAAI57B,OAAS,GAC3BsT,EAAIlR,KAAK8G,IAAI,EAAG6F,EAAIa,EAAK5P,OAAS,GAAIsT,GAAKmqB,EAAMnqB,IAAK,CAC7D,IAAI7X,EAAKsT,EAAIuE,EAAK,EAIlBiqB,IADAhhC,GAFA4B,EAAoB,EAAhByR,EAAKsrB,MAAMz/B,KACfsE,EAAmB,EAAf67B,EAAIV,MAAM5nB,IACFkqB,GACG,SAAa,EAC5BA,EAAY,SAAJjhC,EAEV6gC,EAAIlC,MAAMnsB,GAAa,EAARyuB,EACfF,EAAiB,EAATC,EAQV,OANc,IAAVD,EACFF,EAAIlC,MAAMnsB,GAAa,EAARuuB,EAEfF,EAAIp9B,SAGCo9B,EAAIgS,SAxiBbtU,EAAGz9B,UAAU6gC,YAAc,SAAsBC,EAAWpD,EAAQ/6B,GAClE3E,KAAK+zC,SAEL,IAAIhR,EAAa/iC,KAAK+iC,aAClBC,EAAYr+B,GAAUoC,KAAK8G,IAAI,EAAGk1B,GACtCzD,EAAOyD,GAAcC,EAAW,yCAChC1D,EAAO0D,EAAY,EAAG,+BAEtB,IAAIp1B,EAfS,SAAmBk1B,EAAW14B,GAC3C,OAAI04B,EAAUtG,YACLsG,EAAUtG,YAAYpyB,GAExB,IAAI04B,EAAU14B,GAWX42F,CAASl+D,EAAWE,GAG9B,OADAhjC,KAAK,gBADoB,OAAX0/B,EAAkB,KAAO,OACR9xB,EAAKm1B,GAC7Bn1B,GAGT6xB,EAAGz9B,UAAUi/F,eAAiB,SAAyBrzF,EAAKm1B,GAI1D,IAHA,IAAIhyB,EAAW,EACXkxB,EAAQ,EAEH7hC,EAAI,EAAGquC,EAAQ,EAAGruC,EAAIJ,KAAK2E,OAAQvE,IAAK,CAC/C,IAAI8gC,EAAQlhC,KAAK6/B,MAAMz/B,IAAMquC,EAASxM,EAEtCr0B,EAAImD,KAAqB,IAAPmwB,EACdnwB,EAAWnD,EAAIjJ,SACjBiJ,EAAImD,KAAemwB,GAAQ,EAAK,KAE9BnwB,EAAWnD,EAAIjJ,SACjBiJ,EAAImD,KAAemwB,GAAQ,GAAM,KAGrB,IAAVuN,GACE19B,EAAWnD,EAAIjJ,SACjBiJ,EAAImD,KAAemwB,GAAQ,GAAM,KAEnCe,EAAQ,EACRwM,EAAQ,IAERxM,EAAQf,IAAS,GACjBuN,GAAS,GAIb,GAAI19B,EAAWnD,EAAIjJ,OAGjB,IAFAiJ,EAAImD,KAAckxB,EAEXlxB,EAAWnD,EAAIjJ,QACpBiJ,EAAImD,KAAc,GAKxB0uB,EAAGz9B,UAAUk/F,eAAiB,SAAyBtzF,EAAKm1B,GAI1D,IAHA,IAAIhyB,EAAWnD,EAAIjJ,OAAS,EACxBs9B,EAAQ,EAEH7hC,EAAI,EAAGquC,EAAQ,EAAGruC,EAAIJ,KAAK2E,OAAQvE,IAAK,CAC/C,IAAI8gC,EAAQlhC,KAAK6/B,MAAMz/B,IAAMquC,EAASxM,EAEtCr0B,EAAImD,KAAqB,IAAPmwB,EACdnwB,GAAY,IACdnD,EAAImD,KAAemwB,GAAQ,EAAK,KAE9BnwB,GAAY,IACdnD,EAAImD,KAAemwB,GAAQ,GAAM,KAGrB,IAAVuN,GACE19B,GAAY,IACdnD,EAAImD,KAAemwB,GAAQ,GAAM,KAEnCe,EAAQ,EACRwM,EAAQ,IAERxM,EAAQf,IAAS,GACjBuN,GAAS,GAIb,GAAI19B,GAAY,EAGd,IAFAnD,EAAImD,KAAckxB,EAEXlxB,GAAY,GACjBnD,EAAImD,KAAc,GAKpBhK,KAAKkM,MACPwsB,EAAGz9B,UAAUqhC,WAAa,SAAqBxC,GAC7C,OAAO,GAAK95B,KAAKkM,MAAM4tB,IAGzBpB,EAAGz9B,UAAUqhC,WAAa,SAAqBxC,GAC7C,IAAIv/B,EAAIu/B,EACJ3/B,EAAI,EAiBR,OAhBII,GAAK,OACPJ,GAAK,GACLI,KAAO,IAELA,GAAK,KACPJ,GAAK,EACLI,KAAO,GAELA,GAAK,IACPJ,GAAK,EACLI,KAAO,GAELA,GAAK,IACPJ,GAAK,EACLI,KAAO,GAEFJ,EAAII,GAIfm+B,EAAGz9B,UAAUshC,UAAY,SAAoBzC,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAIv/B,EAAIu/B,EACJ3/B,EAAI,EAoBR,OAnBqB,IAAZ,KAAJI,KACHJ,GAAK,GACLI,KAAO,IAEU,IAAV,IAAJA,KACHJ,GAAK,EACLI,KAAO,GAES,IAAT,GAAJA,KACHJ,GAAK,EACLI,KAAO,GAES,IAAT,EAAJA,KACHJ,GAAK,EACLI,KAAO,GAES,IAAT,EAAJA,IACHJ,IAEKA,GAITu+B,EAAGz9B,UAAUuhC,UAAY,WACvB,IAAI1C,EAAI7gC,KAAK6/B,MAAM7/B,KAAK2E,OAAS,GAC7B6+B,EAAKxjC,KAAKqjC,WAAWxC,GACzB,OAA2B,IAAnB7gC,KAAK2E,OAAS,GAAU6+B,GAiBlC/D,EAAGz9B,UAAUyhC,SAAW,WACtB,GAAIzjC,KAAKoL,SAAU,OAAO,EAG1B,IADA,IAAIlK,EAAI,EACCd,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAAK,CACpC,IAAIsE,EAAI1E,KAAKsjC,UAAUtjC,KAAK6/B,MAAMz/B,IAElC,GADAc,GAAKwD,EACK,KAANA,EAAU,MAEhB,OAAOxD,GAGTu+B,EAAGz9B,UAAU+gC,WAAa,WACxB,OAAOh8B,KAAKiH,KAAKhO,KAAKujC,YAAc,IAGtC9D,EAAGz9B,UAAU0hC,OAAS,SAAiBC,GACrC,OAAsB,IAAlB3jC,KAAK4/B,SACA5/B,KAAK8R,MAAM8xB,MAAMD,GAAOE,MAAM,GAEhC7jC,KAAKuhC,SAGd9B,EAAGz9B,UAAU8hC,SAAW,SAAmBH,GACzC,OAAI3jC,KAAK+jC,MAAMJ,EAAQ,GACd3jC,KAAKgkC,KAAKL,GAAOE,MAAM,GAAGI,OAE5BjkC,KAAKuhC,SAGd9B,EAAGz9B,UAAUkiC,MAAQ,WACnB,OAAyB,IAAlBlkC,KAAK4/B,UAIdH,EAAGz9B,UAAUmiC,IAAM,WACjB,OAAOnkC,KAAKuhC,QAAQ0C,QAGtBxE,EAAGz9B,UAAUiiC,KAAO,WAKlB,OAJKjkC,KAAKoL,WACRpL,KAAK4/B,UAAY,GAGZ5/B,MAITy/B,EAAGz9B,UAAUoiC,KAAO,SAAe7D,GACjC,KAAOvgC,KAAK2E,OAAS47B,EAAI57B,QACvB3E,KAAK6/B,MAAM7/B,KAAK2E,UAAY,EAG9B,IAAK,IAAIvE,EAAI,EAAGA,EAAImgC,EAAI57B,OAAQvE,IAC9BJ,KAAK6/B,MAAMz/B,GAAKJ,KAAK6/B,MAAMz/B,GAAKmgC,EAAIV,MAAMz/B,GAG5C,OAAOJ,KAAK+zC,UAGdtU,EAAGz9B,UAAUqiC,IAAM,SAAc9D,GAE/B,OADAjB,EAA0C,IAAlCt/B,KAAK4/B,SAAWW,EAAIX,WACrB5/B,KAAKokC,KAAK7D,IAInBd,EAAGz9B,UAAUwM,GAAK,SAAa+xB,GAC7B,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQ8C,IAAI9D,GAC/CA,EAAIgB,QAAQ8C,IAAIrkC,OAGzBy/B,EAAGz9B,UAAUsiC,IAAM,SAAc/D,GAC/B,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQ6C,KAAK7D,GAChDA,EAAIgB,QAAQ6C,KAAKpkC,OAI1By/B,EAAGz9B,UAAUuiC,MAAQ,SAAgBhE,GAEnC,IAAI77B,EAEFA,EADE1E,KAAK2E,OAAS47B,EAAI57B,OAChB47B,EAEAvgC,KAGN,IAAK,IAAII,EAAI,EAAGA,EAAIsE,EAAEC,OAAQvE,IAC5BJ,KAAK6/B,MAAMz/B,GAAKJ,KAAK6/B,MAAMz/B,GAAKmgC,EAAIV,MAAMz/B,GAK5C,OAFAJ,KAAK2E,OAASD,EAAEC,OAET3E,KAAK+zC,UAGdtU,EAAGz9B,UAAUwiC,KAAO,SAAejE,GAEjC,OADAjB,EAA0C,IAAlCt/B,KAAK4/B,SAAWW,EAAIX,WACrB5/B,KAAKukC,MAAMhE,IAIpBd,EAAGz9B,UAAUuM,IAAM,SAAcgyB,GAC/B,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQiD,KAAKjE,GAChDA,EAAIgB,QAAQiD,KAAKxkC,OAG1By/B,EAAGz9B,UAAUyiC,KAAO,SAAelE,GACjC,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQgD,MAAMhE,GACjDA,EAAIgB,QAAQgD,MAAMvkC,OAI3By/B,EAAGz9B,UAAU0iC,MAAQ,SAAgBnE,GAEnC,IAAIz9B,EACA4B,EACA1E,KAAK2E,OAAS47B,EAAI57B,QACpB7B,EAAI9C,KACJ0E,EAAI67B,IAEJz9B,EAAIy9B,EACJ77B,EAAI1E,MAGN,IAAK,IAAII,EAAI,EAAGA,EAAIsE,EAAEC,OAAQvE,IAC5BJ,KAAK6/B,MAAMz/B,GAAK0C,EAAE+8B,MAAMz/B,GAAKsE,EAAEm7B,MAAMz/B,GAGvC,GAAIJ,OAAS8C,EACX,KAAO1C,EAAI0C,EAAE6B,OAAQvE,IACnBJ,KAAK6/B,MAAMz/B,GAAK0C,EAAE+8B,MAAMz/B,GAM5B,OAFAJ,KAAK2E,OAAS7B,EAAE6B,OAET3E,KAAK+zC,UAGdtU,EAAGz9B,UAAU2iC,KAAO,SAAepE,GAEjC,OADAjB,EAA0C,IAAlCt/B,KAAK4/B,SAAWW,EAAIX,WACrB5/B,KAAK0kC,MAAMnE,IAIpBd,EAAGz9B,UAAUyM,IAAM,SAAc8xB,GAC/B,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQoD,KAAKpE,GAChDA,EAAIgB,QAAQoD,KAAK3kC,OAG1By/B,EAAGz9B,UAAU4iC,KAAO,SAAerE,GACjC,OAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQmD,MAAMnE,GACjDA,EAAIgB,QAAQmD,MAAM1kC,OAI3By/B,EAAGz9B,UAAU4hC,MAAQ,SAAgBD,GACnCrE,EAAwB,iBAAVqE,GAAsBA,GAAS,GAE7C,IAAIkB,EAAsC,EAAxB99B,KAAKiH,KAAK21B,EAAQ,IAChCmB,EAAWnB,EAAQ,GAGvB3jC,KAAKwhC,QAAQqD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAIzkC,EAAI,EAAGA,EAAIykC,EAAazkC,IAC/BJ,KAAK6/B,MAAMz/B,GAAsB,UAAhBJ,KAAK6/B,MAAMz/B,GAS9B,OALI0kC,EAAW,IACb9kC,KAAK6/B,MAAMz/B,IAAMJ,KAAK6/B,MAAMz/B,GAAM,UAAc,GAAK0kC,GAIhD9kC,KAAK+zC,UAGdtU,EAAGz9B,UAAUgiC,KAAO,SAAeL,GACjC,OAAO3jC,KAAKuhC,QAAQqC,MAAMD,IAI5BlE,EAAGz9B,UAAU+iC,KAAO,SAAe94B,EAAKD,GACtCszB,EAAsB,iBAARrzB,GAAoBA,GAAO,GAEzC,IAAIyyB,EAAOzyB,EAAM,GAAM,EACnB+4B,EAAO/4B,EAAM,GAUjB,OARAjM,KAAKwhC,QAAQ9C,EAAM,GAGjB1+B,KAAK6/B,MAAMnB,GADT1yB,EACgBhM,KAAK6/B,MAAMnB,GAAQ,GAAKsG,EAExBhlC,KAAK6/B,MAAMnB,KAAS,GAAKsG,GAGtChlC,KAAK+zC,UAIdtU,EAAGz9B,UAAUijC,KAAO,SAAe1E,GACjC,IAAIr/B,EAkBA4B,EAAG4B,EAfP,GAAsB,IAAlB1E,KAAK4/B,UAAmC,IAAjBW,EAAIX,SAI7B,OAHA5/B,KAAK4/B,SAAW,EAChB1+B,EAAIlB,KAAKklC,KAAK3E,GACdvgC,KAAK4/B,UAAY,EACV5/B,KAAKyhC,YAGP,GAAsB,IAAlBzhC,KAAK4/B,UAAmC,IAAjBW,EAAIX,SAIpC,OAHAW,EAAIX,SAAW,EACf1+B,EAAIlB,KAAKklC,KAAK3E,GACdA,EAAIX,SAAW,EACR1+B,EAAEugC,YAKPzhC,KAAK2E,OAAS47B,EAAI57B,QACpB7B,EAAI9C,KACJ0E,EAAI67B,IAEJz9B,EAAIy9B,EACJ77B,EAAI1E,MAIN,IADA,IAAIiiC,EAAQ,EACH7hC,EAAI,EAAGA,EAAIsE,EAAEC,OAAQvE,IAC5Bc,GAAkB,EAAb4B,EAAE+8B,MAAMz/B,KAAwB,EAAbsE,EAAEm7B,MAAMz/B,IAAU6hC,EAC1CjiC,KAAK6/B,MAAMz/B,GAAS,SAAJc,EAChB+gC,EAAQ/gC,IAAM,GAEhB,KAAiB,IAAV+gC,GAAe7hC,EAAI0C,EAAE6B,OAAQvE,IAClCc,GAAkB,EAAb4B,EAAE+8B,MAAMz/B,IAAU6hC,EACvBjiC,KAAK6/B,MAAMz/B,GAAS,SAAJc,EAChB+gC,EAAQ/gC,IAAM,GAIhB,GADAlB,KAAK2E,OAAS7B,EAAE6B,OACF,IAAVs9B,EACFjiC,KAAK6/B,MAAM7/B,KAAK2E,QAAUs9B,EAC1BjiC,KAAK2E,cAEA,GAAI7B,IAAM9C,KACf,KAAOI,EAAI0C,EAAE6B,OAAQvE,IACnBJ,KAAK6/B,MAAMz/B,GAAK0C,EAAE+8B,MAAMz/B,GAI5B,OAAOJ,MAITy/B,EAAGz9B,UAAUyI,IAAM,SAAc81B,GAC/B,IAAI3yB,EACJ,OAAqB,IAAjB2yB,EAAIX,UAAoC,IAAlB5/B,KAAK4/B,UAC7BW,EAAIX,SAAW,EACfhyB,EAAM5N,KAAKmlC,IAAI5E,GACfA,EAAIX,UAAY,EACThyB,GACmB,IAAjB2yB,EAAIX,UAAoC,IAAlB5/B,KAAK4/B,UACpC5/B,KAAK4/B,SAAW,EAChBhyB,EAAM2yB,EAAI4E,IAAInlC,MACdA,KAAK4/B,SAAW,EACThyB,GAGL5N,KAAK2E,OAAS47B,EAAI57B,OAAe3E,KAAKuhC,QAAQ0D,KAAK1E,GAEhDA,EAAIgB,QAAQ0D,KAAKjlC,OAI1By/B,EAAGz9B,UAAUkjC,KAAO,SAAe3E,GAEjC,GAAqB,IAAjBA,EAAIX,SAAgB,CACtBW,EAAIX,SAAW,EACf,IAAI1+B,EAAIlB,KAAKilC,KAAK1E,GAElB,OADAA,EAAIX,SAAW,EACR1+B,EAAEugC,YAGJ,GAAsB,IAAlBzhC,KAAK4/B,SAId,OAHA5/B,KAAK4/B,SAAW,EAChB5/B,KAAKilC,KAAK1E,GACVvgC,KAAK4/B,SAAW,EACT5/B,KAAKyhC,YAId,IAWI3+B,EAAG4B,EAXH87B,EAAMxgC,KAAKwgC,IAAID,GAGnB,GAAY,IAARC,EAIF,OAHAxgC,KAAK4/B,SAAW,EAChB5/B,KAAK2E,OAAS,EACd3E,KAAK6/B,MAAM,GAAK,EACT7/B,KAKLwgC,EAAM,GACR19B,EAAI9C,KACJ0E,EAAI67B,IAEJz9B,EAAIy9B,EACJ77B,EAAI1E,MAIN,IADA,IAAIiiC,EAAQ,EACH7hC,EAAI,EAAGA,EAAIsE,EAAEC,OAAQvE,IAE5B6hC,GADA/gC,GAAkB,EAAb4B,EAAE+8B,MAAMz/B,KAAwB,EAAbsE,EAAEm7B,MAAMz/B,IAAU6hC,IAC7B,GACbjiC,KAAK6/B,MAAMz/B,GAAS,SAAJc,EAElB,KAAiB,IAAV+gC,GAAe7hC,EAAI0C,EAAE6B,OAAQvE,IAElC6hC,GADA/gC,GAAkB,EAAb4B,EAAE+8B,MAAMz/B,IAAU6hC,IACV,GACbjiC,KAAK6/B,MAAMz/B,GAAS,SAAJc,EAIlB,GAAc,IAAV+gC,GAAe7hC,EAAI0C,EAAE6B,QAAU7B,IAAM9C,KACvC,KAAOI,EAAI0C,EAAE6B,OAAQvE,IACnBJ,KAAK6/B,MAAMz/B,GAAK0C,EAAE+8B,MAAMz/B,GAU5B,OANAJ,KAAK2E,OAASoC,KAAK8G,IAAI7N,KAAK2E,OAAQvE,GAEhC0C,IAAM9C,OACRA,KAAK4/B,SAAW,GAGX5/B,KAAK+zC,UAIdtU,EAAGz9B,UAAUmjC,IAAM,SAAc5E,GAC/B,OAAOvgC,KAAKuhC,QAAQ2D,KAAK3E,IA+C3B,IAAI6E,EAAc,SAAsB7wB,EAAMgsB,EAAKwB,GACjD,IAIIC,EACAqD,EACA7B,EANA1gC,EAAIyR,EAAKsrB,MACTn7B,EAAI67B,EAAIV,MACRh/B,EAAIkhC,EAAIlC,MACRp/B,EAAI,EAIJ6kC,EAAY,EAAPxiC,EAAE,GACPyiC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3iC,EAAE,GACP4iC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9iC,EAAE,GACP+iC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjjC,EAAE,GACPkjC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpjC,EAAE,GACPqjC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvjC,EAAE,GACPwjC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1jC,EAAE,GACP2jC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP7jC,EAAE,GACP8jC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhkC,EAAE,GACPikC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnkC,EAAE,GACPokC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1iC,EAAE,GACP2iC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP7iC,EAAE,GACP8iC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhjC,EAAE,GACPijC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnjC,EAAE,GACPojC,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtjC,EAAE,GACPujC,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPzjC,EAAE,GACP0jC,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP5jC,EAAE,GACP6jC,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP/jC,EAAE,GACPgkC,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPlkC,EAAE,GACPmkC,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPrkC,EAAE,GACPskC,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBhH,EAAInC,SAAWrrB,EAAKqrB,SAAWW,EAAIX,SACnCmC,EAAIp9B,OAAS,GAMb,IAAIukC,IAAQzoC,GAJZuhC,EAAKj7B,KAAKI,KAAKo+B,EAAK8B,IAIE,KAAa,MAFnChC,GADAA,EAAMt+B,KAAKI,KAAKo+B,EAAK+B,IACRvgC,KAAKI,KAAKq+B,EAAK6B,GAAQ,KAEU,IAAO,EACrD5mC,IAFA+iC,EAAKz8B,KAAKI,KAAKq+B,EAAK8B,KAEPjC,IAAQ,IAAO,IAAM6D,KAAO,IAAO,EAChDA,IAAM,SAENlH,EAAKj7B,KAAKI,KAAKu+B,EAAK2B,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAKu+B,EAAK4B,IACRvgC,KAAKI,KAAKw+B,EAAK0B,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAKw+B,EAAK2B,GAKpB,IAAI6B,IAAQ1oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKkC,GAAQ,GACvB1gC,KAAKI,KAAKq+B,EAAKgC,GAAQ,KAEU,IAAO,EACrD/mC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKiC,GAAQ,IAErBpC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENnH,EAAKj7B,KAAKI,KAAK0+B,EAAKwB,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAK0+B,EAAKyB,IACRvgC,KAAKI,KAAK2+B,EAAKuB,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAK2+B,EAAKwB,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAK8B,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAK+B,GAAQ,GACvB1gC,KAAKI,KAAKw+B,EAAK6B,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAK8B,GAAQ,EAKlC,IAAI2B,IAAQ3oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKqC,GAAQ,GACvB7gC,KAAKI,KAAKq+B,EAAKmC,GAAQ,KAEU,IAAO,EACrDlnC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKoC,GAAQ,IAErBvC,IAAQ,IAAO,IAAM+D,KAAO,IAAO,EAChDA,IAAM,SAENpH,EAAKj7B,KAAKI,KAAK6+B,EAAKqB,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAK6+B,EAAKsB,IACRvgC,KAAKI,KAAK8+B,EAAKoB,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAK8+B,EAAKqB,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAK2B,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAK4B,GAAQ,GACvB1gC,KAAKI,KAAK2+B,EAAK0B,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAK2B,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKiC,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKkC,GAAQ,GACvB7gC,KAAKI,KAAKw+B,EAAKgC,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKiC,GAAQ,EAKlC,IAAIyB,IAAQ5oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKuC,GAAQ,GAIZ,KAAa,MAFnCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKwC,GAAQ,GACvBhhC,KAAKI,KAAKq+B,EAAKsC,GAAQ,KAEU,IAAO,EACrDrnC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKuC,GAAQ,IAErB1C,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAENrH,EAAKj7B,KAAKI,KAAKg/B,EAAKkB,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAKg/B,EAAKmB,IACRvgC,KAAKI,KAAKi/B,EAAKiB,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAKi/B,EAAKkB,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAKwB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAKyB,GAAQ,GACvB1gC,KAAKI,KAAK8+B,EAAKuB,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAKwB,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAK8B,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAK+B,GAAQ,GACvB7gC,KAAKI,KAAK2+B,EAAK6B,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAK8B,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKoC,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKqC,GAAQ,GACvBhhC,KAAKI,KAAKw+B,EAAKmC,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKoC,GAAQ,EAKlC,IAAIuB,IAAQ7oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAK2C,IAAQ,GACvBnhC,KAAKI,KAAKq+B,EAAKyC,GAAQ,KAEU,IAAO,EACrDxnC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAK0C,IAAQ,IAErB7C,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENtH,EAAKj7B,KAAKI,KAAKm/B,EAAKe,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAKm/B,EAAKgB,IACRvgC,KAAKI,KAAKo/B,EAAKc,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAKo/B,EAAKe,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAKqB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAKsB,GAAQ,GACvB1gC,KAAKI,KAAKi/B,EAAKoB,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAKqB,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAK2B,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAK4B,GAAQ,GACvB7gC,KAAKI,KAAK8+B,EAAK0B,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAK2B,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAKiC,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAKkC,GAAQ,GACvBhhC,KAAKI,KAAK2+B,EAAKgC,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAKiC,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKuC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKwC,IAAQ,GACvBnhC,KAAKI,KAAKw+B,EAAKsC,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKuC,IAAQ,EAKlC,IAAIqB,IAAQ9oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAK6C,IAAQ,GAIZ,KAAa,MAFnC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAK8C,IAAQ,GACvBthC,KAAKI,KAAKq+B,EAAK4C,IAAQ,KAEU,IAAO,EACrD3nC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAK6C,IAAQ,IAErBhD,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENvH,EAAKj7B,KAAKI,KAAKs/B,EAAKY,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAKs/B,EAAKa,IACRvgC,KAAKI,KAAKu/B,EAAKW,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAKu/B,EAAKY,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKkB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKmB,GAAQ,GACvB1gC,KAAKI,KAAKo/B,EAAKiB,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKkB,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAKwB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAKyB,GAAQ,GACvB7gC,KAAKI,KAAKi/B,EAAKuB,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAKwB,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAK8B,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAK+B,GAAQ,GACvBhhC,KAAKI,KAAK8+B,EAAK6B,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAK8B,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAKoC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAKqC,IAAQ,GACvBnhC,KAAKI,KAAK2+B,EAAKmC,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAKoC,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAK0C,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAK2C,IAAQ,GACvBthC,KAAKI,KAAKw+B,EAAKyC,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAK0C,IAAQ,EAKlC,IAAImB,IAAQ/oC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKgD,IAAQ,GAIZ,KAAa,MAFnClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKiD,IAAQ,GACvBzhC,KAAKI,KAAKq+B,EAAK+C,IAAQ,KAEU,IAAO,EACrD9nC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKgD,IAAQ,IAErBnD,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENxH,EAAKj7B,KAAKI,KAAKy/B,EAAKS,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAKy/B,EAAKU,IACRvgC,KAAKI,KAAK0/B,EAAKQ,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAK0/B,EAAKS,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKe,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKgB,GAAQ,GACvB1gC,KAAKI,KAAKu/B,EAAKc,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKe,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKqB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKsB,GAAQ,GACvB7gC,KAAKI,KAAKo/B,EAAKoB,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKqB,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAK2B,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAK4B,GAAQ,GACvBhhC,KAAKI,KAAKi/B,EAAK0B,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAK2B,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAKiC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAKkC,IAAQ,GACvBnhC,KAAKI,KAAK8+B,EAAKgC,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAKiC,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAKuC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAKwC,IAAQ,GACvBthC,KAAKI,KAAK2+B,EAAKsC,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAKuC,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAK6C,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAK8C,IAAQ,GACvBzhC,KAAKI,KAAKw+B,EAAK4C,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAK6C,IAAQ,EAKlC,IAAIiB,IAAQhpC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKoD,IAAQ,GACvB5hC,KAAKI,KAAKq+B,EAAKkD,IAAQ,KAEU,IAAO,EACrDjoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKmD,IAAQ,IAErBtD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENzH,EAAKj7B,KAAKI,KAAK4/B,EAAKM,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAK4/B,EAAKO,IACRvgC,KAAKI,KAAK6/B,EAAKK,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAK6/B,EAAKM,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKY,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKa,GAAQ,GACvB1gC,KAAKI,KAAK0/B,EAAKW,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKY,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKkB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKmB,GAAQ,GACvB7gC,KAAKI,KAAKu/B,EAAKiB,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKkB,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKwB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKyB,GAAQ,GACvBhhC,KAAKI,KAAKo/B,EAAKuB,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKwB,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAK8B,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAK+B,IAAQ,GACvBnhC,KAAKI,KAAKi/B,EAAK6B,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAK8B,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAKoC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAKqC,IAAQ,GACvBthC,KAAKI,KAAK8+B,EAAKmC,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAKoC,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAK0C,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAK2C,IAAQ,GACvBzhC,KAAKI,KAAK2+B,EAAKyC,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAK0C,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKgD,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKiD,IAAQ,GACvB5hC,KAAKI,KAAKw+B,EAAK+C,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKgD,IAAQ,EAKlC,IAAIe,IAAQjpC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAKuD,IAAQ,GACvB/hC,KAAKI,KAAKq+B,EAAKqD,IAAQ,KAEU,IAAO,EACrDpoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKsD,IAAQ,IAErBzD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAEN1H,EAAKj7B,KAAKI,KAAK+/B,EAAKG,GAEpBhC,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKI,IACRvgC,KAAKI,KAAKggC,EAAKE,GAAQ,EACpC7D,EAAKz8B,KAAKI,KAAKggC,EAAKG,GACpBtF,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKS,GAAQ,EAElCnC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKU,GAAQ,GACvB1gC,KAAKI,KAAK6/B,EAAKQ,GAAQ,EACpChE,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKS,GAAQ,EAClCzF,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKe,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKgB,GAAQ,GACvB7gC,KAAKI,KAAK0/B,EAAKc,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKe,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKqB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKsB,GAAQ,GACvBhhC,KAAKI,KAAKu/B,EAAKoB,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKqB,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAK2B,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAK4B,IAAQ,GACvBnhC,KAAKI,KAAKo/B,EAAK0B,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAK2B,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAKiC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAKkC,IAAQ,GACvBthC,KAAKI,KAAKi/B,EAAKgC,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAKiC,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAKuC,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAKwC,IAAQ,GACvBzhC,KAAKI,KAAK8+B,EAAKsC,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAKuC,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAK6C,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAK8C,IAAQ,GACvB5hC,KAAKI,KAAK2+B,EAAK4C,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAK6C,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKmD,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKoD,IAAQ,GACvB/hC,KAAKI,KAAKw+B,EAAKkD,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKmD,IAAQ,EAKlC,IAAIa,IAAQlpC,GAJZuhC,EAAMA,EAAKj7B,KAAKI,KAAKo+B,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKo+B,EAAK0D,IAAQ,GACvBliC,KAAKI,KAAKq+B,EAAKwD,IAAQ,KAEU,IAAO,EACrDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKq+B,EAAKyD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAEN3H,EAAKj7B,KAAKI,KAAK+/B,EAAKM,GAEpBnC,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKO,IACR1gC,KAAKI,KAAKggC,EAAKK,GAAQ,EACpChE,EAAKz8B,KAAKI,KAAKggC,EAAKM,GACpBzF,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKY,GAAQ,EAElCtC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKa,GAAQ,GACvB7gC,KAAKI,KAAK6/B,EAAKW,GAAQ,EACpCnE,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKY,GAAQ,EAClC5F,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKkB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKmB,GAAQ,GACvBhhC,KAAKI,KAAK0/B,EAAKiB,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKkB,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKwB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKyB,IAAQ,GACvBnhC,KAAKI,KAAKu/B,EAAKuB,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKwB,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAK8B,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAK+B,IAAQ,GACvBthC,KAAKI,KAAKo/B,EAAK6B,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAK8B,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAKoC,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAKqC,IAAQ,GACvBzhC,KAAKI,KAAKi/B,EAAKmC,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAKoC,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAK0C,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAK2C,IAAQ,GACvB5hC,KAAKI,KAAK8+B,EAAKyC,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAK0C,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAKgD,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAKiD,IAAQ,GACvB/hC,KAAKI,KAAK2+B,EAAK+C,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAKgD,IAAQ,EAKlC,IAAIc,IAASnpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAKu+B,EAAKsD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKu+B,EAAKuD,IAAQ,GACvBliC,KAAKI,KAAKw+B,EAAKqD,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKw+B,EAAKsD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMuE,KAAQ,IAAO,EACjDA,IAAO,SAEP5H,EAAKj7B,KAAKI,KAAK+/B,EAAKS,GAEpBtC,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKU,IACR7gC,KAAKI,KAAKggC,EAAKQ,GAAQ,EACpCnE,EAAKz8B,KAAKI,KAAKggC,EAAKS,GACpB5F,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKe,GAAQ,EAElCzC,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKgB,GAAQ,GACvBhhC,KAAKI,KAAK6/B,EAAKc,GAAQ,EACpCtE,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKe,GAAQ,EAClC/F,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKqB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKsB,IAAQ,GACvBnhC,KAAKI,KAAK0/B,EAAKoB,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKqB,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAK2B,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAK4B,IAAQ,GACvBthC,KAAKI,KAAKu/B,EAAK0B,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAK2B,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKiC,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKkC,IAAQ,GACvBzhC,KAAKI,KAAKo/B,EAAKgC,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKiC,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAKuC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAKwC,IAAQ,GACvB5hC,KAAKI,KAAKi/B,EAAKsC,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAKuC,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAK6C,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAK8C,IAAQ,GACvB/hC,KAAKI,KAAK8+B,EAAK4C,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAK6C,IAAQ,EAKlC,IAAIe,IAASppC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAK0+B,EAAKmD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK0+B,EAAKoD,IAAQ,GACvBliC,KAAKI,KAAK2+B,EAAKkD,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAK2+B,EAAKmD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMwE,KAAQ,IAAO,EACjDA,IAAO,SAEP7H,EAAKj7B,KAAKI,KAAK+/B,EAAKY,GAEpBzC,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKa,IACRhhC,KAAKI,KAAKggC,EAAKW,GAAQ,EACpCtE,EAAKz8B,KAAKI,KAAKggC,EAAKY,GACpB/F,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKkB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKmB,IAAQ,GACvBnhC,KAAKI,KAAK6/B,EAAKiB,GAAQ,EACpCzE,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKkB,IAAQ,EAClClG,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKwB,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKyB,IAAQ,GACvBthC,KAAKI,KAAK0/B,EAAKuB,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKwB,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAK8B,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAK+B,IAAQ,GACvBzhC,KAAKI,KAAKu/B,EAAK6B,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAK8B,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKoC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKqC,IAAQ,GACvB5hC,KAAKI,KAAKo/B,EAAKmC,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKoC,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAK0C,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAK2C,IAAQ,GACvB/hC,KAAKI,KAAKi/B,EAAKyC,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAK0C,IAAQ,EAKlC,IAAIgB,IAASrpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAK6+B,EAAKgD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK6+B,EAAKiD,IAAQ,GACvBliC,KAAKI,KAAK8+B,EAAK+C,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAK8+B,EAAKgD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEP9H,EAAKj7B,KAAKI,KAAK+/B,EAAKe,GAEpB5C,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKgB,KACRnhC,KAAKI,KAAKggC,EAAKc,GAAQ,EACpCzE,EAAKz8B,KAAKI,KAAKggC,EAAKe,IACpBlG,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKqB,IAAQ,EAElC/C,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKsB,IAAQ,GACvBthC,KAAKI,KAAK6/B,EAAKoB,IAAQ,EACpC5E,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKqB,IAAQ,EAClCrG,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAK2B,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAK4B,IAAQ,GACvBzhC,KAAKI,KAAK0/B,EAAK0B,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAK2B,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKiC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKkC,IAAQ,GACvB5hC,KAAKI,KAAKu/B,EAAKgC,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKiC,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAKuC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAKwC,IAAQ,GACvB/hC,KAAKI,KAAKo/B,EAAKsC,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAKuC,IAAQ,EAKlC,IAAIiB,IAAStpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAKg/B,EAAK6C,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKg/B,EAAK8C,IAAQ,GACvBliC,KAAKI,KAAKi/B,EAAK4C,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKi/B,EAAK6C,IAAQ,IAErB5D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEP/H,EAAKj7B,KAAKI,KAAK+/B,EAAKkB,IAEpB/C,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKmB,KACRthC,KAAKI,KAAKggC,EAAKiB,IAAQ,EACpC5E,EAAKz8B,KAAKI,KAAKggC,EAAKkB,IACpBrG,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKwB,IAAQ,EAElClD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKyB,IAAQ,GACvBzhC,KAAKI,KAAK6/B,EAAKuB,IAAQ,EACpC/E,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKwB,IAAQ,EAClCxG,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAK8B,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAK+B,IAAQ,GACvB5hC,KAAKI,KAAK0/B,EAAK6B,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAK8B,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKoC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKqC,IAAQ,GACvB/hC,KAAKI,KAAKu/B,EAAKmC,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKoC,IAAQ,EAKlC,IAAIkB,IAASvpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAKm/B,EAAK0C,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKm/B,EAAK2C,IAAQ,GACvBliC,KAAKI,KAAKo/B,EAAKyC,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKo/B,EAAK0C,IAAQ,IAErB5D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPhI,EAAKj7B,KAAKI,KAAK+/B,EAAKqB,IAEpBlD,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKsB,KACRzhC,KAAKI,KAAKggC,EAAKoB,IAAQ,EACpC/E,EAAKz8B,KAAKI,KAAKggC,EAAKqB,IACpBxG,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAK2B,IAAQ,EAElCrD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAK4B,IAAQ,GACvB5hC,KAAKI,KAAK6/B,EAAK0B,IAAQ,EACpClF,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAK2B,IAAQ,EAClC3G,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKiC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKkC,IAAQ,GACvB/hC,KAAKI,KAAK0/B,EAAKgC,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKiC,IAAQ,EAKlC,IAAImB,IAASxpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAKs/B,EAAKuC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKs/B,EAAKwC,IAAQ,GACvBliC,KAAKI,KAAKu/B,EAAKsC,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAKu/B,EAAKuC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPjI,EAAKj7B,KAAKI,KAAK+/B,EAAKwB,IAEpBrD,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAKyB,KACR5hC,KAAKI,KAAKggC,EAAKuB,IAAQ,EACpClF,EAAKz8B,KAAKI,KAAKggC,EAAKwB,IACpB3G,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAK8B,IAAQ,EAElCxD,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAK+B,IAAQ,GACvB/hC,KAAKI,KAAK6/B,EAAK6B,IAAQ,EACpCrF,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAK8B,IAAQ,EAKlC,IAAIoB,IAASzpC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAKy/B,EAAKoC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAKy/B,EAAKqC,IAAQ,GACvBliC,KAAKI,KAAK0/B,EAAKmC,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAK0/B,EAAKoC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPlI,EAAKj7B,KAAKI,KAAK+/B,EAAK2B,IAEpBxD,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAK4B,KACR/hC,KAAKI,KAAKggC,EAAK0B,IAAQ,EACpCrF,EAAKz8B,KAAKI,KAAKggC,EAAK2B,IAKpB,IAAIqB,IAAS1pC,GAJbuhC,EAAMA,EAAKj7B,KAAKI,KAAK4/B,EAAKiC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMt+B,KAAKI,KAAK4/B,EAAKkC,IAAQ,GACvBliC,KAAKI,KAAK6/B,EAAKgC,IAAQ,KAEW,IAAO,EACtDvoC,IAFA+iC,EAAMA,EAAKz8B,KAAKI,KAAK6/B,EAAKiC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS3pC,GAJbuhC,EAAKj7B,KAAKI,KAAK+/B,EAAK8B,KAIG,KAAa,MAFpC3D,GADAA,EAAMt+B,KAAKI,KAAK+/B,EAAK+B,KACRliC,KAAKI,KAAKggC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAvoC,IAFA+iC,EAAKz8B,KAAKI,KAAKggC,EAAK8B,MAEP5D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SACPvpC,EAAE,GAAKqoC,GACProC,EAAE,GAAKsoC,GACPtoC,EAAE,GAAKuoC,GACPvoC,EAAE,GAAKwoC,GACPxoC,EAAE,GAAKyoC,GACPzoC,EAAE,GAAK0oC,GACP1oC,EAAE,GAAK2oC,GACP3oC,EAAE,GAAK4oC,GACP5oC,EAAE,GAAK6oC,GACP7oC,EAAE,GAAK8oC,GACP9oC,EAAE,IAAM+oC,GACR/oC,EAAE,IAAMgpC,GACRhpC,EAAE,IAAMipC,GACRjpC,EAAE,IAAMkpC,GACRlpC,EAAE,IAAMmpC,GACRnpC,EAAE,IAAMopC,GACRppC,EAAE,IAAMqpC,GACRrpC,EAAE,IAAMspC,GACRtpC,EAAE,IAAMupC,GACE,IAAN3pC,IACFI,EAAE,IAAMJ,EACRshC,EAAIp9B,UAECo9B,GAQT,SAAS2I,EAAUn2B,EAAMgsB,EAAKwB,GAC5BA,EAAInC,SAAWW,EAAIX,SAAWrrB,EAAKqrB,SACnCmC,EAAIp9B,OAAS4P,EAAK5P,OAAS47B,EAAI57B,OAI/B,IAFA,IAAIs9B,EAAQ,EACRwI,EAAU,EACL/2B,EAAI,EAAGA,EAAIquB,EAAIp9B,OAAS,EAAG+O,IAAK,CAGvC,IAAIwuB,EAASuI,EACbA,EAAU,EAGV,IAFA,IAAItI,EAAgB,SAARF,EACRG,EAAOr7B,KAAKsD,IAAIqJ,EAAG6sB,EAAI57B,OAAS,GAC3BsT,EAAIlR,KAAK8G,IAAI,EAAG6F,EAAIa,EAAK5P,OAAS,GAAIsT,GAAKmqB,EAAMnqB,IAAK,CAC7D,IAAI7X,EAAIsT,EAAIuE,EAGR/W,GAFoB,EAAhBqT,EAAKsrB,MAAMz/B,KACI,EAAfmgC,EAAIV,MAAM5nB,IAGd+pB,EAAS,SAAJ9gC,EAGTihC,EAAa,UADbH,EAAMA,EAAKG,EAAS,GAIpBsI,IAFAvI,GAHAA,EAAUA,GAAWhhC,EAAI,SAAa,GAAM,IAGxB8gC,IAAO,IAAO,KAEZ,GACtBE,GAAU,SAEZH,EAAIlC,MAAMnsB,GAAKyuB,EACfF,EAAQC,EACRA,EAASuI,EAQX,OANc,IAAVxI,EACFF,EAAIlC,MAAMnsB,GAAKuuB,EAEfF,EAAIp9B,SAGCo9B,EAAIgS,SAGb,SAAS1J,EAAY91B,EAAMgsB,EAAKwB,GAI9B,OAAO2I,EAASn2B,EAAMgsB,EAAKwB,GAsB7B,SAASuI,EAAM35B,EAAGoB,GAChB/R,KAAK2Q,EAAIA,EACT3Q,KAAK+R,EAAIA,EAzENhL,KAAKI,OACRi+B,EAActD,GAmDhBrC,EAAGz9B,UAAUwoC,MAAQ,SAAgBjK,EAAKwB,GACxC,IACIxuB,EAAMvT,KAAK2E,OAAS47B,EAAI57B,OAW5B,OAVoB,KAAhB3E,KAAK2E,QAAgC,KAAf47B,EAAI57B,OACtBygC,EAAYplC,KAAMugC,EAAKwB,GACpBxuB,EAAM,GACTuuB,EAAW9hC,KAAMugC,EAAKwB,GACnBxuB,EAAM,KACTm3B,EAAS1qC,KAAMugC,EAAKwB,GAEpBsI,EAAWrqC,KAAMugC,EAAKwB,IAchCuI,EAAKtoC,UAAU2oC,QAAU,SAAkBC,GAGzC,IAFA,IAAItpC,EAAI,IAAIyB,MAAM6nC,GACdvqC,EAAIo/B,EAAGz9B,UAAUqhC,WAAWuH,GAAK,EAC5BxqC,EAAI,EAAGA,EAAIwqC,EAAGxqC,IACrBkB,EAAElB,GAAKJ,KAAK6qC,OAAOzqC,EAAGC,EAAGuqC,GAG3B,OAAOtpC,GAITgpC,EAAKtoC,UAAU6oC,OAAS,SAAiBl6B,EAAGtQ,EAAGuqC,GAC7C,GAAU,IAANj6B,GAAWA,IAAMi6B,EAAI,EAAG,OAAOj6B,EAGnC,IADA,IAAIm6B,EAAK,EACA1qC,EAAI,EAAGA,EAAIC,EAAGD,IACrB0qC,IAAW,EAAJn6B,IAAWtQ,EAAID,EAAI,EAC1BuQ,IAAM,EAGR,OAAOm6B,GAKTR,EAAKtoC,UAAU+oC,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAIxqC,EAAI,EAAGA,EAAIwqC,EAAGxqC,IACrB+qC,EAAK/qC,GAAK6qC,EAAID,EAAI5qC,IAClBgrC,EAAKhrC,GAAK8qC,EAAIF,EAAI5qC,KAItBkqC,EAAKtoC,UAAU6W,UAAY,SAAoBoyB,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtEhrC,KAAK+qC,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIzoC,EAAI,EAAGA,EAAIyoC,EAAGzoC,IAAM,EAM3B,IALA,IAAI9B,EAAI8B,GAAK,EAETkpC,EAAQtkC,KAAKukC,IAAI,EAAIvkC,KAAKwkC,GAAKlrC,GAC/BmrC,EAAQzkC,KAAK0kC,IAAI,EAAI1kC,KAAKwkC,GAAKlrC,GAE1B6B,EAAI,EAAGA,EAAI0oC,EAAG1oC,GAAK7B,EAI1B,IAHA,IAAIqrC,EAASL,EACTM,EAASH,EAEJvzB,EAAI,EAAGA,EAAI9V,EAAG8V,IAAK,CAC1B,IAAI2zB,EAAKT,EAAKjpC,EAAI+V,GACd4zB,EAAKT,EAAKlpC,EAAI+V,GAEd6zB,EAAKX,EAAKjpC,EAAI+V,EAAI9V,GAClB4pC,EAAKX,EAAKlpC,EAAI+V,EAAI9V,GAElB6pC,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELb,EAAKjpC,EAAI+V,GAAK2zB,EAAKE,EACnBV,EAAKlpC,EAAI+V,GAAK4zB,EAAKE,EAEnBZ,EAAKjpC,EAAI+V,EAAI9V,GAAKypC,EAAKE,EACvBV,EAAKlpC,EAAI+V,EAAI9V,GAAK0pC,EAAKE,EAGnB9zB,IAAM5X,IACR2rC,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB1B,EAAKtoC,UAAUiqC,YAAc,SAAsBpqC,EAAGrB,GACpD,IAAIoqC,EAAqB,EAAjB7jC,KAAK8G,IAAIrN,EAAGqB,GAChBqqC,EAAU,EAAJtB,EACNxqC,EAAI,EACR,IAAKwqC,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/BxqC,IAGF,OAAO,GAAKA,EAAI,EAAI8rC,GAGtB5B,EAAKtoC,UAAUmqC,UAAY,SAAoBlB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAIxqC,EAAI,EAAGA,EAAIwqC,EAAI,EAAGxqC,IAAK,CAC9B,IAAIkB,EAAI2pC,EAAI7qC,GAEZ6qC,EAAI7qC,GAAK6qC,EAAIL,EAAIxqC,EAAI,GACrB6qC,EAAIL,EAAIxqC,EAAI,GAAKkB,EAEjBA,EAAI4pC,EAAI9qC,GAER8qC,EAAI9qC,IAAM8qC,EAAIN,EAAIxqC,EAAI,GACtB8qC,EAAIN,EAAIxqC,EAAI,IAAMkB,IAItBgpC,EAAKtoC,UAAUoqC,aAAe,SAAuBC,EAAIzB,GAEvD,IADA,IAAI3I,EAAQ,EACH7hC,EAAI,EAAGA,EAAIwqC,EAAI,EAAGxqC,IAAK,CAC9B,IAAIygC,EAAoC,KAAhC95B,KAAKmjB,MAAMmiB,EAAG,EAAIjsC,EAAI,GAAKwqC,GACjC7jC,KAAKmjB,MAAMmiB,EAAG,EAAIjsC,GAAKwqC,GACvB3I,EAEFoK,EAAGjsC,GAAS,SAAJygC,EAGNoB,EADEpB,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOwL,GAGT/B,EAAKtoC,UAAUsqC,WAAa,SAAqBD,EAAI94B,EAAK03B,EAAKL,GAE7D,IADA,IAAI3I,EAAQ,EACH7hC,EAAI,EAAGA,EAAImT,EAAKnT,IACvB6hC,GAAyB,EAARoK,EAAGjsC,GAEpB6qC,EAAI,EAAI7qC,GAAa,KAAR6hC,EAAgBA,KAAkB,GAC/CgJ,EAAI,EAAI7qC,EAAI,GAAa,KAAR6hC,EAAgBA,KAAkB,GAIrD,IAAK7hC,EAAI,EAAImT,EAAKnT,EAAIwqC,IAAKxqC,EACzB6qC,EAAI7qC,GAAK,EAGXk/B,EAAiB,IAAV2C,GACP3C,EAA6B,KAAb,KAAR2C,KAGVqI,EAAKtoC,UAAUuqC,KAAO,SAAe3B,GAEnC,IADA,IAAI4B,EAAK,IAAIzpC,MAAM6nC,GACVxqC,EAAI,EAAGA,EAAIwqC,EAAGxqC,IACrBosC,EAAGpsC,GAAK,EAGV,OAAOosC,GAGTlC,EAAKtoC,UAAUuoC,KAAO,SAAe55B,EAAGoB,EAAGgwB,GACzC,IAAI6I,EAAI,EAAI5qC,KAAKisC,YAAYt7B,EAAEhM,OAAQoN,EAAEpN,QAErCqmC,EAAMhrC,KAAK2qC,QAAQC,GAEnBhoC,EAAI5C,KAAKusC,KAAK3B,GAEdK,EAAM,IAAIloC,MAAM6nC,GAChB6B,EAAO,IAAI1pC,MAAM6nC,GACjB8B,EAAO,IAAI3pC,MAAM6nC,GAEjB+B,EAAO,IAAI5pC,MAAM6nC,GACjBgC,EAAQ,IAAI7pC,MAAM6nC,GAClBiC,EAAQ,IAAI9pC,MAAM6nC,GAElBkC,EAAO/K,EAAIlC,MACfiN,EAAKnoC,OAASimC,EAEd5qC,KAAKssC,WAAW37B,EAAEkvB,MAAOlvB,EAAEhM,OAAQsmC,EAAKL,GACxC5qC,KAAKssC,WAAWv6B,EAAE8tB,MAAO9tB,EAAEpN,OAAQgoC,EAAM/B,GAEzC5qC,KAAK6Y,UAAUoyB,EAAKroC,EAAG6pC,EAAMC,EAAM9B,EAAGI,GACtChrC,KAAK6Y,UAAU8zB,EAAM/pC,EAAGgqC,EAAOC,EAAOjC,EAAGI,GAEzC,IAAK,IAAI5qC,EAAI,EAAGA,EAAIwqC,EAAGxqC,IAAK,CAC1B,IAAI4rC,EAAKS,EAAKrsC,GAAKwsC,EAAMxsC,GAAKssC,EAAKtsC,GAAKysC,EAAMzsC,GAC9CssC,EAAKtsC,GAAKqsC,EAAKrsC,GAAKysC,EAAMzsC,GAAKssC,EAAKtsC,GAAKwsC,EAAMxsC,GAC/CqsC,EAAKrsC,GAAK4rC,EAUZ,OAPAhsC,KAAKmsC,UAAUM,EAAMC,EAAM9B,GAC3B5qC,KAAK6Y,UAAU4zB,EAAMC,EAAMI,EAAMlqC,EAAGgoC,EAAGI,GACvChrC,KAAKmsC,UAAUW,EAAMlqC,EAAGgoC,GACxB5qC,KAAKosC,aAAaU,EAAMlC,GAExB7I,EAAInC,SAAWjvB,EAAEivB,SAAW7tB,EAAE6tB,SAC9BmC,EAAIp9B,OAASgM,EAAEhM,OAASoN,EAAEpN,OACnBo9B,EAAIgS,UAIbtU,EAAGz9B,UAAUs+B,IAAM,SAAcC,GAC/B,IAAIwB,EAAM,IAAItC,EAAG,MAEjB,OADAsC,EAAIlC,MAAQ,IAAI98B,MAAM/C,KAAK2E,OAAS47B,EAAI57B,QACjC3E,KAAKwqC,MAAMjK,EAAKwB,IAIzBtC,EAAGz9B,UAAU+qC,KAAO,SAAexM,GACjC,IAAIwB,EAAM,IAAItC,EAAG,MAEjB,OADAsC,EAAIlC,MAAQ,IAAI98B,MAAM/C,KAAK2E,OAAS47B,EAAI57B,QACjC0lC,EAAWrqC,KAAMugC,EAAKwB,IAI/BtC,EAAGz9B,UAAUmF,KAAO,SAAeo5B,GACjC,OAAOvgC,KAAKuhC,QAAQiJ,MAAMjK,EAAKvgC,OAGjCy/B,EAAGz9B,UAAUm/B,MAAQ,SAAgBZ,GACnC,IAAI4gE,EAAW5gE,EAAM,EACjB4gE,IAAU5gE,GAAOA,GAErBjB,EAAsB,iBAARiB,GACdjB,EAAOiB,EAAM,UAIb,IADA,IAAI0B,EAAQ,EACH7hC,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAAK,CACpC,IAAIygC,GAAqB,EAAhB7gC,KAAK6/B,MAAMz/B,IAAUmgC,EAC1ByB,GAAU,SAAJnB,IAA0B,SAARoB,GAC5BA,IAAU,GACVA,GAAUpB,EAAI,SAAa,EAE3BoB,GAASD,IAAO,GAChBhiC,KAAK6/B,MAAMz/B,GAAU,SAAL4hC,EAQlB,OALc,IAAVC,IACFjiC,KAAK6/B,MAAMz/B,GAAK6hC,EAChBjiC,KAAK2E,UAGAw8F,EAAWnhG,KAAKikC,OAASjkC,MAGlCy/B,EAAGz9B,UAAUgrC,KAAO,SAAezM,GACjC,OAAOvgC,KAAKuhC,QAAQJ,MAAMZ,IAI5Bd,EAAGz9B,UAAUirC,IAAM,WACjB,OAAOjtC,KAAKsgC,IAAItgC,OAIlBy/B,EAAGz9B,UAAUkrC,KAAO,WAClB,OAAOltC,KAAKmH,KAAKnH,KAAKuhC,UAIxB9B,EAAGz9B,UAAUmI,IAAM,SAAco2B,GAC/B,IAAIM,EA7xCN,SAAqBN,GAGnB,IAFA,IAAIM,EAAI,IAAI99B,MAAMw9B,EAAIgD,aAEbt3B,EAAM,EAAGA,EAAM40B,EAAEl8B,OAAQsH,IAAO,CACvC,IAAIyyB,EAAOzyB,EAAM,GAAM,EACnB+4B,EAAO/4B,EAAM,GAEjB40B,EAAE50B,GAAQs0B,EAAIV,MAAMnB,KAASsG,EAAQ,EAGvC,OAAOnE,EAmxCCsM,CAAW5M,GACnB,GAAiB,IAAbM,EAAEl8B,OAAc,OAAO,IAAI86B,EAAG,GAIlC,IADA,IAAI7xB,EAAM5N,KACDI,EAAI,EAAGA,EAAIygC,EAAEl8B,QACP,IAATk8B,EAAEzgC,GADsBA,IAAKwN,EAAMA,EAAIq/B,OAI7C,KAAM7sC,EAAIygC,EAAEl8B,OACV,IAAK,IAAIu+B,EAAIt1B,EAAIq/B,MAAO7sC,EAAIygC,EAAEl8B,OAAQvE,IAAK8iC,EAAIA,EAAE+J,MAClC,IAATpM,EAAEzgC,KAENwN,EAAMA,EAAI0yB,IAAI4C,IAIlB,OAAOt1B,GAIT6xB,EAAGz9B,UAAUorC,OAAS,SAAiBrrB,GACrCud,EAAuB,iBAATvd,GAAqBA,GAAQ,GAC3C,IAGI3hB,EAHAc,EAAI6gB,EAAO,GACX5f,GAAK4f,EAAO7gB,GAAK,GACjBmsC,EAAa,WAAe,GAAKnsC,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI+gC,EAAQ,EAEZ,IAAK7hC,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAAK,CAChC,IAAIktC,EAAWttC,KAAK6/B,MAAMz/B,GAAKitC,EAC3B5sC,GAAsB,EAAhBT,KAAK6/B,MAAMz/B,IAAUktC,GAAapsC,EAC5ClB,KAAK6/B,MAAMz/B,GAAKK,EAAIwhC,EACpBA,EAAQqL,IAAc,GAAKpsC,EAGzB+gC,IACFjiC,KAAK6/B,MAAMz/B,GAAK6hC,EAChBjiC,KAAK2E,UAIT,GAAU,IAANxC,EAAS,CACX,IAAK/B,EAAIJ,KAAK2E,OAAS,EAAGvE,GAAK,EAAGA,IAChCJ,KAAK6/B,MAAMz/B,EAAI+B,GAAKnC,KAAK6/B,MAAMz/B,GAGjC,IAAKA,EAAI,EAAGA,EAAI+B,EAAG/B,IACjBJ,KAAK6/B,MAAMz/B,GAAK,EAGlBJ,KAAK2E,QAAUxC,EAGjB,OAAOnC,KAAK+zC,UAGdtU,EAAGz9B,UAAUurC,MAAQ,SAAgBxrB,GAGnC,OADAud,EAAyB,IAAlBt/B,KAAK4/B,UACL5/B,KAAKotC,OAAOrrB,IAMrB0d,EAAGz9B,UAAUohC,OAAS,SAAiBrhB,EAAMyrB,EAAMC,GAEjD,IAAIC,EADJpO,EAAuB,iBAATvd,GAAqBA,GAAQ,GAGzC2rB,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAItsC,EAAI6gB,EAAO,GACX5f,EAAI4E,KAAKsD,KAAK0X,EAAO7gB,GAAK,GAAIlB,KAAK2E,QACnCgpC,EAAO,SAAc,WAAczsC,GAAMA,EACzC0sC,EAAcH,EAMlB,GAJAC,GAAKvrC,EACLurC,EAAI3mC,KAAK8G,IAAI,EAAG6/B,GAGZE,EAAa,CACf,IAAK,IAAIxtC,EAAI,EAAGA,EAAI+B,EAAG/B,IACrBwtC,EAAY/N,MAAMz/B,GAAKJ,KAAK6/B,MAAMz/B,GAEpCwtC,EAAYjpC,OAASxC,EAGvB,GAAU,IAANA,QAEG,GAAInC,KAAK2E,OAASxC,EAEvB,IADAnC,KAAK2E,QAAUxC,EACV/B,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAC3BJ,KAAK6/B,MAAMz/B,GAAKJ,KAAK6/B,MAAMz/B,EAAI+B,QAGjCnC,KAAK6/B,MAAM,GAAK,EAChB7/B,KAAK2E,OAAS,EAGhB,IAAIs9B,EAAQ,EACZ,IAAK7hC,EAAIJ,KAAK2E,OAAS,EAAGvE,GAAK,IAAgB,IAAV6hC,GAAe7hC,GAAKstC,GAAIttC,IAAK,CAChE,IAAI8gC,EAAuB,EAAhBlhC,KAAK6/B,MAAMz/B,GACtBJ,KAAK6/B,MAAMz/B,GAAM6hC,GAAU,GAAK/gC,EAAOggC,IAAShgC,EAChD+gC,EAAQf,EAAOyM,EAajB,OATIC,GAAyB,IAAV3L,IACjB2L,EAAY/N,MAAM+N,EAAYjpC,UAAYs9B,GAGxB,IAAhBjiC,KAAK2E,SACP3E,KAAK6/B,MAAM,GAAK,EAChB7/B,KAAK2E,OAAS,GAGT3E,KAAK+zC,UAGdtU,EAAGz9B,UAAU6rC,MAAQ,SAAgB9rB,EAAMyrB,EAAMC,GAG/C,OADAnO,EAAyB,IAAlBt/B,KAAK4/B,UACL5/B,KAAKojC,OAAOrhB,EAAMyrB,EAAMC,IAIjChO,EAAGz9B,UAAU8rC,KAAO,SAAe/rB,GACjC,OAAO/hB,KAAKuhC,QAAQgM,MAAMxrB,IAG5B0d,EAAGz9B,UAAU+rC,MAAQ,SAAgBhsB,GACnC,OAAO/hB,KAAKuhC,QAAQ6L,OAAOrrB,IAI7B0d,EAAGz9B,UAAUgsC,KAAO,SAAejsB,GACjC,OAAO/hB,KAAKuhC,QAAQsM,MAAM9rB,IAG5B0d,EAAGz9B,UAAUisC,MAAQ,SAAgBlsB,GACnC,OAAO/hB,KAAKuhC,QAAQ6B,OAAOrhB,IAI7B0d,EAAGz9B,UAAU+hC,MAAQ,SAAgB93B,GACnCqzB,EAAsB,iBAARrzB,GAAoBA,GAAO,GACzC,IAAI/K,EAAI+K,EAAM,GACV9J,GAAK8J,EAAM/K,GAAK,GAChBgiC,EAAI,GAAKhiC,EAGb,QAAIlB,KAAK2E,QAAUxC,OAGXnC,KAAK6/B,MAAM19B,GAEL+gC,IAIhBzD,EAAGz9B,UAAUksC,OAAS,SAAiBnsB,GACrCud,EAAuB,iBAATvd,GAAqBA,GAAQ,GAC3C,IAAI7gB,EAAI6gB,EAAO,GACX5f,GAAK4f,EAAO7gB,GAAK,GAIrB,GAFAo+B,EAAyB,IAAlBt/B,KAAK4/B,SAAgB,2CAExB5/B,KAAK2E,QAAUxC,EACjB,OAAOnC,KAQT,GALU,IAANkB,GACFiB,IAEFnC,KAAK2E,OAASoC,KAAKsD,IAAIlI,EAAGnC,KAAK2E,QAErB,IAANzD,EAAS,CACX,IAAIysC,EAAO,SAAc,WAAczsC,GAAMA,EAC7ClB,KAAK6/B,MAAM7/B,KAAK2E,OAAS,IAAMgpC,EAGjC,OAAO3tC,KAAK+zC,UAIdtU,EAAGz9B,UAAUmsC,MAAQ,SAAgBpsB,GACnC,OAAO/hB,KAAKuhC,QAAQ2M,OAAOnsB,IAI7B0d,EAAGz9B,UAAU6hC,MAAQ,SAAgBtD,GAGnC,OAFAjB,EAAsB,iBAARiB,GACdjB,EAAOiB,EAAM,UACTA,EAAM,EAAUvgC,KAAKouC,OAAO7N,GAGV,IAAlBvgC,KAAK4/B,SACa,IAAhB5/B,KAAK2E,SAAiC,EAAhB3E,KAAK6/B,MAAM,KAAWU,GAC9CvgC,KAAK6/B,MAAM,GAAKU,GAAuB,EAAhBvgC,KAAK6/B,MAAM,IAClC7/B,KAAK4/B,SAAW,EACT5/B,OAGTA,KAAK4/B,SAAW,EAChB5/B,KAAKouC,MAAM7N,GACXvgC,KAAK4/B,SAAW,EACT5/B,MAIFA,KAAKohC,OAAOb,IAGrBd,EAAGz9B,UAAUo/B,OAAS,SAAiBb,GACrCvgC,KAAK6/B,MAAM,IAAMU,EAGjB,IAAK,IAAIngC,EAAI,EAAGA,EAAIJ,KAAK2E,QAAU3E,KAAK6/B,MAAMz/B,IAAM,SAAWA,IAC7DJ,KAAK6/B,MAAMz/B,IAAM,SACbA,IAAMJ,KAAK2E,OAAS,EACtB3E,KAAK6/B,MAAMz/B,EAAI,GAAK,EAEpBJ,KAAK6/B,MAAMz/B,EAAI,KAKnB,OAFAJ,KAAK2E,OAASoC,KAAK8G,IAAI7N,KAAK2E,OAAQvE,EAAI,GAEjCJ,MAITy/B,EAAGz9B,UAAUosC,MAAQ,SAAgB7N,GAGnC,GAFAjB,EAAsB,iBAARiB,GACdjB,EAAOiB,EAAM,UACTA,EAAM,EAAG,OAAOvgC,KAAK6jC,OAAOtD,GAEhC,GAAsB,IAAlBvgC,KAAK4/B,SAIP,OAHA5/B,KAAK4/B,SAAW,EAChB5/B,KAAK6jC,MAAMtD,GACXvgC,KAAK4/B,SAAW,EACT5/B,KAKT,GAFAA,KAAK6/B,MAAM,IAAMU,EAEG,IAAhBvgC,KAAK2E,QAAgB3E,KAAK6/B,MAAM,GAAK,EACvC7/B,KAAK6/B,MAAM,IAAM7/B,KAAK6/B,MAAM,GAC5B7/B,KAAK4/B,SAAW,OAGhB,IAAK,IAAIx/B,EAAI,EAAGA,EAAIJ,KAAK2E,QAAU3E,KAAK6/B,MAAMz/B,GAAK,EAAGA,IACpDJ,KAAK6/B,MAAMz/B,IAAM,SACjBJ,KAAK6/B,MAAMz/B,EAAI,IAAM,EAIzB,OAAOJ,KAAK+zC,UAGdtU,EAAGz9B,UAAUqsC,KAAO,SAAe9N,GACjC,OAAOvgC,KAAKuhC,QAAQsC,MAAMtD,IAG5Bd,EAAGz9B,UAAUssC,KAAO,SAAe/N,GACjC,OAAOvgC,KAAKuhC,QAAQ6M,MAAM7N,IAG5Bd,EAAGz9B,UAAUusC,KAAO,WAGlB,OAFAvuC,KAAK4/B,SAAW,EAET5/B,MAGTy/B,EAAGz9B,UAAU8P,IAAM,WACjB,OAAO9R,KAAKuhC,QAAQgN,QAGtB9O,EAAGz9B,UAAUwsC,aAAe,SAAuBjO,EAAKD,EAAKmO,GAC3D,IACIruC,EAIAygC,EALAttB,EAAMgtB,EAAI57B,OAAS8pC,EAGvBzuC,KAAKwhC,QAAQjuB,GAGb,IAAI0uB,EAAQ,EACZ,IAAK7hC,EAAI,EAAGA,EAAImgC,EAAI57B,OAAQvE,IAAK,CAC/BygC,GAA6B,EAAxB7gC,KAAK6/B,MAAMz/B,EAAIquC,IAAcxM,EAClC,IAAIxiB,GAAwB,EAAf8gB,EAAIV,MAAMz/B,IAAUkgC,EAEjC2B,IADApB,GAAa,SAARphB,IACS,KAAQA,EAAQ,SAAa,GAC3Czf,KAAK6/B,MAAMz/B,EAAIquC,GAAa,SAAJ5N,EAE1B,KAAOzgC,EAAIJ,KAAK2E,OAAS8pC,EAAOruC,IAE9B6hC,GADApB,GAA6B,EAAxB7gC,KAAK6/B,MAAMz/B,EAAIquC,IAAcxM,IACrB,GACbjiC,KAAK6/B,MAAMz/B,EAAIquC,GAAa,SAAJ5N,EAG1B,GAAc,IAAVoB,EAAa,OAAOjiC,KAAK+zC,SAK7B,IAFAzU,GAAkB,IAAX2C,GACPA,EAAQ,EACH7hC,EAAI,EAAGA,EAAIJ,KAAK2E,OAAQvE,IAE3B6hC,GADApB,IAAsB,EAAhB7gC,KAAK6/B,MAAMz/B,IAAU6hC,IACd,GACbjiC,KAAK6/B,MAAMz/B,GAAS,SAAJygC,EAIlB,OAFA7gC,KAAK4/B,SAAW,EAET5/B,KAAK+zC,UAGdtU,EAAGz9B,UAAU0sC,SAAW,SAAmBnO,EAAKh/B,GAC9C,IAAIktC,GAAQzuC,KAAK2E,OAAS47B,EAAI57B,QAE1B7B,EAAI9C,KAAKuhC,QACT78B,EAAI67B,EAGJoO,EAA8B,EAAxBjqC,EAAEm7B,MAAMn7B,EAAEC,OAAS,GAGf,KADd8pC,EAAQ,GADMzuC,KAAKqjC,WAAWsL,MAG5BjqC,EAAIA,EAAEqpC,MAAMU,GACZ3rC,EAAEsqC,OAAOqB,GACTE,EAA8B,EAAxBjqC,EAAEm7B,MAAMn7B,EAAEC,OAAS,IAI3B,IACIu+B,EADA1iC,EAAIsC,EAAE6B,OAASD,EAAEC,OAGrB,GAAa,QAATpD,EAAgB,EAClB2hC,EAAI,IAAIzD,EAAG,OACT96B,OAASnE,EAAI,EACf0iC,EAAErD,MAAQ,IAAI98B,MAAMmgC,EAAEv+B,QACtB,IAAK,IAAIvE,EAAI,EAAGA,EAAI8iC,EAAEv+B,OAAQvE,IAC5B8iC,EAAErD,MAAMz/B,GAAK,EAIjB,IAAIwuC,EAAO9rC,EAAEy+B,QAAQiN,aAAa9pC,EAAG,EAAGlE,GAClB,IAAlBouC,EAAKhP,WACP98B,EAAI8rC,EACA1L,IACFA,EAAErD,MAAMr/B,GAAK,IAIjB,IAAK,IAAIyX,EAAIzX,EAAI,EAAGyX,GAAK,EAAGA,IAAK,CAC/B,IAAI42B,EAAmC,UAAL,EAAxB/rC,EAAE+8B,MAAMn7B,EAAEC,OAASsT,KACE,EAA5BnV,EAAE+8B,MAAMn7B,EAAEC,OAASsT,EAAI,IAO1B,IAHA42B,EAAK9nC,KAAKsD,IAAKwkC,EAAKF,EAAO,EAAG,UAE9B7rC,EAAE0rC,aAAa9pC,EAAGmqC,EAAI52B,GACA,IAAfnV,EAAE88B,UACPiP,IACA/rC,EAAE88B,SAAW,EACb98B,EAAE0rC,aAAa9pC,EAAG,EAAGuT,GAChBnV,EAAEsI,WACLtI,EAAE88B,UAAY,GAGdsD,IACFA,EAAErD,MAAM5nB,GAAK42B,GAajB,OAVI3L,GACFA,EAAE6Q,SAEJjxC,EAAEixC,SAGW,QAATxyC,GAA4B,IAAVktC,GACpB3rC,EAAEsgC,OAAOqL,GAGJ,CACLjjC,IAAK03B,GAAK,KACV/nB,IAAKrY,IAQT28B,EAAGz9B,UAAU8sC,OAAS,SAAiBvO,EAAKh/B,EAAMwtC,GAGhD,OAFAzP,GAAQiB,EAAIn1B,UAERpL,KAAKoL,SACA,CACLI,IAAK,IAAIi0B,EAAG,GACZtkB,IAAK,IAAIskB,EAAG,IAKM,IAAlBz/B,KAAK4/B,UAAmC,IAAjBW,EAAIX,UAC7BhyB,EAAM5N,KAAKmkC,MAAM2K,OAAOvO,EAAKh/B,GAEhB,QAATA,IACFiK,EAAMoC,EAAIpC,IAAI24B,OAGH,QAAT5iC,IACF4Z,EAAMvN,EAAIuN,IAAIgpB,MACV4K,GAA6B,IAAjB5zB,EAAIykB,UAClBzkB,EAAI8pB,KAAK1E,IAIN,CACL/0B,IAAKA,EACL2P,IAAKA,IAIa,IAAlBnb,KAAK4/B,UAAmC,IAAjBW,EAAIX,UAC7BhyB,EAAM5N,KAAK8uC,OAAOvO,EAAI4D,MAAO5iC,GAEhB,QAATA,IACFiK,EAAMoC,EAAIpC,IAAI24B,OAGT,CACL34B,IAAKA,EACL2P,IAAKvN,EAAIuN,MAI0B,IAAlCnb,KAAK4/B,SAAWW,EAAIX,WACvBhyB,EAAM5N,KAAKmkC,MAAM2K,OAAOvO,EAAI4D,MAAO5iC,GAEtB,QAATA,IACF4Z,EAAMvN,EAAIuN,IAAIgpB,MACV4K,GAA6B,IAAjB5zB,EAAIykB,UAClBzkB,EAAI+pB,KAAK3E,IAIN,CACL/0B,IAAKoC,EAAIpC,IACT2P,IAAKA,IAOLolB,EAAI57B,OAAS3E,KAAK2E,QAAU3E,KAAKwgC,IAAID,GAAO,EACvC,CACL/0B,IAAK,IAAIi0B,EAAG,GACZtkB,IAAKnb,MAKU,IAAfugC,EAAI57B,OACO,QAATpD,EACK,CACLiK,IAAKxL,KAAKgvC,KAAKzO,EAAIV,MAAM,IACzB1kB,IAAK,MAII,QAAT5Z,EACK,CACLiK,IAAK,KACL2P,IAAK,IAAIskB,EAAGz/B,KAAK+gG,MAAMxgE,EAAIV,MAAM,MAI9B,CACLr0B,IAAKxL,KAAKgvC,KAAKzO,EAAIV,MAAM,IACzB1kB,IAAK,IAAIskB,EAAGz/B,KAAK+gG,MAAMxgE,EAAIV,MAAM,MAI9B7/B,KAAK0uC,SAASnO,EAAKh/B,GAlF1B,IAAIiK,EAAK2P,EAAKvN,GAsFhB6xB,EAAGz9B,UAAUwJ,IAAM,SAAc+0B,GAC/B,OAAOvgC,KAAK8uC,OAAOvO,EAAK,OAAO,GAAO/0B,KAIxCi0B,EAAGz9B,UAAUmZ,IAAM,SAAcolB,GAC/B,OAAOvgC,KAAK8uC,OAAOvO,EAAK,OAAO,GAAOplB,KAGxCskB,EAAGz9B,UAAUitC,KAAO,SAAe1O,GACjC,OAAOvgC,KAAK8uC,OAAOvO,EAAK,OAAO,GAAMplB,KAIvCskB,EAAGz9B,UAAUktC,SAAW,SAAmB3O,GACzC,IAAI4O,EAAKnvC,KAAK8uC,OAAOvO,GAGrB,GAAI4O,EAAGh0B,IAAI/P,SAAU,OAAO+jC,EAAG3jC,IAE/B,IAAI2P,EAA0B,IAApBg0B,EAAG3jC,IAAIo0B,SAAiBuP,EAAGh0B,IAAI+pB,KAAK3E,GAAO4O,EAAGh0B,IAEpDi0B,EAAO7O,EAAI0N,MAAM,GACjBoB,EAAK9O,EAAI4C,MAAM,GACf3C,EAAMrlB,EAAIqlB,IAAI4O,GAGlB,OAAI5O,EAAM,GAAa,IAAP6O,GAAoB,IAAR7O,EAAmB2O,EAAG3jC,IAGvB,IAApB2jC,EAAG3jC,IAAIo0B,SAAiBuP,EAAG3jC,IAAI4iC,MAAM,GAAKe,EAAG3jC,IAAIq4B,MAAM,IAGhEpE,EAAGz9B,UAAU++F,MAAQ,SAAgBxgE,GACnC,IAAI4gE,EAAW5gE,EAAM,EACjB4gE,IAAU5gE,GAAOA,GAErBjB,EAAOiB,GAAO,UAId,IAHA,IAAIr+B,GAAK,GAAK,IAAMq+B,EAEhBlS,EAAM,EACDjuB,EAAIJ,KAAK2E,OAAS,EAAGvE,GAAK,EAAGA,IACpCiuB,GAAOnsB,EAAImsB,GAAuB,EAAhBruB,KAAK6/B,MAAMz/B,KAAWmgC,EAG1C,OAAO4gE,GAAY9yE,EAAMA,GAI3BoR,EAAGz9B,UAAUwgC,KAAO,SAAejC,GACjC,OAAOvgC,KAAK+gG,MAAMxgE,IAIpBd,EAAGz9B,UAAUygC,MAAQ,SAAgBlC,GACnC,IAAI4gE,EAAW5gE,EAAM,EACjB4gE,IAAU5gE,GAAOA,GAErBjB,EAAOiB,GAAO,UAGd,IADA,IAAI0B,EAAQ,EACH7hC,EAAIJ,KAAK2E,OAAS,EAAGvE,GAAK,EAAGA,IAAK,CACzC,IAAIygC,GAAqB,EAAhB7gC,KAAK6/B,MAAMz/B,IAAkB,SAAR6hC,EAC9BjiC,KAAK6/B,MAAMz/B,GAAMygC,EAAIN,EAAO,EAC5B0B,EAAQpB,EAAIN,EAId,OADAvgC,KAAK+zC,SACEotD,EAAWnhG,KAAKikC,OAASjkC,MAGlCy/B,EAAGz9B,UAAUgtC,KAAO,SAAezO,GACjC,OAAOvgC,KAAKuhC,QAAQkB,MAAMlC,IAG5Bd,EAAGz9B,UAAUstC,KAAO,SAAeptC,GACjCo9B,EAAsB,IAAfp9B,EAAE09B,UACTN,GAAQp9B,EAAEkJ,UAEV,IAAIuF,EAAI3Q,KACJ+R,EAAI7P,EAAEq/B,QAGR5wB,EADiB,IAAfA,EAAEivB,SACAjvB,EAAEs+B,KAAK/sC,GAEPyO,EAAE4wB,QAaR,IATA,IAAIgO,EAAI,IAAI9P,EAAG,GACX+P,EAAI,IAAI/P,EAAG,GAGXgQ,EAAI,IAAIhQ,EAAG,GACXiQ,EAAI,IAAIjQ,EAAG,GAEXkQ,EAAI,EAEDh/B,EAAEi/B,UAAY79B,EAAE69B,UACrBj/B,EAAEyyB,OAAO,GACTrxB,EAAEqxB,OAAO,KACPuM,EAMJ,IAHA,IAAIE,EAAK99B,EAAEwvB,QACPuO,EAAKn/B,EAAE4wB,SAEH5wB,EAAEvF,UAAU,CAClB,IAAK,IAAIhL,EAAI,EAAG2vC,EAAK,EAAyB,IAArBp/B,EAAEkvB,MAAM,GAAKkQ,IAAa3vC,EAAI,KAAMA,EAAG2vC,IAAO,GACvE,GAAI3vC,EAAI,EAEN,IADAuQ,EAAEyyB,OAAOhjC,GACFA,KAAM,IACPmvC,EAAErjC,SAAWsjC,EAAEtjC,WACjBqjC,EAAEtK,KAAK4K,GACPL,EAAEtK,KAAK4K,IAGTP,EAAEnM,OAAO,GACToM,EAAEpM,OAAO,GAIb,IAAK,IAAInrB,EAAI,EAAG+3B,EAAK,EAAyB,IAArBj+B,EAAE8tB,MAAM,GAAKmQ,IAAa/3B,EAAI,KAAMA,EAAG+3B,IAAO,GACvE,GAAI/3B,EAAI,EAEN,IADAlG,EAAEqxB,OAAOnrB,GACFA,KAAM,IACPw3B,EAAEvjC,SAAWwjC,EAAExjC,WACjBujC,EAAExK,KAAK4K,GACPH,EAAExK,KAAK4K,IAGTL,EAAErM,OAAO,GACTsM,EAAEtM,OAAO,GAITzyB,EAAE6vB,IAAIzuB,IAAM,GACdpB,EAAEu0B,KAAKnzB,GACPw9B,EAAErK,KAAKuK,GACPD,EAAEtK,KAAKwK,KAEP39B,EAAEmzB,KAAKv0B,GACP8+B,EAAEvK,KAAKqK,GACPG,EAAExK,KAAKsK,IAIX,MAAO,CACL1sC,EAAG2sC,EACH/qC,EAAGgrC,EACHO,IAAKl+B,EAAEq7B,OAAOuC,KAOlBlQ,EAAGz9B,UAAUkuC,OAAS,SAAiBhuC,GACrCo9B,EAAsB,IAAfp9B,EAAE09B,UACTN,GAAQp9B,EAAEkJ,UAEV,IAAItI,EAAI9C,KACJ0E,EAAIxC,EAAEq/B,QAGRz+B,EADiB,IAAfA,EAAE88B,SACA98B,EAAEmsC,KAAK/sC,GAEPY,EAAEy+B,QAQR,IALA,IAuCI3zB,EAvCAuiC,EAAK,IAAI1Q,EAAG,GACZ/sB,EAAK,IAAI+sB,EAAG,GAEZtxB,EAAQzJ,EAAE68B,QAEPz+B,EAAEstC,KAAK,GAAK,GAAK1rC,EAAE0rC,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIhwC,EAAI,EAAG2vC,EAAK,EAAyB,IAArBjtC,EAAE+8B,MAAM,GAAKkQ,IAAa3vC,EAAI,KAAMA,EAAG2vC,IAAO,GACvE,GAAI3vC,EAAI,EAEN,IADA0C,EAAEsgC,OAAOhjC,GACFA,KAAM,GACP+vC,EAAGjkC,SACLikC,EAAGlL,KAAK92B,GAGVgiC,EAAG/M,OAAO,GAId,IAAK,IAAInrB,EAAI,EAAG+3B,EAAK,EAAyB,IAArBtrC,EAAEm7B,MAAM,GAAKmQ,IAAa/3B,EAAI,KAAMA,EAAG+3B,IAAO,GACvE,GAAI/3B,EAAI,EAEN,IADAvT,EAAE0+B,OAAOnrB,GACFA,KAAM,GACPvF,EAAGxG,SACLwG,EAAGuyB,KAAK92B,GAGVuE,EAAG0wB,OAAO,GAIVtgC,EAAE09B,IAAI97B,IAAM,GACd5B,EAAEoiC,KAAKxgC,GACPyrC,EAAGjL,KAAKxyB,KAERhO,EAAEwgC,KAAKpiC,GACP4P,EAAGwyB,KAAKiL,IAeZ,OATEviC,EADgB,IAAd9K,EAAEstC,KAAK,GACHD,EAEAz9B,GAGA09B,KAAK,GAAK,GAChBxiC,EAAIq3B,KAAK/iC,GAGJ0L,GAGT6xB,EAAGz9B,UAAUiuC,IAAM,SAAc1P,GAC/B,GAAIvgC,KAAKoL,SAAU,OAAOm1B,EAAIzuB,MAC9B,GAAIyuB,EAAIn1B,SAAU,OAAOpL,KAAK8R,MAE9B,IAAIhP,EAAI9C,KAAKuhC,QACT78B,EAAI67B,EAAIgB,QACZz+B,EAAE88B,SAAW,EACbl7B,EAAEk7B,SAAW,EAGb,IAAK,IAAI6O,EAAQ,EAAG3rC,EAAE8sC,UAAYlrC,EAAEkrC,SAAUnB,IAC5C3rC,EAAEsgC,OAAO,GACT1+B,EAAE0+B,OAAO,GAGX,OAAG,CACD,KAAOtgC,EAAE8sC,UACP9sC,EAAEsgC,OAAO,GAEX,KAAO1+B,EAAEkrC,UACPlrC,EAAE0+B,OAAO,GAGX,IAAIliC,EAAI4B,EAAE09B,IAAI97B,GACd,GAAIxD,EAAI,EAAG,CAET,IAAII,EAAIwB,EACRA,EAAI4B,EACJA,EAAIpD,OACC,GAAU,IAANJ,GAAyB,IAAdwD,EAAE0rC,KAAK,GAC3B,MAGFttC,EAAEoiC,KAAKxgC,GAGT,OAAOA,EAAE0oC,OAAOqB,IAIlBhP,EAAGz9B,UAAUquC,KAAO,SAAe9P,GACjC,OAAOvgC,KAAKsvC,KAAK/O,GAAKz9B,EAAEmsC,KAAK1O,IAG/Bd,EAAGz9B,UAAU4tC,OAAS,WACpB,OAA+B,IAAP,EAAhB5vC,KAAK6/B,MAAM,KAGrBJ,EAAGz9B,UAAUkK,MAAQ,WACnB,OAA+B,IAAP,EAAhBlM,KAAK6/B,MAAM,KAIrBJ,EAAGz9B,UAAUmhC,MAAQ,SAAgB5C,GACnC,OAAOvgC,KAAK6/B,MAAM,GAAKU,GAIzBd,EAAGz9B,UAAUsuC,MAAQ,SAAgBrkC,GACnCqzB,EAAsB,iBAARrzB,GACd,IAAI/K,EAAI+K,EAAM,GACV9J,GAAK8J,EAAM/K,GAAK,GAChBgiC,EAAI,GAAKhiC,EAGb,GAAIlB,KAAK2E,QAAUxC,EAGjB,OAFAnC,KAAKwhC,QAAQr/B,EAAI,GACjBnC,KAAK6/B,MAAM19B,IAAM+gC,EACVljC,KAKT,IADA,IAAIiiC,EAAQiB,EACH9iC,EAAI+B,EAAa,IAAV8/B,GAAe7hC,EAAIJ,KAAK2E,OAAQvE,IAAK,CACnD,IAAIygC,EAAoB,EAAhB7gC,KAAK6/B,MAAMz/B,GAEnB6hC,GADApB,GAAKoB,KACS,GACdpB,GAAK,SACL7gC,KAAK6/B,MAAMz/B,GAAKygC,EAMlB,OAJc,IAAVoB,IACFjiC,KAAK6/B,MAAMz/B,GAAK6hC,EAChBjiC,KAAK2E,UAEA3E,MAGTy/B,EAAGz9B,UAAUoJ,OAAS,WACpB,OAAuB,IAAhBpL,KAAK2E,QAAkC,IAAlB3E,KAAK6/B,MAAM,IAGzCJ,EAAGz9B,UAAUouC,KAAO,SAAe7P,GACjC,IAOI3yB,EAPAgyB,EAAWW,EAAM,EAErB,GAAsB,IAAlBvgC,KAAK4/B,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5/B,KAAK4/B,UAAkBA,EAAU,OAAO,EAK5C,GAHA5/B,KAAK+zC,SAGD/zC,KAAK2E,OAAS,EAChBiJ,EAAM,MACD,CACDgyB,IACFW,GAAOA,GAGTjB,EAAOiB,GAAO,SAAW,qBAEzB,IAAIM,EAAoB,EAAhB7gC,KAAK6/B,MAAM,GACnBjyB,EAAMizB,IAAMN,EAAM,EAAIM,EAAIN,GAAO,EAAI,EAEvC,OAAsB,IAAlBvgC,KAAK4/B,SAA8B,GAANhyB,EAC1BA,GAOT6xB,EAAGz9B,UAAUw+B,IAAM,SAAcD,GAC/B,GAAsB,IAAlBvgC,KAAK4/B,UAAmC,IAAjBW,EAAIX,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5/B,KAAK4/B,UAAmC,IAAjBW,EAAIX,SAAgB,OAAO,EAEtD,IAAIhyB,EAAM5N,KAAKuwC,KAAKhQ,GACpB,OAAsB,IAAlBvgC,KAAK4/B,SAA8B,GAANhyB,EAC1BA,GAIT6xB,EAAGz9B,UAAUuuC,KAAO,SAAehQ,GAEjC,GAAIvgC,KAAK2E,OAAS47B,EAAI57B,OAAQ,OAAO,EACrC,GAAI3E,KAAK2E,OAAS47B,EAAI57B,OAAQ,OAAQ,EAGtC,IADA,IAAIiJ,EAAM,EACDxN,EAAIJ,KAAK2E,OAAS,EAAGvE,GAAK,EAAGA,IAAK,CACzC,IAAI0C,EAAoB,EAAhB9C,KAAK6/B,MAAMz/B,GACfsE,EAAmB,EAAf67B,EAAIV,MAAMz/B,GAElB,GAAI0C,IAAM4B,EAAV,CACI5B,EAAI4B,EACNkJ,GAAO,EACE9K,EAAI4B,IACbkJ,EAAM,GAER,OAEF,OAAOA,GAGT6xB,EAAGz9B,UAAUwuC,IAAM,SAAcjQ,GAC/B,OAA0B,IAAnBvgC,KAAKowC,KAAK7P,IAGnBd,EAAGz9B,UAAUyuC,GAAK,SAAalQ,GAC7B,OAAyB,IAAlBvgC,KAAKwgC,IAAID,IAGlBd,EAAGz9B,UAAU0uC,KAAO,SAAenQ,GACjC,OAAOvgC,KAAKowC,KAAK7P,IAAQ,GAG3Bd,EAAGz9B,UAAU2uC,IAAM,SAAcpQ,GAC/B,OAAOvgC,KAAKwgC,IAAID,IAAQ,GAG1Bd,EAAGz9B,UAAU4uC,IAAM,SAAcrQ,GAC/B,OAA2B,IAApBvgC,KAAKowC,KAAK7P,IAGnBd,EAAGz9B,UAAU6uC,GAAK,SAAatQ,GAC7B,OAA0B,IAAnBvgC,KAAKwgC,IAAID,IAGlBd,EAAGz9B,UAAU8uC,KAAO,SAAevQ,GACjC,OAAOvgC,KAAKowC,KAAK7P,IAAQ,GAG3Bd,EAAGz9B,UAAU+uC,IAAM,SAAcxQ,GAC/B,OAAOvgC,KAAKwgC,IAAID,IAAQ,GAG1Bd,EAAGz9B,UAAUgvC,IAAM,SAAczQ,GAC/B,OAA0B,IAAnBvgC,KAAKowC,KAAK7P,IAGnBd,EAAGz9B,UAAUivC,GAAK,SAAa1Q,GAC7B,OAAyB,IAAlBvgC,KAAKwgC,IAAID,IAOlBd,EAAGK,IAAM,SAAcS,GACrB,OAAO,IAAI2Q,EAAI3Q,IAGjBd,EAAGz9B,UAAUmvC,MAAQ,SAAgBC,GAGnC,OAFA9R,GAAQt/B,KAAK8/B,IAAK,yCAClBR,EAAyB,IAAlBt/B,KAAK4/B,SAAgB,iCACrBwR,EAAIC,UAAUrxC,MAAMsxC,UAAUF,IAGvC3R,EAAGz9B,UAAUuvC,QAAU,WAErB,OADAjS,EAAOt/B,KAAK8/B,IAAK,wDACV9/B,KAAK8/B,IAAI0R,YAAYxxC,OAG9By/B,EAAGz9B,UAAUsvC,UAAY,SAAoBF,GAE3C,OADApxC,KAAK8/B,IAAMsR,EACJpxC,MAGTy/B,EAAGz9B,UAAUyvC,SAAW,SAAmBL,GAEzC,OADA9R,GAAQt/B,KAAK8/B,IAAK,yCACX9/B,KAAKsxC,UAAUF,IAGxB3R,EAAGz9B,UAAU0vC,OAAS,SAAiBnR,GAErC,OADAjB,EAAOt/B,KAAK8/B,IAAK,sCACV9/B,KAAK8/B,IAAIr1B,IAAIzK,KAAMugC,IAG5Bd,EAAGz9B,UAAU2vC,QAAU,SAAkBpR,GAEvC,OADAjB,EAAOt/B,KAAK8/B,IAAK,uCACV9/B,KAAK8/B,IAAImF,KAAKjlC,KAAMugC,IAG7Bd,EAAGz9B,UAAU4vC,OAAS,SAAiBrR,GAErC,OADAjB,EAAOt/B,KAAK8/B,IAAK,sCACV9/B,KAAK8/B,IAAIqF,IAAInlC,KAAMugC,IAG5Bd,EAAGz9B,UAAU6vC,QAAU,SAAkBtR,GAEvC,OADAjB,EAAOt/B,KAAK8/B,IAAK,uCACV9/B,KAAK8/B,IAAIoF,KAAKllC,KAAMugC,IAG7Bd,EAAGz9B,UAAU8vC,OAAS,SAAiBvR,GAErC,OADAjB,EAAOt/B,KAAK8/B,IAAK,sCACV9/B,KAAK8/B,IAAIiS,IAAI/xC,KAAMugC,IAG5Bd,EAAGz9B,UAAUgwC,OAAS,SAAiBzR,GAGrC,OAFAjB,EAAOt/B,KAAK8/B,IAAK,sCACjB9/B,KAAK8/B,IAAImS,SAASjyC,KAAMugC,GACjBvgC,KAAK8/B,IAAIQ,IAAItgC,KAAMugC,IAG5Bd,EAAGz9B,UAAUkwC,QAAU,SAAkB3R,GAGvC,OAFAjB,EAAOt/B,KAAK8/B,IAAK,sCACjB9/B,KAAK8/B,IAAImS,SAASjyC,KAAMugC,GACjBvgC,KAAK8/B,IAAI34B,KAAKnH,KAAMugC,IAG7Bd,EAAGz9B,UAAUmwC,OAAS,WAGpB,OAFA7S,EAAOt/B,KAAK8/B,IAAK,sCACjB9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAImN,IAAIjtC,OAGtBy/B,EAAGz9B,UAAUqwC,QAAU,WAGrB,OAFA/S,EAAOt/B,KAAK8/B,IAAK,uCACjB9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAIoN,KAAKltC,OAIvBy/B,EAAGz9B,UAAUswC,QAAU,WAGrB,OAFAhT,EAAOt/B,KAAK8/B,IAAK,uCACjB9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAIruB,KAAKzR,OAGvBy/B,EAAGz9B,UAAUuwC,QAAU,WAGrB,OAFAjT,EAAOt/B,KAAK8/B,IAAK,uCACjB9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAIuQ,KAAKrwC,OAIvBy/B,EAAGz9B,UAAUwwC,OAAS,WAGpB,OAFAlT,EAAOt/B,KAAK8/B,IAAK,sCACjB9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAIqE,IAAInkC,OAGtBy/B,EAAGz9B,UAAUywC,OAAS,SAAiBlS,GAGrC,OAFAjB,EAAOt/B,KAAK8/B,MAAQS,EAAIT,IAAK,qBAC7B9/B,KAAK8/B,IAAIsS,SAASpyC,MACXA,KAAK8/B,IAAI31B,IAAInK,KAAMugC,IAI5B,IAAImS,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQpyC,EAAMuB,GAErBlC,KAAKW,KAAOA,EACZX,KAAKkC,EAAI,IAAIu9B,EAAGv9B,EAAG,IACnBlC,KAAK6B,EAAI7B,KAAKkC,EAAEqhC,YAChBvjC,KAAK0T,EAAI,IAAI+rB,EAAG,GAAG2N,OAAOptC,KAAK6B,GAAGqjC,KAAKllC,KAAKkC,GAE5ClC,KAAK4d,IAAM5d,KAAKgzC,OAiDlB,SAASC,IACPF,EAAOxyC,KACLP,KACA,OACA,2EA+DJ,SAASkzC,IACPH,EAAOxyC,KACLP,KACA,OACA,kEAIJ,SAASmzC,IACPJ,EAAOxyC,KACLP,KACA,OACA,yDAIJ,SAASozC,IAEPL,EAAOxyC,KACLP,KACA,QACA,uEA8CJ,SAASkxC,EAAK1wC,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6yC,EAAQ5T,EAAG6T,OAAO9yC,GACtBR,KAAKQ,EAAI6yC,EAAMnxC,EACflC,KAAKqzC,MAAQA,OAEb/T,EAAO9+B,EAAEgwC,IAAI,GAAI,kCACjBxwC,KAAKQ,EAAIA,EACTR,KAAKqzC,MAAQ,KAoOjB,SAASE,EAAM/yC,GACb0wC,EAAI3wC,KAAKP,KAAMQ,GAEfR,KAAKyuC,MAAQzuC,KAAKQ,EAAE+iC,YAChBvjC,KAAKyuC,MAAQ,IAAO,IACtBzuC,KAAKyuC,OAAS,GAAMzuC,KAAKyuC,MAAQ,IAGnCzuC,KAAKkB,EAAI,IAAIu+B,EAAG,GAAG2N,OAAOptC,KAAKyuC,OAC/BzuC,KAAKqvC,GAAKrvC,KAAKwzC,KAAKxzC,KAAKkB,EAAE+rC,OAC3BjtC,KAAKyzC,KAAOzzC,KAAKkB,EAAEgvC,OAAOlwC,KAAKQ,GAE/BR,KAAK0zC,KAAO1zC,KAAKyzC,KAAKnT,IAAItgC,KAAKkB,GAAGktC,MAAM,GAAG5iC,IAAIxL,KAAKQ,GACpDR,KAAK0zC,KAAO1zC,KAAK0zC,KAAKzE,KAAKjvC,KAAKkB,GAChClB,KAAK0zC,KAAO1zC,KAAKkB,EAAEikC,IAAInlC,KAAK0zC,MA9a9BX,EAAO/wC,UAAUgxC,KAAO,WACtB,IAAIp1B,EAAM,IAAI6hB,EAAG,MAEjB,OADA7hB,EAAIiiB,MAAQ,IAAI98B,MAAMgE,KAAKiH,KAAKhO,KAAK6B,EAAI,KAClC+b,GAGTm1B,EAAO/wC,UAAU2xC,QAAU,SAAkBpT,GAG3C,IACIqT,EADA1yC,EAAIq/B,EAGR,GACEvgC,KAAK6zC,MAAM3yC,EAAGlB,KAAK4d,KAGnBg2B,GADA1yC,GADAA,EAAIlB,KAAK8zC,MAAM5yC,IACT+jC,KAAKjlC,KAAK4d,MACP2lB,kBACFqQ,EAAO5zC,KAAK6B,GAErB,IAAI2+B,EAAMoT,EAAO5zC,KAAK6B,GAAK,EAAIX,EAAEqvC,KAAKvwC,KAAKkC,GAgB3C,OAfY,IAARs+B,GACFt/B,EAAE2+B,MAAM,GAAK,EACb3+B,EAAEyD,OAAS,GACF67B,EAAM,EACft/B,EAAEgkC,KAAKllC,KAAKkC,QAEIiP,IAAZjQ,EAAE4/B,MAEJ5/B,EAAE4/B,QAGF5/B,EAAE6yC,SAIC7yC,GAGT6xC,EAAO/wC,UAAU6xC,MAAQ,SAAgBptB,EAAOsb,GAC9Ctb,EAAM2c,OAAOpjC,KAAK6B,EAAG,EAAGkgC,IAG1BgR,EAAO/wC,UAAU8xC,MAAQ,SAAgBvT,GACvC,OAAOA,EAAIp5B,KAAKnH,KAAK0T,IASvB8rB,EAASyT,EAAMF,GAEfE,EAAKjxC,UAAU6xC,MAAQ,SAAgBptB,EAAOkS,GAK5C,IAHA,IAEIqb,EAASjtC,KAAKsD,IAAIoc,EAAM9hB,OAAQ,GAC3BvE,EAAI,EAAGA,EAAI4zC,EAAQ5zC,IAC1Bu4B,EAAOkH,MAAMz/B,GAAKqmB,EAAMoZ,MAAMz/B,GAIhC,GAFAu4B,EAAOh0B,OAASqvC,EAEZvtB,EAAM9hB,QAAU,EAGlB,OAFA8hB,EAAMoZ,MAAM,GAAK,OACjBpZ,EAAM9hB,OAAS,GAKjB,IAAIsvC,EAAOxtB,EAAMoZ,MAAM,GAGvB,IAFAlH,EAAOkH,MAAMlH,EAAOh0B,UAhBT,QAgBqBsvC,EAE3B7zC,EAAI,GAAIA,EAAIqmB,EAAM9hB,OAAQvE,IAAK,CAClC,IAAIsX,EAAwB,EAAjB+O,EAAMoZ,MAAMz/B,GACvBqmB,EAAMoZ,MAAMz/B,EAAI,KApBP,QAoBesX,IAAgB,EAAMu8B,IAAS,GACvDA,EAAOv8B,EAETu8B,KAAU,GACVxtB,EAAMoZ,MAAMz/B,EAAI,IAAM6zC,EACT,IAATA,GAAcxtB,EAAM9hB,OAAS,GAC/B8hB,EAAM9hB,QAAU,GAEhB8hB,EAAM9hB,QAAU,GAIpBsuC,EAAKjxC,UAAU8xC,MAAQ,SAAgBvT,GAErCA,EAAIV,MAAMU,EAAI57B,QAAU,EACxB47B,EAAIV,MAAMU,EAAI57B,OAAS,GAAK,EAC5B47B,EAAI57B,QAAU,EAId,IADA,IAAIq9B,EAAK,EACA5hC,EAAI,EAAGA,EAAImgC,EAAI57B,OAAQvE,IAAK,CACnC,IAAIygC,EAAmB,EAAfN,EAAIV,MAAMz/B,GAClB4hC,GAAU,IAAJnB,EACNN,EAAIV,MAAMz/B,GAAU,SAAL4hC,EACfA,EAAS,GAAJnB,GAAamB,EAAK,SAAa,GAUtC,OANkC,IAA9BzB,EAAIV,MAAMU,EAAI57B,OAAS,KACzB47B,EAAI57B,SAC8B,IAA9B47B,EAAIV,MAAMU,EAAI57B,OAAS,IACzB47B,EAAI57B,UAGD47B,GASTf,EAAS0T,EAAMH,GAQfvT,EAAS2T,EAAMJ,GASfvT,EAAS4T,EAAQL,GAEjBK,EAAOpxC,UAAU8xC,MAAQ,SAAgBvT,GAGvC,IADA,IAAI0B,EAAQ,EACH7hC,EAAI,EAAGA,EAAImgC,EAAI57B,OAAQvE,IAAK,CACnC,IAAIojC,EAA0B,IAAL,EAAfjD,EAAIV,MAAMz/B,IAAiB6hC,EACjCD,EAAU,SAALwB,EACTA,KAAQ,GAERjD,EAAIV,MAAMz/B,GAAK4hC,EACfC,EAAQuB,EAKV,OAHc,IAAVvB,IACF1B,EAAIV,MAAMU,EAAI57B,UAAYs9B,GAErB1B,GAITd,EAAG6T,OAAS,SAAgB3yC,GAE1B,GAAI+xC,EAAO/xC,GAAO,OAAO+xC,EAAO/xC,GAEhC,IAAI0yC,EACJ,GAAa,SAAT1yC,EACF0yC,EAAQ,IAAIJ,OACP,GAAa,SAATtyC,EACT0yC,EAAQ,IAAIH,OACP,GAAa,SAATvyC,EACT0yC,EAAQ,IAAIF,MACP,IAAa,WAATxyC,EAGT,MAAM,IAAIuG,MAAM,iBAAmBvG,GAFnC0yC,EAAQ,IAAID,EAMd,OAFAV,EAAO/xC,GAAQ0yC,EAERA,GAkBTnC,EAAIlvC,UAAUowC,SAAW,SAAmBtvC,GAC1Cw8B,EAAsB,IAAfx8B,EAAE88B,SAAgB,iCACzBN,EAAOx8B,EAAEg9B,IAAK,oCAGhBoR,EAAIlvC,UAAUiwC,SAAW,SAAmBnvC,EAAG4B,GAC7C46B,EAAqC,IAA7Bx8B,EAAE88B,SAAWl7B,EAAEk7B,UAAiB,iCACxCN,EAAOx8B,EAAEg9B,KAAOh9B,EAAEg9B,MAAQp7B,EAAEo7B,IAC1B,oCAGJoR,EAAIlvC,UAAUwxC,KAAO,SAAe1wC,GAClC,OAAI9C,KAAKqzC,MAAcrzC,KAAKqzC,MAAMM,QAAQ7wC,GAAGwuC,UAAUtxC,OAEvD4gG,EAAK99F,EAAGA,EAAEmsC,KAAKjvC,KAAKQ,GAAG8wC,UAAUtxC,OAC1B8C,IAGTouC,EAAIlvC,UAAUmiC,IAAM,SAAcrhC,GAChC,OAAIA,EAAEsI,SACGtI,EAAEy+B,QAGJvhC,KAAKQ,EAAE2kC,IAAIriC,GAAGwuC,UAAUtxC,OAGjCkxC,EAAIlvC,UAAUyI,IAAM,SAAc3H,EAAG4B,GACnC1E,KAAKiyC,SAASnvC,EAAG4B,GAEjB,IAAIkJ,EAAM9K,EAAE2H,IAAI/F,GAIhB,OAHIkJ,EAAI4yB,IAAIxgC,KAAKQ,IAAM,GACrBoN,EAAIs3B,KAAKllC,KAAKQ,GAEToN,EAAI0jC,UAAUtxC,OAGvBkxC,EAAIlvC,UAAUijC,KAAO,SAAeniC,EAAG4B,GACrC1E,KAAKiyC,SAASnvC,EAAG4B,GAEjB,IAAIkJ,EAAM9K,EAAEmiC,KAAKvgC,GAIjB,OAHIkJ,EAAI4yB,IAAIxgC,KAAKQ,IAAM,GACrBoN,EAAIs3B,KAAKllC,KAAKQ,GAEToN,GAGTsjC,EAAIlvC,UAAUmjC,IAAM,SAAcriC,EAAG4B,GACnC1E,KAAKiyC,SAASnvC,EAAG4B,GAEjB,IAAIkJ,EAAM9K,EAAEqiC,IAAIzgC,GAIhB,OAHIkJ,EAAIwiC,KAAK,GAAK,GAChBxiC,EAAIq3B,KAAKjlC,KAAKQ,GAEToN,EAAI0jC,UAAUtxC,OAGvBkxC,EAAIlvC,UAAUkjC,KAAO,SAAepiC,EAAG4B,GACrC1E,KAAKiyC,SAASnvC,EAAG4B,GAEjB,IAAIkJ,EAAM9K,EAAEoiC,KAAKxgC,GAIjB,OAHIkJ,EAAIwiC,KAAK,GAAK,GAChBxiC,EAAIq3B,KAAKjlC,KAAKQ,GAEToN,GAGTsjC,EAAIlvC,UAAU+vC,IAAM,SAAcjvC,EAAGy9B,GAEnC,OADAvgC,KAAKoyC,SAAStvC,GACP9C,KAAKwzC,KAAK1wC,EAAEirC,MAAMxN,KAG3B2Q,EAAIlvC,UAAUmF,KAAO,SAAerE,EAAG4B,GAErC,OADA1E,KAAKiyC,SAASnvC,EAAG4B,GACV1E,KAAKwzC,KAAK1wC,EAAEqE,KAAKzC,KAG1BwsC,EAAIlvC,UAAUs+B,IAAM,SAAcx9B,EAAG4B,GAEnC,OADA1E,KAAKiyC,SAASnvC,EAAG4B,GACV1E,KAAKwzC,KAAK1wC,EAAEw9B,IAAI57B,KAGzBwsC,EAAIlvC,UAAUkrC,KAAO,SAAepqC,GAClC,OAAO9C,KAAKmH,KAAKrE,EAAGA,EAAEy+B,UAGxB2P,EAAIlvC,UAAUirC,IAAM,SAAcnqC,GAChC,OAAO9C,KAAKsgC,IAAIx9B,EAAGA,IAGrBouC,EAAIlvC,UAAUyP,KAAO,SAAe3O,GAClC,GAAIA,EAAEsI,SAAU,OAAOtI,EAAEy+B,QAEzB,IAAI2S,EAAOl0C,KAAKQ,EAAE2iC,MAAM,GAIxB,GAHA7D,EAAO4U,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAI/pC,EAAMnK,KAAKQ,EAAEiK,IAAI,IAAIg1B,EAAG,IAAI2D,OAAO,GACvC,OAAOpjC,KAAKmK,IAAIrH,EAAGqH,GAQrB,IAFA,IAAI+4B,EAAIljC,KAAKQ,EAAE8tC,KAAK,GAChBnsC,EAAI,GACA+gC,EAAE93B,UAA2B,IAAf83B,EAAEC,MAAM,IAC5BhhC,IACA+gC,EAAEE,OAAO,GAEX9D,GAAQ4D,EAAE93B,UAEV,IAAI+oC,EAAM,IAAI1U,EAAG,GAAG0R,MAAMnxC,MACtBo0C,EAAOD,EAAI3B,SAIX6B,EAAOr0C,KAAKQ,EAAE8tC,KAAK,GAAGlL,OAAO,GAC7BkR,EAAIt0C,KAAKQ,EAAE+iC,YAGf,IAFA+Q,EAAI,IAAI7U,EAAG,EAAI6U,EAAIA,GAAGnD,MAAMnxC,MAEW,IAAhCA,KAAKmK,IAAImqC,EAAGD,GAAM7T,IAAI4T,IAC3BE,EAAE3C,QAAQyC,GAOZ,IAJA,IAAI3zC,EAAIT,KAAKmK,IAAImqC,EAAGpR,GAChBhiC,EAAIlB,KAAKmK,IAAIrH,EAAGogC,EAAEmL,KAAK,GAAGjL,OAAO,IACjC9hC,EAAItB,KAAKmK,IAAIrH,EAAGogC,GAChB1iC,EAAI2B,EACc,IAAfb,EAAEk/B,IAAI2T,IAAY,CAEvB,IADA,IAAIv2B,EAAMtc,EACDlB,EAAI,EAAoB,IAAjBwd,EAAI4iB,IAAI2T,GAAY/zC,IAClCwd,EAAMA,EAAIu0B,SAEZ7S,EAAOl/B,EAAII,GACX,IAAIkE,EAAI1E,KAAKmK,IAAI1J,EAAG,IAAIg/B,EAAG,GAAG2N,OAAO5sC,EAAIJ,EAAI,IAE7Cc,EAAIA,EAAE8wC,OAAOttC,GACbjE,EAAIiE,EAAEytC,SACN7wC,EAAIA,EAAE0wC,OAAOvxC,GACbD,EAAIJ,EAGN,OAAOc,GAGTgwC,EAAIlvC,UAAUquC,KAAO,SAAevtC,GAClC,IAAIoM,EAAMpM,EAAEotC,OAAOlwC,KAAKQ,GACxB,OAAqB,IAAjB0O,EAAI0wB,UACN1wB,EAAI0wB,SAAW,EACR5/B,KAAKwzC,KAAKtkC,GAAKsjC,UAEfxyC,KAAKwzC,KAAKtkC,IAIrBgiC,EAAIlvC,UAAUmI,IAAM,SAAcrH,EAAGy9B,GACnC,GAAIA,EAAIn1B,SAAU,OAAO,IAAIq0B,EAAG,GAAG0R,MAAMnxC,MACzC,GAAoB,IAAhBugC,EAAI6P,KAAK,GAAU,OAAOttC,EAAEy+B,QAEhC,IACIgT,EAAM,IAAIxxC,MAAM,IACpBwxC,EAAI,GAAK,IAAI9U,EAAG,GAAG0R,MAAMnxC,MACzBu0C,EAAI,GAAKzxC,EACT,IAAK,IAAI1C,EAAI,EAAGA,EAAIm0C,EAAI5vC,OAAQvE,IAC9Bm0C,EAAIn0C,GAAKJ,KAAKsgC,IAAIiU,EAAIn0C,EAAI,GAAI0C,GAGhC,IAAI8K,EAAM2mC,EAAI,GACV54B,EAAU,EACV64B,EAAa,EACbhhC,EAAQ+sB,EAAIgD,YAAc,GAK9B,IAJc,IAAV/vB,IACFA,EAAQ,IAGLpT,EAAImgC,EAAI57B,OAAS,EAAGvE,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI8gC,EAAOX,EAAIV,MAAMz/B,GACZ6X,EAAIzE,EAAQ,EAAGyE,GAAK,EAAGA,IAAK,CACnC,IAAIhM,EAAOi1B,GAAQjpB,EAAK,EACpBrK,IAAQ2mC,EAAI,KACd3mC,EAAM5N,KAAKitC,IAAIr/B,IAGL,IAAR3B,GAAyB,IAAZ0P,GAKjBA,IAAY,EACZA,GAAW1P,GA9BE,MA+BbuoC,GACwC,IAANp0C,GAAiB,IAAN6X,KAE7CrK,EAAM5N,KAAKsgC,IAAI1yB,EAAK2mC,EAAI54B,IACxB64B,EAAa,EACb74B,EAAU,IAXR64B,EAAa,EAajBhhC,EAAQ,GAGV,OAAO5F,GAGTsjC,EAAIlvC,UAAUqvC,UAAY,SAAoB9Q,GAC5C,IAAIr/B,EAAIq/B,EAAI0O,KAAKjvC,KAAKQ,GAEtB,OAAOU,IAAMq/B,EAAMr/B,EAAEqgC,QAAUrgC,GAGjCgwC,EAAIlvC,UAAUwvC,YAAc,SAAsBjR,GAChD,IAAI3yB,EAAM2yB,EAAIgB,QAEd,OADA3zB,EAAIkyB,IAAM,KACHlyB,GAOT6xB,EAAGgV,KAAO,SAAelU,GACvB,OAAO,IAAIgT,EAAKhT,IAmBlBf,EAAS+T,EAAMrC,GAEfqC,EAAKvxC,UAAUqvC,UAAY,SAAoB9Q,GAC7C,OAAOvgC,KAAKwzC,KAAKjT,EAAIwN,MAAM/tC,KAAKyuC,SAGlC8E,EAAKvxC,UAAUwvC,YAAc,SAAsBjR,GACjD,IAAIr/B,EAAIlB,KAAKwzC,KAAKjT,EAAID,IAAItgC,KAAKyzC,OAE/B,OADAvyC,EAAE4+B,IAAM,KACD5+B,GAGTqyC,EAAKvxC,UAAUmF,KAAO,SAAerE,EAAG4B,GACtC,GAAI5B,EAAEsI,UAAY1G,EAAE0G,SAGlB,OAFAtI,EAAE+8B,MAAM,GAAK,EACb/8B,EAAE6B,OAAS,EACJ7B,EAGT,IAAIxB,EAAIwB,EAAEqE,KAAKzC,GACXjE,EAAIa,EAAE6sC,MAAMnuC,KAAKyuC,OAAOnO,IAAItgC,KAAK0zC,MAAMxF,OAAOluC,KAAKyuC,OAAOnO,IAAItgC,KAAKQ,GACnEk0C,EAAIpzC,EAAE4jC,KAAKzkC,GAAG2iC,OAAOpjC,KAAKyuC,OAC1B7gC,EAAM8mC,EAQV,OANIA,EAAElU,IAAIxgC,KAAKQ,IAAM,EACnBoN,EAAM8mC,EAAExP,KAAKllC,KAAKQ,GACTk0C,EAAEtE,KAAK,GAAK,IACrBxiC,EAAM8mC,EAAEzP,KAAKjlC,KAAKQ,IAGboN,EAAI0jC,UAAUtxC,OAGvBuzC,EAAKvxC,UAAUs+B,IAAM,SAAcx9B,EAAG4B,GACpC,GAAI5B,EAAEsI,UAAY1G,EAAE0G,SAAU,OAAO,IAAIq0B,EAAG,GAAG6R,UAAUtxC,MAEzD,IAAIsB,EAAIwB,EAAEw9B,IAAI57B,GACVjE,EAAIa,EAAE6sC,MAAMnuC,KAAKyuC,OAAOnO,IAAItgC,KAAK0zC,MAAMxF,OAAOluC,KAAKyuC,OAAOnO,IAAItgC,KAAKQ,GACnEk0C,EAAIpzC,EAAE4jC,KAAKzkC,GAAG2iC,OAAOpjC,KAAKyuC,OAC1B7gC,EAAM8mC,EAOV,OANIA,EAAElU,IAAIxgC,KAAKQ,IAAM,EACnBoN,EAAM8mC,EAAExP,KAAKllC,KAAKQ,GACTk0C,EAAEtE,KAAK,GAAK,IACrBxiC,EAAM8mC,EAAEzP,KAAKjlC,KAAKQ,IAGboN,EAAI0jC,UAAUtxC,OAGvBuzC,EAAKvxC,UAAUquC,KAAO,SAAevtC,GAGnC,OADU9C,KAAKwzC,KAAK1wC,EAAEotC,OAAOlwC,KAAKQ,GAAG8/B,IAAItgC,KAAKqvC,KACnCiC,UAAUtxC,OAx9GzB,CA09GoCH,EAAQG,Q,kDCx9G5C,MAAM24D,EAAO/4D,EAEb+4D,EAAKyoC,OAAS,EAAQ,GAEtBzoC,EAAK74D,OAAS,EAAQ,KAAcA,OACpC64D,EAAKrhC,KAAO,EAAQ,KACpBqhC,EAAKqjB,UAAY,EAAQ,KACzBrjB,EAAK0oC,SAAW,EAAQ,KACxB1oC,EAAK2oC,SAAW,EAAQ,M,6BCRxB,MAAMA,EAAW1hG,EAEjB0hG,EAASC,IAAM,EAAQ,KACvBD,EAASE,IAAM,EAAQ,M,6BCHvB,MAAMhiE,EAAW,EAAQ,GACnBtD,EAAS,EAAQ,IAAgBA,OACjCmgD,EAAO,EAAQ,IAGfklB,EAAM,EAAQ,IAEpB,SAASE,EAAW1iB,GAClB/+E,KAAKy+C,IAAM,MACXz+C,KAAKW,KAAOo+E,EAAOp+E,KACnBX,KAAK++E,OAASA,EAGd/+E,KAAK0hG,KAAO,IAAIC,EAChB3hG,KAAK0hG,KAAK3hE,MAAMg/C,EAAOvU,MAUzB,SAASm3B,EAAQrlB,GACfD,EAAK97E,KAAKP,KAAM,MAAOs8E,GAmHzB,SAAS9mB,EAAIj1B,GACX,OAAIA,EAAM,GACD,IAAMA,EAENA,EAhIX1gC,EAAOD,QAAU6hG,EAEjBA,EAAWz/F,UAAUo7C,OAAS,SAAgB3nB,EAAM26B,GAClD,OAAOpwD,KAAK0hG,KAAKxpC,QAAQziC,EAAM26B,GAAU5rD,QAQ3Cg7B,EAASmiE,EAAStlB,GAElBslB,EAAQ3/F,UAAUy9E,iBAAmB,SAAyBpmB,EAC5DgmB,EACAG,EACA16D,GACA,MAAM88E,EA2OR,SAAmBvoC,EAAKgmB,EAAWG,EAAKpvB,GACtC,IAAIxiD,EAEQ,UAARyrD,EACFA,EAAM,MACS,UAARA,IACPA,EAAM,OAER,GAAIkoC,EAAItgB,UAAUh/E,eAAeo3D,GAC/BzrD,EAAM2zF,EAAItgB,UAAU5nB,OACjB,IAAmB,iBAARA,IAA2B,EAANA,KAAaA,EAGhD,OAAOjJ,EAAS9J,MAAM,gBAAkB+S,GAFxCzrD,EAAMyrD,EAIR,GAAIzrD,GAAO,GACT,OAAOwiD,EAAS9J,MAAM,wCAEnB+4B,IACHzxE,GAAO,IAIT,OAFAA,GAAQ2zF,EAAIvgB,eAAexB,GAAO,cAAgB,EAE3C5xE,EAlQYi0F,CAAUxoC,EAAKgmB,EAAWG,EAAKx/E,KAAKowD,UAGvD,GAAItrC,EAAQngB,OAAS,IAAM,CACzB,MAAM4hE,EAASrqC,EAAOK,MAAM,GAG5B,OAFAgqC,EAAO,GAAKq7B,EACZr7B,EAAO,GAAKzhD,EAAQngB,OACb3E,KAAKk/E,qBAAqB,CAAE3Y,EAAQzhD,IAK7C,IAAIg9E,EAAY,EAChB,IAAK,IAAI1hG,EAAI0kB,EAAQngB,OAAQvE,GAAK,IAAOA,IAAM,EAC7C0hG,IAEF,MAAMv7B,EAASrqC,EAAOK,MAAM,EAAQulE,GACpCv7B,EAAO,GAAKq7B,EACZr7B,EAAO,GAAK,IAAOu7B,EAEnB,IAAK,IAAI1hG,EAAI,EAAI0hG,EAAW7pF,EAAI6M,EAAQngB,OAAQsT,EAAI,EAAG7X,IAAK6X,IAAM,EAChEsuD,EAAOnmE,GAAS,IAAJ6X,EAEd,OAAOjY,KAAKk/E,qBAAqB,CAAE3Y,EAAQzhD,KAG7C68E,EAAQ3/F,UAAU49E,WAAa,SAAmBt3E,EAAK+wD,GACrD,GAAY,WAARA,EACF,OAAOr5D,KAAKk/E,qBAAqB,CAAe,EAAb52E,EAAIy5F,OAAYz5F,EAAImtB,OAClD,GAAY,WAAR4jC,EAAkB,CAC3B,MAAMpzD,EAAMi2B,EAAOK,MAAmB,EAAbj0B,EAAI3D,QAC7B,IAAK,IAAIvE,EAAI,EAAGA,EAAIkI,EAAI3D,OAAQvE,IAC9B6F,EAAIy1C,cAAcpzC,EAAIE,WAAWpI,GAAQ,EAAJA,GAEvC,OAAOJ,KAAKk/E,qBAAqBj5E,GAC5B,MAAY,WAARozD,EACJr5D,KAAKkgF,UAAU53E,GAIbtI,KAAKk/E,qBAAqB52E,GAHxBtI,KAAKowD,SAAS9J,MAAM,kEAIZ,aAAR+S,EACJr5D,KAAKmgF,YAAY73E,GAQftI,KAAKk/E,qBAAqB52E,GAPxBtI,KAAKowD,SAAS9J,MAAM,qNAQpB,OAAO5/B,KAAK2yC,IAEJ,YAARA,EADFr5D,KAAKk/E,qBAAqB52E,GAI1BtI,KAAKowD,SAAS9J,MAAM,4BAA8B+S,EAC9B,iBAI/BsoC,EAAQ3/F,UAAU69E,aAAe,SAAqBxyB,EAAI/gC,EAAQ01E,GAChE,GAAkB,iBAAP30C,EAAiB,CAC1B,IAAK/gC,EACH,OAAOtsB,KAAKowD,SAAS9J,MAAM,+CAC7B,IAAKh6B,EAAOrqB,eAAeorD,GACzB,OAAOrtD,KAAKowD,SAAS9J,MAAM,iCAC7B+G,EAAK/gC,EAAO+gC,GAAIxZ,MAAM,WACtB,IAAK,IAAIzzC,EAAI,EAAGA,EAAIitD,EAAG1oD,OAAQvE,IAC7BitD,EAAGjtD,IAAM,OACN,GAAI2C,MAAMC,QAAQqqD,GAAK,CAC5BA,EAAKA,EAAGh5C,QACR,IAAK,IAAIjU,EAAI,EAAGA,EAAIitD,EAAG1oD,OAAQvE,IAC7BitD,EAAGjtD,IAAM,EAGb,IAAK2C,MAAMC,QAAQqqD,GACjB,OAAOrtD,KAAKowD,SAAS9J,MAAM,kDACUo5B,KAAKC,UAAUtyB,IAGtD,IAAK20C,EAAU,CACb,GAAI30C,EAAG,IAAM,GACX,OAAOrtD,KAAKowD,SAAS9J,MAAM,+BAC7B+G,EAAGzsC,OAAO,EAAG,EAAW,GAARysC,EAAG,GAAUA,EAAG,IAIlC,IAAIjjD,EAAO,EACX,IAAK,IAAIhK,EAAI,EAAGA,EAAIitD,EAAG1oD,OAAQvE,IAAK,CAClC,IAAI6hG,EAAQ50C,EAAGjtD,GACf,IAAKgK,IAAQ63F,GAAS,IAAMA,IAAU,EACpC73F,IAGJ,MAAM83F,EAAQhmE,EAAOK,MAAMnyB,GAC3B,IAAI2J,EAASmuF,EAAMv9F,OAAS,EAC5B,IAAK,IAAIvE,EAAIitD,EAAG1oD,OAAS,EAAGvE,GAAK,EAAGA,IAAK,CACvC,IAAI6hG,EAAQ50C,EAAGjtD,GAEf,IADA8hG,EAAMnuF,KAAoB,IAARkuF,GACVA,IAAU,GAAK,GACrBC,EAAMnuF,KAAY,IAAgB,IAARkuF,EAG9B,OAAOjiG,KAAKk/E,qBAAqBgjB,IAUnCP,EAAQ3/F,UAAU89E,YAAc,SAAoBqiB,EAAM9oC,GACxD,IAAI/wD,EACJ,MAAM85F,EAAO,IAAIC,KAAKF,GA0BtB,MAxBY,YAAR9oC,EACF/wD,EAAM,CACJktD,EAAI4sC,EAAKE,kBACT9sC,EAAI4sC,EAAKG,cAAgB,GACzB/sC,EAAI4sC,EAAKI,cACThtC,EAAI4sC,EAAKK,eACTjtC,EAAI4sC,EAAKM,iBACTltC,EAAI4sC,EAAKO,iBACT,KACAn+F,KAAK,IACU,YAAR60D,EACT/wD,EAAM,CACJktD,EAAI4sC,EAAKE,iBAAmB,KAC5B9sC,EAAI4sC,EAAKG,cAAgB,GACzB/sC,EAAI4sC,EAAKI,cACThtC,EAAI4sC,EAAKK,eACTjtC,EAAI4sC,EAAKM,iBACTltC,EAAI4sC,EAAKO,iBACT,KACAn+F,KAAK,IAEPxE,KAAKowD,SAAS9J,MAAM,YAAc+S,EAAM,8BAGnCr5D,KAAK4/E,WAAWt3E,EAAK,WAG9Bq5F,EAAQ3/F,UAAU+9E,YAAc,WAC9B,OAAO//E,KAAKk/E,qBAAqB,KAGnCyiB,EAAQ3/F,UAAUg+E,WAAa,SAAmBz/C,EAAKjU,GACrD,GAAmB,iBAARiU,EAAkB,CAC3B,IAAKjU,EACH,OAAOtsB,KAAKowD,SAAS9J,MAAM,+CAC7B,IAAKh6B,EAAOrqB,eAAes+B,GACzB,OAAOvgC,KAAKowD,SAAS9J,MAAM,+BACAo5B,KAAKC,UAAUp/C,IAE5CA,EAAMjU,EAAOiU,GAIf,GAAmB,iBAARA,IAAqBrE,EAAOqZ,SAAShV,GAAM,CACpD,MAAMqiE,EAAWriE,EAAI1iB,WAChB0iB,EAAIlvB,MAAsB,IAAduxF,EAAS,IACxBA,EAAS19C,QAAQ,GAEnB3kB,EAAMrE,EAAO1b,KAAKoiF,GAGpB,GAAI1mE,EAAOqZ,SAAShV,GAAM,CACxB,IAAIn2B,EAAOm2B,EAAI57B,OACI,IAAf47B,EAAI57B,QACNyF,IAEF,MAAM23B,EAAM7F,EAAOK,MAAMnyB,GAIzB,OAHAm2B,EAAIc,KAAKU,GACU,IAAfxB,EAAI57B,SACNo9B,EAAI,GAAK,GACJ/hC,KAAKk/E,qBAAqBn9C,GAGnC,GAAIxB,EAAM,IACR,OAAOvgC,KAAKk/E,qBAAqB3+C,GAEnC,GAAIA,EAAM,IACR,OAAOvgC,KAAKk/E,qBAAqB,CAAC,EAAG3+C,IAEvC,IAAIn2B,EAAO,EACX,IAAK,IAAIhK,EAAImgC,EAAKngC,GAAK,IAAOA,IAAM,EAClCgK,IAEF,MAAM23B,EAAM,IAAIh/B,MAAMqH,GACtB,IAAK,IAAIhK,EAAI2hC,EAAIp9B,OAAS,EAAGvE,GAAK,EAAGA,IACnC2hC,EAAI3hC,GAAW,IAANmgC,EACTA,IAAQ,EAMV,OAJY,IAATwB,EAAI,IACLA,EAAImjB,QAAQ,GAGPllD,KAAKk/E,qBAAqBhjD,EAAO1b,KAAKuhB,KAG/C4/D,EAAQ3/F,UAAUi+E,YAAc,SAAoB5+E,GAClD,OAAOrB,KAAKk/E,qBAAqB79E,EAAQ,IAAO,IAGlDsgG,EAAQ3/F,UAAUg9E,KAAO,SAAaD,EAAQx5E,GAG5C,MAFsB,mBAAXw5E,IACTA,EAASA,EAAOx5E,IACXw5E,EAAO8jB,YAAY,OAAOnB,MAGnCC,EAAQ3/F,UAAUo9E,aAAe,SAAqB0jB,EAAY1yC,EAAUksB,GAC1E,MAAMv5D,EAAQ/iB,KAAKu8E,WACnB,IAAIn8E,EACJ,GAAyB,OAArB2iB,EAAe,QACjB,OAAO,EAET,MAAM0S,EAAOqtE,EAAWt+F,OAIxB,QAH4B2M,IAAxB4R,EAAMggF,gBACRhgF,EAAMggF,cAAgB/iG,KAAKm/E,aAAap8D,EAAe,QAAGqtC,EAAUksB,GAAQ93E,QAE1EixB,EAAK9wB,SAAWoe,EAAMggF,cAAcp+F,OACtC,OAAO,EAET,IAAKvE,EAAE,EAAGA,EAAIq1B,EAAK9wB,OAAQvE,IACzB,GAAIq1B,EAAKr1B,KAAO2iB,EAAMggF,cAAc3iG,GAClC,OAAO,EAEX,OAAO,I,6BCvQT,MAAMihG,EAAWzhG,EAEjByhG,EAASE,IAAM,EAAQ,KACvBF,EAASG,IAAM,EAAQ,M,6BCHvB,MAAMhiE,EAAW,EAAQ,GAEnB4hE,EAAS,EAAQ,GACjBlxC,EAAgB,EAAQ,IAAkBA,cAC1CmsB,EAAO,EAAQ,IAGfklB,EAAM,EAAQ,IAEpB,SAASyB,EAAWjkB,GAClB/+E,KAAKy+C,IAAM,MACXz+C,KAAKW,KAAOo+E,EAAOp+E,KACnBX,KAAK++E,OAASA,EAGd/+E,KAAK0hG,KAAO,IAAIC,EAChB3hG,KAAK0hG,KAAK3hE,MAAMg/C,EAAOvU,MAczB,SAASm3B,EAAQrlB,GACfD,EAAK97E,KAAKP,KAAM,MAAOs8E,GA8OzB,SAAS2mB,EAAah9F,EAAK0qD,GACzB,IAAI0I,EAAMpzD,EAAIs0C,UAAUoW,GACxB,GAAI1qD,EAAImpD,QAAQiK,GACd,OAAOA,EAET,MAAMmmB,EAAM+hB,EAAI5gB,SAAStnB,GAAO,GAC1BgmB,EAA6B,IAAV,GAANhmB,GAGnB,GAAqB,KAAV,GAANA,GAAsB,CACzB,IAAI6pC,EAAM7pC,EAEV,IADAA,EAAM,EACkB,MAAV,IAAN6pC,IAAsB,CAE5B,GADAA,EAAMj9F,EAAIs0C,UAAUoW,GAChB1qD,EAAImpD,QAAQ8zC,GACd,OAAOA,EAET7pC,IAAQ,EACRA,GAAa,IAAN6pC,QAGT7pC,GAAO,GAIT,MAAO,CACLmmB,IAAKA,EACLH,UAAWA,EACXhmB,IAAKA,EACL8pC,OANa5B,EAAIloC,IAAIA,IAUzB,SAAS+pC,EAAan9F,EAAKo5E,EAAW1uB,GACpC,IAAIp9C,EAAMtN,EAAIs0C,UAAUoW,GACxB,GAAI1qD,EAAImpD,QAAQ77C,GACd,OAAOA,EAGT,IAAK8rE,GAAqB,MAAR9rE,EAChB,OAAO,KAGT,GAAqB,IAAV,IAANA,GAEH,OAAOA,EAIT,MAAMgtB,EAAY,IAANhtB,EACZ,GAAIgtB,EAAM,EACR,OAAOt6B,EAAIqgD,MAAM,6BAEnB/yC,EAAM,EACN,IAAK,IAAInT,EAAI,EAAGA,EAAImgC,EAAKngC,IAAK,CAC5BmT,IAAQ,EACR,MAAM0E,EAAIhS,EAAIs0C,UAAUoW,GACxB,GAAI1qD,EAAImpD,QAAQn3C,GACd,OAAOA,EACT1E,GAAO0E,EAGT,OAAO1E,EAzTT1T,EAAOD,QAAUojG,EAEjBA,EAAWhhG,UAAUu3D,OAAS,SAAgB9jC,EAAMhQ,GAKlD,OAJKyqC,EAAcI,gBAAgB76B,KACjCA,EAAO,IAAIy6B,EAAcz6B,EAAMhQ,IAG1BzlB,KAAK0hG,KAAKlkB,QAAQ/nD,EAAMhQ,IAQjC+Z,EAASmiE,EAAStlB,GAElBslB,EAAQ3/F,UAAU87E,SAAW,SAAiBhlE,EAAQugD,EAAKsjB,GACzD,GAAI7jE,EAAOnB,UACT,OAAO,EAET,MAAMoL,EAAQjK,EAAOy3C,OACf8yC,EAAaJ,EAAanqF,EAAQ,wBAA0BugD,EAAM,KACxE,OAAIvgD,EAAOs2C,QAAQi0C,GACVA,GAETvqF,EAAO03C,QAAQztC,GAERsgF,EAAWhqC,MAAQA,GAAOgqC,EAAWF,SAAW9pC,GACpDgqC,EAAWF,OAAS,OAAU9pC,GAAOsjB,IAG1CglB,EAAQ3/F,UAAUk8E,WAAa,SAAmBplE,EAAQugD,EAAKsjB,GAC7D,MAAM0mB,EAAaJ,EAAanqF,EAC9B,4BAA8BugD,EAAM,KACtC,GAAIvgD,EAAOs2C,QAAQi0C,GACjB,OAAOA,EAET,IAAI9vF,EAAM6vF,EAAatqF,EACrBuqF,EAAWhkB,UACX,4BAA8BhmB,EAAM,KAGtC,GAAIvgD,EAAOs2C,QAAQ77C,GACjB,OAAOA,EAET,IAAKopE,GACD0mB,EAAWhqC,MAAQA,GACnBgqC,EAAWF,SAAW9pC,GACtBgqC,EAAWF,OAAS,OAAS9pC,EAC/B,OAAOvgD,EAAOwtC,MAAM,yBAA2B+S,EAAM,KAGvD,GAAIgqC,EAAWhkB,WAAqB,OAAR9rE,EAC1B,OAAOuF,EAAO23C,KAAKl9C,EAAK,6BAA+B8lD,EAAM,KAG/D,MAAMt2C,EAAQjK,EAAOy3C,OACf3iD,EAAM5N,KAAKsjG,cACfxqF,EACA,2CAA6C9Y,KAAKq5D,IAAM,KAC1D,OAAIvgD,EAAOs2C,QAAQxhD,GACVA,GAET2F,EAAMuF,EAAO/E,OAASgP,EAAMhP,OAC5B+E,EAAO03C,QAAQztC,GACRjK,EAAO23C,KAAKl9C,EAAK,6BAA+B8lD,EAAM,OAG/DsoC,EAAQ3/F,UAAUshG,cAAgB,SAAsBxqF,EAAQ63C,GAC9D,OAAS,CACP,MAAM0I,EAAM4pC,EAAanqF,EAAQ63C,GACjC,GAAI73C,EAAOs2C,QAAQiK,GACjB,OAAOA,EACT,MAAM9lD,EAAM6vF,EAAatqF,EAAQugD,EAAIgmB,UAAW1uB,GAChD,GAAI73C,EAAOs2C,QAAQ77C,GACjB,OAAOA,EAET,IAAI3F,EAOJ,GALEA,EADEyrD,EAAIgmB,WAAqB,OAAR9rE,EACbuF,EAAO23C,KAAKl9C,GAEZvT,KAAKsjG,cAAcxqF,EAAQ63C,GAG/B73C,EAAOs2C,QAAQxhD,GACjB,OAAOA,EAET,GAAmB,QAAfyrD,EAAI8pC,OACN,QAINxB,EAAQ3/F,UAAUw8E,YAAc,SAAoB1lE,EAAQugD,EAAK20B,EAC/DvoE,GACA,MAAM1gB,EAAS,GACf,MAAQ+T,EAAOnB,WAAW,CACxB,MAAM4rF,EAAcvjG,KAAK89E,SAAShlE,EAAQ,OAC1C,GAAIA,EAAOs2C,QAAQm0C,GACjB,OAAOA,EAET,MAAM31F,EAAMogF,EAAQz0B,OAAOzgD,EAAQ,MAAO2M,GAC1C,GAAI3M,EAAOs2C,QAAQxhD,IAAQ21F,EACzB,MACFx+F,EAAOiZ,KAAKpQ,GAEd,OAAO7I,GAGT48F,EAAQ3/F,UAAUy8E,WAAa,SAAmB3lE,EAAQugD,GACxD,GAAY,WAARA,EAAkB,CACpB,MAAM0oC,EAASjpF,EAAOyhC,YACtB,OAAIzhC,EAAOs2C,QAAQ2yC,GACVA,EACF,CAAEA,OAAQA,EAAQtsE,KAAM3c,EAAO43C,OACjC,GAAY,WAAR2I,EAAkB,CAC3B,MAAM3I,EAAM53C,EAAO43C,MACnB,GAAIA,EAAI/rD,OAAS,GAAM,EACrB,OAAOmU,EAAOwtC,MAAM,mDAEtB,IAAIh+C,EAAM,GACV,IAAK,IAAIlI,EAAI,EAAGA,EAAIswD,EAAI/rD,OAAS,EAAGvE,IAClCkI,GAAOlE,OAAOC,aAAaqsD,EAAI/Z,aAAiB,EAAJv2C,IAE9C,OAAOkI,EACF,GAAY,WAAR+wD,EAAkB,CAC3B,MAAMmqC,EAAS1qF,EAAO43C,MAAMvsD,SAAS,SACrC,OAAKnE,KAAKkgF,UAAUsjB,GAIbA,EAHE1qF,EAAOwtC,MAAM,0DAIjB,GAAY,WAAR+S,EACT,OAAOvgD,EAAO43C,MACT,GAAY,YAAR2I,EACT,OAAOvgD,EAAO43C,MACT,GAAY,aAAR2I,EAAoB,CAC7B,MAAMoqC,EAAW3qF,EAAO43C,MAAMvsD,SAAS,SACvC,OAAKnE,KAAKmgF,YAAYsjB,GAIfA,EAHE3qF,EAAOwtC,MAAM,4DAIjB,MAAI,OAAO5/B,KAAK2yC,GACdvgD,EAAO43C,MAAMvsD,WAEb2U,EAAOwtC,MAAM,4BAA8B+S,EAAM,iBAI5DsoC,EAAQ3/F,UAAU08E,aAAe,SAAqB5lE,EAAQwT,EAAQ01E,GACpE,IAAIj9F,EACJ,MAAM2+F,EAAc,GACpB,IAAIzB,EAAQ,EACR0B,EAAW,EACf,MAAQ7qF,EAAOnB,WACbgsF,EAAW7qF,EAAOyhC,YAClB0nD,IAAU,EACVA,GAAoB,IAAX0B,EACiB,IAAV,IAAXA,KACHD,EAAY1lF,KAAKikF,GACjBA,EAAQ,GAGG,IAAX0B,GACFD,EAAY1lF,KAAKikF,GAEnB,MAAMhpF,EAASyqF,EAAY,GAAK,GAAM,EAChCvxE,EAASuxE,EAAY,GAAK,GAOhC,GAJE3+F,EADEi9F,EACO0B,EAEA,CAACzqF,EAAOkZ,GAAQtR,OAAO6iF,EAAYrvF,MAAM,IAEhDiY,EAAQ,CACV,IAAI1O,EAAM0O,EAAOvnB,EAAOP,KAAK,WACjB2M,IAARyM,IACFA,EAAM0O,EAAOvnB,EAAOP,KAAK,YACf2M,IAARyM,IACF7Y,EAAS6Y,GAGb,OAAO7Y,GAGT48F,EAAQ3/F,UAAU28E,YAAc,SAAoB7lE,EAAQugD,GAC1D,MAAM/wD,EAAMwQ,EAAO43C,MAAMvsD,WAEzB,IAAI6pE,EACA41B,EACAC,EACAC,EACAz5F,EACA05F,EACJ,GAAY,YAAR1qC,EACF2U,EAAyB,EAAlB1lE,EAAI+L,MAAM,EAAG,GACpBuvF,EAAwB,EAAlBt7F,EAAI+L,MAAM,EAAG,GACnBwvF,EAAwB,EAAlBv7F,EAAI+L,MAAM,EAAG,GACnByvF,EAA0B,EAAnBx7F,EAAI+L,MAAM,EAAG,IACpBhK,EAA0B,EAApB/B,EAAI+L,MAAM,GAAI,IACpB0vF,EAA0B,EAApBz7F,EAAI+L,MAAM,GAAI,QACf,IAAY,YAARglD,EAYT,OAAOvgD,EAAOwtC,MAAM,YAAc+S,EAAM,8BAXxC2U,EAAyB,EAAlB1lE,EAAI+L,MAAM,EAAG,GACpBuvF,EAAwB,EAAlBt7F,EAAI+L,MAAM,EAAG,GACnBwvF,EAAwB,EAAlBv7F,EAAI+L,MAAM,EAAG,GACnByvF,EAAyB,EAAlBx7F,EAAI+L,MAAM,EAAG,GACpBhK,EAAyB,EAAnB/B,EAAI+L,MAAM,EAAG,IACnB0vF,EAA0B,EAApBz7F,EAAI+L,MAAM,GAAI,IAElB25D,EADEA,EAAO,GACF,IAAOA,EAEP,KAAOA,EAKlB,OAAOq0B,KAAK2B,IAAIh2B,EAAM41B,EAAM,EAAGC,EAAKC,EAAMz5F,EAAK05F,EAAK,IAGtDpC,EAAQ3/F,UAAU48E,YAAc,WAC9B,OAAO,MAGT+iB,EAAQ3/F,UAAU68E,YAAc,SAAoB/lE,GAClD,MAAMlL,EAAMkL,EAAOyhC,YACnB,OAAIzhC,EAAOs2C,QAAQxhD,GACVA,EAEQ,IAARA,GAGX+zF,EAAQ3/F,UAAU88E,WAAa,SAAmBhmE,EAAQwT,GAExD,MAAMokC,EAAM53C,EAAO43C,MACnB,IAAI9iD,EAAM,IAAIwzF,EAAO1wC,GAKrB,OAHIpkC,IACF1e,EAAM0e,EAAO1e,EAAIzJ,SAAS,MAAQyJ,GAE7BA,GAGT+zF,EAAQ3/F,UAAUg9E,KAAO,SAAaD,EAAQx5E,GAG5C,MAFsB,mBAAXw5E,IACTA,EAASA,EAAOx5E,IACXw5E,EAAOklB,YAAY,OAAOvC,O,8MC1QnC,IAAIwC,EAAa,EAAQ,IACrBhoE,EAAS,EAAQ,GAAeA,OAapC,SAASioE,EAAO1jG,GACd,IAAIshC,EAAM7F,EAAOM,YAAY,GAE7B,OADAuF,EAAI6Z,cAAcn7C,EAAG,GACdshC,EAdTliC,EAAOD,QAAU,SAAUkwB,EAAMvc,GAI/B,IAHA,IAEI9S,EAFAa,EAAI46B,EAAOK,MAAM,GACjBn8B,EAAI,EAEDkB,EAAEqD,OAAS4O,GAChB9S,EAAI0jG,EAAM/jG,KACVkB,EAAI46B,EAAOrb,OAAO,CAACvf,EAAG4iG,EAAW,QAAQ/hD,OAAOryB,GAAMqyB,OAAO1hD,GAAG+qD,WAElE,OAAOlqD,EAAE+S,MAAM,EAAGd,K,cCXpB1T,EAAOD,QAAU,SAAckD,EAAG4B,GAGhC,IAFA,IAAI6O,EAAMzQ,EAAE6B,OACRvE,GAAK,IACAA,EAAImT,GACXzQ,EAAE1C,IAAMsE,EAAEtE,GAEZ,OAAO0C,I,gBCNT,IAAI28B,EAAK,EAAQ,GACbvD,EAAS,EAAQ,GAAeA,OAUpCr8B,EAAOD,QARP,SAAqBwkG,EAAWziG,GAC9B,OAAOu6B,EAAO1b,KAAK4jF,EAChBjzD,MAAM1R,EAAGgV,KAAK9yC,EAAIi4E,UAClBnnC,OAAO,IAAIhT,EAAG99B,EAAIu4E,iBAClB3oC,UACA1zB,a,6BCLL,IAUI26B,EAVY,WAIf,GAAoB,oBAATjkC,KAAwB,OAAOA,KAC1C,GAAsB,oBAAX0rB,OAA0B,OAAOA,OAC5C,QAAsB,IAAXuY,EAA0B,OAAOA,EAC5C,MAAM,IAAItxC,MAAM,kCAGJm9F,GAEbxkG,EAAOD,QAAUA,EAAU44C,EAAO8rD,MAGlC1kG,EAAQ4gD,QAAUhI,EAAO8rD,MAAM1iG,KAAK42C,GAEpC54C,EAAQ2kG,QAAU/rD,EAAO+rD,QACzB3kG,EAAQ4kG,QAAUhsD,EAAOgsD,QACzB5kG,EAAQ6kG,SAAWjsD,EAAOisD,U,sdCA1B,WAAyC,a,YACzC,WAAiC,WAAAC,G,2N/wBijCjC,gC,8BMn/BA,2C,MOAA,4C,oBmwBHuC,gBACrC,yBACA,cAEA,4BAA2B,cAC3B,yBAAwB,Y,oDnqBkU1B,yCY5VA,oC,kDjHTA,+CDaA,gD,2oBMuEA,4C,EA/GA,+C,EKq+BA,+B,EAAA,c,ivBXp5BA,iD,EDrBA,2C,+uB8mBnEA,2C,q8D6JD8C,uBCiCtB,eAKpB,KALqB,6BAKrB,sBAGkC,aAAK,Q,uE3tBkP3C,K,80D2tBvPQ,WAAQ,kCAAc,qB,8EAE1B,0CA8FqB,eACrB,oBAIqC,EAAK,eAE1C,uBAKwC,EAAK,kBAE7C,eAUgC,EAAK,UAErC,4BAK6C,EAAK,uBAElD,iBAIkC,EAAK,YAEvC,uBAOuC,EAAK,kBAE5C,uBAOwC,EAAK,kBAE7C,0BAK2C,EAAK,qBAEhD,wBAIwC,EAAK,mBAE7C,qCAMsD,EAAK,gCAE3D,uBAGkD,EAAK,kBA8BrC,eAA4B,aAAK,GAG/C,+B,eC5PR,c,KAAA,c,4CDiDI,cAMI,MAAa,IAOb,OANc,GACV,EAAQ,KADE,KAGV,WAAuB,KAAS,OAAhC,OAEI,gCAAwB,EAAY,GACrC,EAAO,Y,sCAGlB,cAMI,MAAa,OAAW,GAExB,EADY,OAAqB,KAArB,KAA0C,GACnC,gCAAwB,GAC3C,IAAK,EAAO,OrwByD6B,MAAM,GqwBzDnB,4CAA2C,GrwByDMvgG,YqwBxD7E,OAAO,G,yCAEX,cAMI,OAAO,QAAU,EAAO,I,2CAG5B,cAMI,OAAO,QAAS,EAAS,I,wCAG7B,YAMI,OAAO,8BAAiB,KAAuB,I,mFAwHnD,WAEI,GAAI,4BAA8B,0BAAsB,IrwBrMxD,MAAM,EqwBsMF,mFrwBtMmCA,YqwByMvC,GAAK,kBAIE,IAAI,yBAAqB,I,CAEW,QAAlB,uB,KhwBgxBb,MAAhB,IAAgB,oB,CAAA,kBAAW,EAAU,EAAAyS,GAAf,GgwBhxBqC,KAAN,MAAmB,IAAN,MAAoB,KAAN,MAAoB,KAAN,K,ChwBgxB/C,GAAO,EAAP,SAC/C,GAAO,Q,GLl+BP,IqwBiNQ,E,CrwBhNJ,MqwBkNQ,8FAA6F,uBrwBjNrG,MAAM,EAAyB,EAAQzS,mBAF3C,IqwB4MgB,yBAAqB,IrwB1MjC,MAAM,EqwB2ME,oErwB3M+BA,YqwBqNvC,OAAO,OACH,oBAAgB,uBAAmB,eACnC,4BAAwB,iBAAa,uBACrC,uBAAmB,0BACnB,wBAAoB,qCAAiC,yB,mGAY7D,WACI,IAAI,yBAAqB,0BAAzB,CACA,MAAgB,OAAsB,2BAAc,qBAAsB,2BAAc,oBACxF,uBAAkB,eAAO,K,sJClQjC,W,+HAaA,c,KAKoC,cALpC,c,4FAoBI,WAAyC,qB,wBApB7C,W,+HAuBA,eAII,OAAI,QAAsB,KACnB,OAAY,GAAkB,GAGzC,eAII,OAAI,QAAsB,KACnB,OAAY,GAAkB,GAGzC,eAII,OAAI,QAAsB,KACnB,OAAY,GAAkB,GAId,iBAGvB,cADA,0BAEA,uBAAsC,EAAK,WAuB/C,sBAIyB,cAErB,uBAA+B,O,qHA/B/B,6C,kEAEA,4C,sBAEA,WACI,SAAI,c,CtqBwUe,MAAhB,IsqBxUyB,GpwBGhC,EowBH4C,cAAxC,EpwBIG,E8FoUqC,gBsqBxUxC,EACK,aADL,U,oBAGJ,Y,MAEI,OAAI,OAAS,KACT,SAAiB,+EAAe,OACpC,oBACI,gBAAY,EAAM,YAClB,eAAW,EAAM,W,sBAIzB,WACI,MAAsB,EAAT,eAEb,OADA,GAAS,GAAK,EAAL,GAAsB,EAAR,cAAd,G,mIAUkB,WAAQ,Y,kEACvC,4C,yEANJ,0CAgBuB,e,KAAkD,cAAjD,iBAQA,eAAG,M5wB0KyC,EAAAxC,I4wB1KtC,E5wBuLsC,EAAAN,MsGqGzC,EAAhB,IsqB3RK,OACI,GpwB3ChB,EowB2CgB,GpwB3ChB,EowB4CgB,eAAO,IpwB5CvB,EowB6CgB,kBpwB5CT,E8FoUqC,WsqB3ShD,c,4BAQI,YAAmD,wBAAW,I,sBAC9D,WAAsC,OAAQ,EAAR,iB,sBACtC,WACI,OAAuB,EAAhB,eAAQ,QACC,IACH,IACC,SAHS,SAIP,K,wBAfxB,W,+HAiCsB,e,KAA2C,cAA1C,iBAPvB,c,0EAnBwF,4C,+DAAA,yC,+DAAA,yC,iEAAA,2C,+BAAA,wD,iCAAA,0D,uBAAA,gD,qBAAA,4C,qFA2BpF,YAAmD,wBAAW,I,sBAC9D,WAAsC,OAAQ,EAAR,iB,sBACtC,WAAyC,OAAQ,EAAR,eAA8D,IAAhC,IAAe,M,wBAV1F,W,+HAkBI,eAAQ,mDAA0B,KAAM,iBA2BV,eAAQ,OAAQ,EAAR,WAWN,eAAQ,OAAQ,EAAR,WAKD,eAAQ,OAAQ,EAAR,WAMX,eAAQ,OAAQ,EAAR,WAKD,eAAQ,OAAQ,EAAR,WAMjB,eAAQ,O9sB1HKsjG,E8sB0HL,WAgBG,eAAQ,OAAQ,GAAR,WAKT,eAAQ,OAAI,eAAkB,KAAU,UAExF,iBACI,MAAM,EAAyB,qCAAW,GAAX,aAAkC,GnNlLtC,cAE3B,ezjBmD0D,IyjBGhC,cAE1B,e1jBzBoD,I8wB7ExD,sBAeI,0BACI,EAAsB,yCAAtB,YAAwF,IAErD,cAAE,YAAwB,WAC/B,cAAE,YAAmB,WAClB,cAAE,YAAsB,WACzB,cAAE,YAAqB,WACxB,cAAE,YAAoB,WANmC,eAOxF,OALI,kBAAQ,gBAAiB,GAAM,KAC/B,kBAAQ,WAAY,GAAM,KAC1B,kBAAQ,cAAe,GAAM,KAC7B,kBAAQ,aAAc,GAAM,KAC5B,kBAAQ,YAAa,GAAM,KAC/B,E,+DDwGwE,yC,4BAAA,qD,iCAAA,0D,yBAAA,kD,2BAAA,oD,qBAAA,4C,sBAAA,6C,+BAAA,wD,0BAAA,iD,kCAAA,2D,6BAAA,0D,yFnN/E5E,cAKkE,sBAAQ,YAAI,EAAK,I,mBAEnF,WACmC,cAAW,iB,6FAgD9C,YAOI,OADA,ezezEC,UyeyEU,IACJ,G,mBAGX,WACkC,cAAU,iB,wIoNpG5C,+C,+BAUA,cACI,GAAO,GAEH,SADE,EACF,IAAoB,EAAQ,gCAAwB,KAAyB,GAC7E,SAFE,EAEF,IAAiB,EAAQ,gCAAwB,KAAsB,GACvE,SAHE,EAGF,KAAgB,EAAQ,gCAAwB,KAAqB,I,iCAI7E,YAEI,OADoB,GAAR,GACC,qB,qFApCrB,0CAwCA,sBAOI,0BACI,EAAsB,2CAAtB,a,qEADJ,+C,+BAGA,cAKwC,IAAuB,EAH3D,OADA,GAAO,GACI,eACP,EAAQ,gCAAwB,KAAoB,MAEpD,EAAQ,gCAAwB,KAAuB,yB,iCAI/D,YACI,MAAqB,GAAR,GAAwB,oBACrC,IAAI,eAA0B,MAAM,IAAsB,EAAI,kFAAwD,GAAiB,EAAO,YAC9I,OAAO,G,uFAtBf,0CA0BA,sBAOI,0BAEI,EAAsB,sCAAtB,W,qEAFJ,+C,+BAIA,cACI,GAAO,GACP,EAAQ,c,iCAGZ,YAGI,OAFA,GAAO,GACP,EAAQ,aACD,M,kFAnBf,0CAuBA,sBAEI,0BACI,EAA0B,yCAA1B,U,qEADJ,+C,+BAGA,cAOU,MAGQ,EAKR,EACA,EALM,EARZ,OADA,GAAO,GACH,EAAM,SACC,EAAQ,qBAAa,EAAM,SAGtC,OAAM,KAAN,IAAuC,wBAGvC,OAAc,IAAd,EAAM,UAKN,OAAM,KAAN,IAAyC,0BACzC,OAAM,KAAN,IAA0C,gCAE1C,EAAQ,qBAAa,EAAM,cAPvB,OAAQ,yBAAmB,EAAN,aAAmB,c,qBlqBqGb,EAAAlvE,Q,iCkqB3FnC,YACI,MAAqB,GAAR,GAAwB,oBACrC,IAAI,eAAwB,MAAM,IAAsB,EAAI,gFAAsD,GAAiB,EAAO,YAC1I,OAAO,G,qFA7Bf,0CAiCA,sBAaI,2BALA,oC/JjE4D,M+JiE5D,QAAsC,0B/JjEsB,WDxDrD,iDCwDqD,UGqCqB,W4J6B7E,0BACkC,wC,qEADlC,+C,sEADkC,0D,wEAAA,4D,mEAAA,uD,qEAAA,yD,+DAAA,mD,2CAAA,8E,0CAAA,6E,qCAAA,wE,oCAAA,uE,uCAAA,0E,yJAKtC,+C,+BAEA,cACI,GAAO,GACP,EAAqB,EAAP,GAAqB,MAAuB,kBAAU,EAAS,I,iCAGjF,YAEI,OADA,GAAO,GACA,OAAW,EAAqB,EAAP,GAAqB,MAAuB,oBAAY,K,oFAtBhG,0CA0BA,sBAaI,2BALA,oC/J3F4D,M+J2F5D,QAAqC,0B/J3FuB,WDxDrD,mCCwDqD,UGqCqB,W4JuD7E,0BACkC,uC,qEADlC,+C,sEADiC,0D,wEAAA,4D,mEAAA,uD,qEAAA,yD,+DAAA,mD,2CAAA,8E,0CAAA,6E,qCAAA,wE,oCAAA,uE,uCAAA,0E,wJAKrC,+C,+BAEA,cACI,GAAO,GACP,EAAe,MAAuB,kBAAU,EAAS,I,iCAG7D,YAEI,OADA,GAAO,GACA,OAAU,EAAe,MAAuB,oBAAY,K,uKAtB3E,0CA0BA,eACY,GAAR,GAGJ,eACY,GAAR,GAGJ,eAAoD,6CAC7C,MAAM,EACL,6FACQ,0BAA2C,IAHP,SAMpD,eAAuC,6CAChC,MAAM,EACL,6FACQ,0BAA2C,IAHpB,SAYiC,eAEpE,wBAA0C,GAAK,GAPnD,eAKwE,iB,eC1M5C,wCACxB,WAA+C,QAC/C,WAAkD,QAClD,WAA0C,QAC1C,WAAuD,QACvD,WAA4C,QAC5C,UAAiD,aACjD,WAAkD,QAClD,WAAqD,QACrD,UAAkD,aAClD,WAAgE,QAChE,UAA4D,0BAV5D,sBACA,yBACA,iBACA,8BACA,mBACA,yBACA,yBACA,4BACA,0BACA,uCACA,yBCR6B,e,EAA2C,E,gCAKxC,eAAoB,aAAc,G,kCAEtE,iBACI,cAA0B,GAAU,EAAG,mCAAkC,EAAlC,KAA2C,EAAc,GAKhE,eAAoB,aAAc,G,kCAEtE,mBACI,UAAsB,EAAU,mBAA6B,GAAN,EAAa,IAExE,iBAA0E,cACtE,2CAA0C,EAA1C,2OAGkC,GAAP,IAG/B,mBACI,cAAsB,GAAyB,EAAO,EAAK,IAE/D,mBACI,WAAsB,EAAI,GAAyB,EAAO,EAAK,IAEnE,iBAEI,eAAK,2CAA0C,EAA1C,4HAEG,IAIZ,mBACI,MAAO,2CAA0C,EAA1C,wBAA0D,EAA1D,gOAG2B,GAAP,GAG/B,iBAA+D,WAC3D,EACA,4BAA2B,EAA3B,mGAEgC,GAAN,IAG9B,eAAwE,cACpE,kBAAkB,EAAc,WAAhC,+GAC0E,EAAc,KADxF,OAEQ,IAGZ,iBACI,QADsB,WAAc,GAChC,SAAS,IAAK,OAAO,EACzB,IAAc,IAAV,E,CACA,MAAY,EAAK,OAAS,GAAd,EACZ,OAAI,GAAS,EAAU,EAChB,QnwB4IkE,EAAAzrB,UmwB5I9C,GAG/B,MAAY,EAAS,GAAT,EACZ,EAAU,EAAS,GAAT,EACV,EAAiB,GAAS,EAAG,GAAQ,QACrC,EAAiB,GAAO,SAAQ,GAAQ,QACxB,EAAgB,GAAN,EAAoB,GAA9B,EAAsC,GAAJ,EAAiB,UAAnE,OAAO,EnwBwIqF,EAAAA,UAAUoU,EAAYC,GmwBxIpC,EC9EzD,iBAErB,gBAEA,iBAAwB,EAAc,UCyC1C,sBAEI,mBACoB,YAAU,KAE9B,UACW,cAAU,KAGjB,oBACA,yB,qEJyJJ,W,OpqB7KwF,wBAAAhd,S,qEoqBgLpF,WAAQ,uBAAS,c,+DAEjB,WAAQ,uBAAS,Q,wEAEjB,WAAQ,uBAAS,iB,oCAErB,YAAkD,uBAAS,uBAAe,I,qCAC1E,YAAkD,uBAAS,wBAAgB,I,2CAC3E,YAAmE,uBAAS,8BAAsB,I,0CAClG,YAAkE,uBAAS,6BAAqB,I,uCAChG,YAAsD,uBAAS,0BAAkB,I,4LC3NrF,WAGI,4B,wBAHJ,WAII,+B,wBAJJ,WAKI,uB,wBALJ,WAMI,oC,wBANJ,WAOI,yB,wBAPJ,WAQI,+B,wBARJ,WASI,+B,wBATJ,WAUI,kC,wBAVJ,WAWI,gC,yBAXJ,WAYI,6C,yBAZJ,WAaI,+B,0BAbJ,mDAGI,iCACA,oCACA,4BACA,yCACA,8BACA,oCACA,oCACA,uCACA,qCACA,kDACA,iC,sBAbJ,iBAGI,2DACA,0DACA,0CACA,oEACA,8CACA,0DACA,0DACA,gEACA,4DACA,sFACA,0DAbJ,K,sBAAA,0BAaI,MADA,MADA,MADA,MADA,MADA,MADA,MADA,MADA,MADA,MADA,0CACA,sCACA,8BACA,2CACA,gCACA,sCACA,sCACA,yCACA,uCACA,oDACA,sC,oBAbJ,mHAGI,gDACA,sDACA,sCACA,gEACA,0CACA,sDACA,sDACA,4DACA,wDACA,kFACA,sD,gPETA,WACW,MAAP,cCoII,eDpIqB,KCoIgC,KAAX,eAAlB,eDpIa,+BCoI2B,oBDnIpE,cAAO,YAEA,MAAP,cAAO,EAAQ,cAAO,aAAc,GAA7B,EAAuC,cAAO,gBCmUhD,GAAW,eDnUwD,2BCmUxC,GDhUhC,IAFA,MhxB4FsD,IgxB3FtD,GAAoB,EACb,cAAO,e,CACV,GAAgB,EAChB,MAAc,iBAAW,cAAO,aAAkB,cAAO,mBAClD,EAAP,cC2HA,eD3HyB,KC2H4B,KAAX,eAAlB,eD3Ha,eC2H2B,oBD1HhE,cAAO,YACP,MAAc,YAEd,GADA,EhxB4NR,YgxB5Ne,EAAO,GACV,cAAO,aAAc,G,CAEd,MAAP,cCqHJ,eDrH6B,KCqHwB,KAAX,eAAlB,eDrHmB,sCCqHqB,yBDnH5D,GAAgB,EAChB,cAAO,YAGR,MAAP,cAAO,GAAS,GAAiB,cAAO,aAAc,GAA/C,EAA2D,cAAO,gBAEzE,OC+SK,GAAW,eDjT4E,6BCiT5D,GDhThC,cAAO,YACA,OAAW,I,yBAGtB,WACW,MAAP,cCyGI,eDzGqB,KCyGgC,KAAX,eAAlB,eDzGc,8BCyG0B,oBDxGpE,cAAO,YAEA,MAAP,cAAO,EAAQ,cAAO,aAAc,GAA7B,EAAuC,cAAO,gBCwShD,GAAW,eDxSwD,2BCwSxC,GDrShC,IAFA,MjxBqD4C,IixBpD5C,GAAoB,EACb,cAAO,e,CACV,GAAgB,EAChB,MAAc,YAEd,GADA,EAAO,UAAI,GACP,cAAO,aAAc,G,CAEd,MAAP,cC6FJ,eD7F6B,KC6FwB,KAAX,eAAlB,eD7FoB,qCC6FoB,yBD3F5D,GAAgB,EAChB,cAAO,YAIR,MAAP,cAAO,GAAS,EAAT,EAAwB,cAAO,gBAEtC,OCsRK,GAAW,eDxRyC,4BCwRzB,GDvRhC,cAAO,YACA,OAAU,I,yBAGrB,YAMI,OAAO,OALO,iBACV,cAAO,aAEH,EAAU,cAAO,mBAAwB,cAAO,aAEhC,I,kBAG5B,WAEwB,IAAb,SADF,cAAO,eAAe,cAAO,aAAK,uCAC1B,cAAO,Y,KAChB,GAAoB,MAAT,KAAgB,cAAO,YAAd,ExwBoBrB,EwwBpBC,M,KACA,EAAa,oBAAqB,GAAlC,M,KACA,EAAY,oBAAqB,GAAjC,M,KACA,EAAgB,sBAAhB,M,KACA,EAAiB,qBAAjB,M,QACe,EAAP,cAAO,aAAK,iDANxB,U,uFCXJ,WACI,UAAU,EAAV,GAAgB,GAAhB,IACI,iBAAU,EAAG,IAGjB,iBAAU,EAAM,IAChB,iBAAU,EAAM,KAChB,iBAAU,GAAM,KAChB,iBAAU,GAAM,KAChB,iBAAU,GAAM,KAChB,iBAAU,GAAK,IACf,iBAAU,GAAQ,IAClB,iBAAU,GAAY,K,+BAG1B,WACI,UAAU,EAAV,GAAa,GAAb,IACI,gBAAS,EAAG,IAGhB,gBAAS,EAAM,IACf,gBAAS,GAAM,IACf,gBAAS,GAAM,IACf,gBAAS,GAAM,IACf,gBAAS,GAAO,IAChB,gBAAS,GAAO,IAChB,gBAAS,GAAW,IACpB,gBAAS,GAAS,IAClB,gBAAS,GAAY,IACrB,gBAAS,GAAU,IACnB,gBAAS,GAAQ,IACjB,gBAAS,GAAY,K,yBAGzB,cACQ,IAAO,KAAa,mBAAkB,EAAJ,GAAiB,GAAF,K,yBAGzD,cAA4C,iBAAY,EAAF,EAAW,I,wBAEjE,cACI,UAAK,GAAK,G,wBAGd,cAA0C,gBAAW,EAAF,EAAW,I,gGAzDlE,0CA4DA,eAAyC,OAAM,EAAF,GAAY,IAAS,UAAO,EAAF,GAAgB,GAEvF,eAA0C,SAAI,EAAI,IAAW,mBAAc,GAAQ,IAG1D,eAAC,gBAEtB,qBAC2B,EAE3B,gBACuB,GAUvB,qBACiC,EAEjC,eACqB,EACrB,cAAqB,EACrB,WAAkB,YAAU,IAGxB,iBCxHR,mBAIiB,MACiD,EAD9D,EAAa,uBACb,EAA8B,GAAP,EAAiC,EAAM,wBAI9D,OAGJ,gBAKI,GAAI,gBAEkD,GAA5B,EAAiB,YAAvC,kB,CACA,MAAe,EAAW,WAAW,WACrC,EAAiB,EAAiB,WAAW,W5wBkGJ,MAAM,G4wBhG3C,iBAAgB,EAAhB,yCAAiE,EAAjE,gFAC8E,E5wB+FL,qJAAA8C,a4wBjHjF,CAAiB,EAAQ,EAAkB,OAAK,sBAAc,oBAE9D,GADW,EAAiB,WAAW,MAEhC,EAsBX,eACI,GAAI,sD5wBuFyC,MAAM,E4wBvFhB,2H5wBuF8CA,Y4wBtFjF,GAAI,c5wBsFyC,MAAM,E4wBtFlB,gI5wBsFgDA,Y4wBrFjF,GAAI,c5wBqFyC,MAAM,E4wBrFhB,iE5wBqF8CA,Y4wBlFrF,iBAOe,QACyB,EAIqB,EAXzD,IAAI,gBAAqD,OAAK,sBAAc,qBACxE,OAAO,EAAa,oBAAY,GAGrB,MAAiB,sBAAjB,EAAsC,EAAa,WCqJlE,IAAI,eACA,MAAM,IACF,EACA,gDAAkD,EAAW,WAA7D,uCAAoF,IDxJ5F,MC2JO,ED1JP,EAAoB,OAAK,sBAAc,mBACvC,EAAW,8BAAS,IAAT,2BACX,EAAuB,OAAa,EAAb,EAAa,wCAAgC,EAAM,IAAnD,EAO3B,cAII,MAAM,IAAsB,EAAI,6CAFxB,QAAc,uCACb,0BAAuB,GAAvB,KAC2E,EAAS,YAVtF,CAAwB,EAAM,GAGrC,OAAY,GAAL,OAAyB,EAAe,EAAU,wBE5DzB,iBAChC,8BACA,uBCIqC,mBAIxB,cAHb,sBACA,cACA,sBAGA,iCAA2D,UAAK,kBAChE,qBAA2B,EAC3B,qBAA4B,UAAK,sBAyMK,iBAGtC,cAFA,gBAGA,iCAAoD,EAAK,kBC5MzD,eAAQ,SAAK,UAAoB,GAAR,kBAGM,qBAKlB,cAJb,kBACA,sBACA,cACA,wBAQA,iCAA2D,UAAK,kBAChE,qBAA4B,UAAK,sBAEjC,qBACoC,EACpC,yBAA+B,EAG3B,MAAQ,YAAK,QACT,8BAC0B,OAAtB,sBAAe,IAAe,sBAAe,KAAO,OACpD,sBAAe,GAAK,OA6JJ,iBAAC,kBAA0C,oBACnE,aAAoB,EACpB,6BAAmB,EAqCkB,iBAAkC,aAAS,EAAI,GApNxF,+DAGI,UAAK,OAAS,EAAQ,GAAO,EAAM,EAAM,GAH7C,EC7BJ,eACI,MAAc,GAAN,EACR,OAAqC,GAA1B,EAAI,GAAK,EAAI,GAAJ,EACd,EAAI,GAAK,GAAT,GAyBV,iBAIsB,IAKJ,EARd,iBAAO,IAGP,IAFA,MAAc,EACd,EAAa,EAAM,OACnB,EAAU,EAAV,EAAkB,EAAlB,I,CACI,MAAiB,EAAT,aAAM,GAGd,KAAI,GAAK,GAAa,SACZ,YAAa,IAAb,CAAV,MAAU,EACV,iBAAO,EAAO,EAAS,GACvB,iBAAO,GACP,EAAU,EAAI,EAAJ,GAEd,iBAAO,EAAO,EAAS,GACvB,iBAAO,IAGX,eAKI,QAAK,GAAL,EAAY,QAAqB,KAC5B,GAAL,EAAY,SAAsB,IAC1B,KC5CZ,mBACsB,IAGyC,EAE3D,OAJI,SADc,EACd,IAAiB,OAAgB,EAAM,GACvC,SAFc,EAEd,IAAgB,OAAoB,EAAM,GAC1C,SAHc,EAGd,OAHc,EAGE,MAAY,OAAqB,EAAM,wB,yBAE9C,gCAAwB,GAGzC,qBAKI,OAA8E,IAAvE,GAAgB,EAAM,EAAS,EAAe,EAAa,YAAY,gCAAwB,GAG9D,iBAGxC,cAFA,sBACA,uBAMA,qBAC8B,UAAK,sBAyHL,iBAAkD,aAAwB,EAAM,GAAnE,uBAGvC,mBAAQ,IAWkB,0BAG9B,UAAyC,WACzC,UAAgD,MAChD,aAAwB,EAAM,GAH9B,uBACA,2BACA,wBAEA,gBAAuB,EAmDK,iBAA+C,aAAgB,EAAM,GAAxD,uBACzC,YAA8B,GAAX,WAAM,MACzB,YAAoC,EAAZ,YAAK,KAAL,EACxB,iBAAuB,EAwBM,iBAA8C,aAAwB,EAAM,GAA/D,uBAC1C,YAAmB,WAAM,KACzB,qBAA2B,EAoB/B,iBAKI,MAAY,0BAAgB,GAC5B,IAAa,IAAT,EACA,MAAM,EAAyB,aAAF,wCAAkD,EAAlD,KACjC,OAAO,ELpRX,mBACI,IACoC,EADpC,WAGA,OAFc,OAAgB,GAAM,gBAAc,OAAZ,IAAS,EAAG,KAC1C,gCAAwB,EAAY,GACrC,2BAIiC,iBAGxC,cAFA,sBACA,sBAMA,qBAC8B,UAAK,sBAEnC,yBAA+B,EAmEpB,wEAAS,cACZ,iCAAoD,OAAK,kBAwCnC,iBAG9B,aAAwB,EAAM,GAC9B,eAAoC,KAGhC,mBAAQ,IAakB,iBAE9B,aAAwB,EAAM,GAE9B,enxBxD0D,ImxBiE9B,iBAAoD,aAAgB,EAAM,GACtG,sCACA,cAAoB,EAqBS,iBAC7B,aAAwB,EAAM,GAC9B,apxBtGgD,I0xBvFvB,qBAA7B,cAA8B,gBAA2B,cAAzD,6BAMI,aACoB,GAAiB,eACrC,WACkB,GAAiB,aATvC,8BACI,kBAAI,GAAW,IACf,mBAAK,GAAY,IACjB,kBAAI,GAAW,IACf,uBAAS,GAAY,IAHrB,6BACA,6BACA,6BACA,6BAJJ,0CAYA,iBAEe,MACP,GADO,EAAL,EAAK,KACP,cADJ,YAEI,gBAFJ,YAGI,e,CAYG,MAFP,EAVuC,EAUL,6BAAqB,GACvD,EAAc,EAAc,KACrB,GAAI,eAA4B,YACnC,WACG,KAAI,wBAAc,uBAGrB,MAAM,GAAwB,GAF9B,OAlBJ,qB,iERoG2B,WAAQ,yBAAc,M,wEAG7C,WAAQ,OAAM,iB,KACV,E,KAAA,E,KAAA,E,KAAA,E,KAAA,GADI,OACyD,E,QADzD,OAEI,M,8KAehB,kEACQ,kBAAc,GAAU,kBAAK,EAAwB,IAAX,mBAAsB,2B,wBAGxE,WAII,OAHI,kBAAc,IAAY,kBAAc,IAAW,kBACnD,sCAAuC,sBAEpC,6B,gCAGX,YACI,OAAW,kBAAc,IAAe,GAAa,kBAAc,GAC9D,2BAA6B,GAD4C,M,8BAIlF,WACI,OAAM,iB,KACF,Q,KACA,GAAW,kBACP,gJACA,sBAFJ,M,QAIQ,kBACJ,kHACA,sBAGR,OAAO,6B,uCAGX,WAEI,OADI,kBAAc,IAAU,kBAAK,6HAAiE,sBAC3F,6B,kCAGX,YACkB,cADa,WAAmB,GAC5B,cAAS,EAAb,EACN,GAAJ,WAAmB,EAAG,EAAI,cAAJ,O,CACf,MAAP,cAAO,EAAU,cAAV,EAAkB,cAAS,cAAT,EAFf,ErwBuC8D,EAAY6F,UAAUoU,EAAYC,GqwBvC9G,QAIA,OADI,GAAS,iBACN,G,sBAGX,YAEQ,MADA,eAAU,WAAI,SAAM,WAAU,GAAJ,WAAW,EAAI,WAAI,OAAR,IACzC,YAAI,oCAAJ,IAAgB,G,2BAGpB,gBAEI,MAAa,EAAU,EAAV,EACb,EAAa,cACb,EAAa,EAAS,EAAT,EACT,EAAS,WAAI,SAAM,WAAU,GAAJ,WAAkB,GAAP,EAAqB,EAAI,WAAI,OAAR,KAC7D,UAAU,EAAV,EAAkB,EAAlB,IAA0B,WAAI,EAAS,EAAT,GAAc,aAAO,EAAY,EAAZ,GACnD,4BAAU,EAAV,G,uBAGJ,WAGI,IAFA,MAAa,cACb,EAAsB,qBACf,EAAkB,EAAO,Q,CAC5B,IACM,EAAS,GADN,aAAO,IAChB,U,KACI,EAAS,QAAT,M,KACA,EAEI,YADA,mBAAY,EAAQ,G,KAGxB,EAEI,YADA,kBAAW,EAAQ,G,QAOnB,OAHA,qBAAqB,EACrB,gBAAkB,OAClB,qBAAuB,EAAkB,EAAlB,IAMnC,qBAAgB,EAChB,gBAAa,I,2BAGjB,cACI,qBAAgB,EAChB,cAAS,EAET,IADA,MAAsB,EACf,EAAkB,EAAO,QAAU,GAAiB,aAAO,MAAqB,IACnF,QAEJ,qBAAuB,EACvB,cAAS,EAAkB,cAAlB,EACT,gBAiHR,kBACI,MAAQ,EAAI,OACZ,GAAI,IAAU,EAAG,OAAO,EACxB,UAAU,EAAV,EAAkB,EAAlB,IAAqB,GAAI,aAAO,EAAQ,EAAR,KAAc,aAAI,GAAI,OAAO,EAC7D,OAAO,EArHc,CAAY,EAAQ,cAAQ,cAAQ,IAAO,GAAa,I,0BAG7E,cACI,qBAAgB,EAChB,cAAS,EACT,MAAsB,EAAgB,EAAhB,EAElB,GAAmB,EAAO,QAC1B,kBAAK,MAAO,GAGhB,IADA,MAAmB,EACZ,aAAO,KAAoB,IAC9B,GAAI,aAAO,KAAoB,G,CAC3B,mBAAY,EAAQ,EAAc,GAClC,MAAkB,iBAAU,EAAQ,EAAkB,EAAlB,GACpC,EAAkB,EAClB,EAAe,OACR,UAAqB,EAAO,QACnC,kBAAK,MAAO,GAGhB,KAAgB,EAAgB,EAAhB,IAEhB,cAAS,EACT,cAAc,EAAkB,EAAlB,IAGd,mBAAY,EAAQ,EAAc,GAClC,eAAc,GAElB,qBAAuB,EAAkB,EAAlB,EACvB,gBAAa,I,yBAGjB,cAG6B,MAFzB,EAAsB,EACtB,EAAyC,EAAjC,EAAkB,EAAO,QA8DjB,kBA9D4C,wCA8D5B,GA7DhC,MAAkB,cAAO,YAAP,IAClB,GAAI,IAAe,GACf,OAAO,iBAAU,EAAQ,GAG7B,MAAQ,GAAyB,EAAZ,GACrB,EAAsB,EAEtB,OAFQ,IAAK,IAuDG,kBAvDyB,oDAuDT,GAtDhC,cAAO,GACA,G,yBAGX,cAG8B,MACO,EACA,EACD,EALhC,EAAa,EAOb,OANA,cAI2C,IAHrC,mBAAY,GAAQ,YAApB,KAAkC,KAC3B,mBAAY,GAAQ,YAApB,KAAkC,IAClC,mBAAY,GAAQ,YAApB,KAAkC,GACnC,mBAAY,GAAQ,YAApB,IAHP,IAKE,G,yBAGX,WACI,GAAI,kBAAc,IAAgB,kBAAc,GAAhD,CAIA,MlxBxNgD,I,GkxB0N5C,OAAM,iB,KACF,E,KAAA,EAA+B,EAAW,UAAI,iBAA9C,M,KACA,EACI,GAAe,GAAX,KAAqB,GAAe,MAAM,GAC1C,qBACA,uBACA,eAEJ,EAAW,iBAAS,EAAW,KAAO,EAAlB,GANxB,M,KAQA,EACI,GAAe,GAAX,KAAqB,GAAc,MAAM,GACzC,qBACA,uBACA,eAEJ,EAAW,iBAAS,EAAW,KAAO,EAAlB,GAIZ,MADhB,iBlxBrGgD,GkxBsG3C,ElxBtG4C1G,gB,QkxB6EjD,kB,sBA4BR,WACI,MAAO,sBAAqB,cAArB,sBAA+C,qBAA/C,gBAA4E,gBAA5E,mBAAuG,qBAAvG,YAA8H,cAA9H,K,0BAGX,cACI,WAD6B,UAAgB,sBACvC,GAAsB,EAAU,EAAS,gB,2JAGnD,qBAAgD,UAAgB,sBACvD,GAAW,kBAAK,IAAW,M,2BAGpC,cACY,EAAkB,EAAO,QAJjB,kBAI4C,uCAAnB,GAC5B,MAAc,aAAO,GAAlC,OACI,IAAG,MAAK,IAAR,qBAAuB,EAAR,GAAkB,GAAlB,EACf,IAAG,MAAK,KAAR,qBAAuB,EAAR,GAAkB,GAAc,GAAhC,EACf,IAAG,MAAK,IAAR,qBAAuB,EAAR,GAAkB,GAAc,GAAhC,EACP,kBAAK,+CAA0B,GAA1B,wB,6FG7UrB,gB,iCAIA,gBAKI,MAAiB,EAAiB,WAClC,iBAAU,EAAY,GACjB,6BAED,oCAA6B,EAAY,I,yBAIjD,cACI,MAAW,EAAW,KACtB,GAAI,eAA2B,kBAC3B,MAAM,EAAyB,oBAAkB,EAAY,YAA9B,qFACJ,EAAnB,qFAGZ,IAAI,8BAKA,cAA8B,aAC3B,eACA,uDAEH,MAAM,EACF,oBAAkB,EAAY,YAA9B,YAAmD,EAAnD,oE,4CAKZ,cAIiC,QAAX,EAAW,cAA7B,UAAU,EAAV,Q,CACI,MAAW,EAAW,uBAAe,GACrC,GAAI,IAAQ,sBACR,MAAM,EACF,8BAA6B,EAA7B,kBAAwD,EAAxD,oM,wCAShB,gB,yHCtDA,yC,4EAKA,sD,+BAIA,WAAuD,OAAuC,IAAvC,GAAW,UAAK,sBAAe,qBAAQ,Q,6CAE9F,YACI,OAAO,QAAmC,I,oCAG9C,YAMiB,IAAN,EALP,EAAmB,GAAL,UAAgB,GAC9B,GAAY,EAAR,EAAQ,SAAS,G,CACV,MAAP,oBJ8GA,eI9GyB,EAAQ,UJ8GoB,KAAX,eAAlB,eI9GoB,iCAAqB,YAArB,WAAgD,OAAhD,IJ8GoB,oBI7GhE,oBAAO,YAEJ,OAAM,EAAN,M,IACH,O,IAAA,M,IAAA,WAAqD,SACjD,UACA,EACA,qBAHJ,M,QAKQ,EAAI,cAAQ,EAAS,KACzB,OAAqB,UAAM,EAAS,qBAP5C,U,kCAWJ,YACI,GAAS,EAAL,YAAK,OAAO,G,CACL,MAAP,oBJ8FA,eI9FyB,YAAK,QJ8FuB,KAAX,eAAlB,eI9Fe,iCAAkB,EAAL,YAAK,MAAlB,IJ8FyB,oBI7FhE,oBAAO,c,+BAIf,WACI,OAAO,oBAAO,aAAc,I,wBAGhC,WACW,MAAP,oBAEA,OJkFI,eIpFqB,KJoFgC,KAAX,eAAlB,eIpFQ,0BJoFgC,oBInFpE,oBAAO,YACA,M,wCAGX,YAMiB,IAAN,EALP,EAAiB,oBAAO,WACxB,GAAI,IAAc,G,CACP,MAAP,oBAAO,GAAwB,IAAhB,oBAAR,EAA4B,oBAAO,gBJ8QzC,GAAW,eI9QiD,2BJ8QjC,GI7Q5B,oBAAO,YAEJ,OAAM,YAAN,M,IACH,OAAkB,yBAAgB,GAAlC,M,IACA,MAAiB,wBAAe,GAAhC,M,IACA,WACI,OAAM,iE,KACF,EAAK,IAAL,M,KACA,EAAK,IAAL,M,QAEI,KALZ,M,QASQ,2BAAkB,EAAY,GAZ1C,U,8BAgBJ,YAQW,MAPP,GAAI,IAAc,IAAY,oBAAe,GAAK,E,CACvC,MAAP,oBJuDA,eIvDyB,KJuD4B,KAAX,eAAlB,eIvDe,sCJuDyB,oBIrDpE,GAAI,oBAAe,GAAK,E,CACb,MAAP,oBJoDA,eIpDyB,KJoD4B,KAAX,eAAlB,eIpDa,6BJoD2B,oBInDhE,oBAAO,YAEJ,GAAK,oBAAO,cAIf,sE,CAHO,QAAP,oBAAO,EAAQ,IAAc,GJiPW,EAAgB,kBACvD,GAAW,eIlP6B,4BJkPb,GIjP5B,KAFJ,U,gCAQJ,cAO+B,MAH3B,EAAwB,EAAW,6BAAqB,GACxD,GAAI,oBAAO,aAAc,KAAY,EAAkB,WAAY,OAAO,EAC1E,GAAI,IAAkB,KAAlB,Q,CACgB,UAAO,EAAP,oBAAO,mBAAW,qBAAc,YACrC,OAAO,EADlB,MAAgB,EAGhB,IAAiB,IADD,EAAkB,wBAAgB,GACnB,OAAO,EAE1C,OAAO,G,iCAGX,cAWwB,MANpB,IAJI,IAAc,IAAa,oBAAO,eAClC,oBAAO,aAAK,6BAGT,oBAAO,e,CACV,4CACA,MAAU,oBACH,EAAP,oBJkBA,eIlByB,KJkB4B,KAAX,eAAlB,eIlBa,eJkB2B,oBIjBhE,oBAAO,YACP,MAAY,EAAW,wBAAgB,GACvB,IAAa,IAAT,E,CAChB,IAAI,qBAAc,oBAAqB,wBAAiB,EAAY,GAGhE,OAAO,EAFP,UAKJ,KASJ,GAhBA,IAUkB,qBAAc,kBAC5B,oBAAO,aAAK,+BAA8B,EAA9B,OAAsC,IAElD,oBAAO,cAGP,oBAAO,aAAc,G,CACrB,oBAAO,YACA,MAAP,oBAAO,EAAQ,oBAAO,cAAf,EAA8B,oBAAO,gBJ+L/C,GAAW,eI/LuD,4BJ+LvC,II5LhC,OAAO,G,+BAGX,YAKW,MAHP,GAAI,IAAc,KAA4B,IAAhB,oB,CACnB,MAAP,oBJZA,eIYyB,KJZ4B,KAAX,eAAlB,eIYgB,qCJZwB,oBIc7D,GAAK,oBAAO,cAIf,sE,CAHO,QAAP,oBAAO,EAAQ,IAAc,GJkLW,EAAgB,kBACvD,GAAW,eInL6B,4BJmLb,GIlL5B,KAFJ,U,2BAQJ,WAKiB,IAKN,EALP,EAAiB,qBAAc,UAC3B,oBAAO,aAEP,oBAAO,4BAEX,UAAO,KAAP,IAAsC,SACtC,oBAAO,aAAK,6CAA4C,EAA5C,M,wBAGhB,WAIyC,QAAP,oBAsDlC,EAAY,e,IAER,EAxD2D,GAwDpD,G,SACT,mBAFF,QAGI,eAAK,0CAAkD,EAAlD,KA1DyB,U,yBAClC,WAA2C,QAAP,oBAqDpC,EAAY,e,IAER,EAvD8D,GAuDvD,G,SACT,mBAFF,QAGI,eAAK,2CAAkD,EAAlD,KAzD2B,U,uBACpC,WAAuC,QAAP,oBAoDhC,EAAY,e,IAER,EAtDwD,EAsDjD,G,SACT,mBAFF,QAGI,eAAK,yCAAkD,EAAlD,KAxDuB,U,wBAChC,WAAyC,QAAP,oBAmDlC,EAAY,e,IAER,EArD2D,EAqDpD,G,SACT,mBAFF,QAGI,eAAK,0CAAkD,EAAlD,KAvDyB,U,yBAElC,WACwB,QAAP,oBAgDjB,EAAY,e,IAER,EvtBzJ2CgtF,EutByJpC,G,SACT,mBAFF,QAGI,eAAK,2CAAkD,EAAlD,KApDL,QAEA,GADgB,UAAK,sBAAc,iCACX,GAAP,GAAmB,OAAO,EACpC,GAAP,oBAAwC,I,0BAG5C,WACwB,QAAP,oBAyCjB,EAAY,e,IAER,EA3C4C,EA2CrC,G,SACT,mBAFF,QAGI,eAAK,4CAAkD,EAAlD,KA7CL,QAEA,GADgB,UAAK,sBAAc,iCACX,GAAP,GAAmB,OAAO,EACpC,GAAP,oBAAwC,I,wBAG5C,WAAyC,QAAP,oBAmClC,EAAY,e,IAER,EArC2D,KAqCpD,I,SACT,mBAFF,QAGI,eAAK,0CAAkD,EAAlD,KAvCyB,U,0BAElC,WACI,OAAW,qBAAc,UACrB,oBAAO,aAEP,oBAAO,oB,kCAIf,YACI,OAA4B,GAAjB,GAAmC,OAA4B,oBAAQ,WAAW,M,gCAGjG,YACI,OAAsB,GAAf,EAAsC,sB,wJAUjD,sD,wCACA,Y/wB1F6C,MAAM,E+wB0FwB,c/wB1FMxgG,a,uB+wB4FjF,WAAuC,QAAP,cAOhC,EAAY,e,IAER,EATyD,GASlD,GzxBlCsBsxB,K,SyxBmC/B,mBAFF,QAGI,eAAK,0CAAkD,EAAlD,KAXuB,U,wBAChC,WAAyC,QAAP,cAMlC,EAAY,e,IAER,EAR4D,GAQrD,G1qBvBwBA,K,S0qBwBjC,mBAFF,QAGI,eAAK,2CAAkD,EAAlD,KAVyB,U,wBAClC,WAAyC,QAAP,cAKlC,EAAY,e,IAER,EAP4D,GAOrD,G1xB1EwBA,K,S0xB2EjC,mBAFF,QAGI,eAAK,2CAAkD,EAAlD,KATyB,U,yBAClC,WAA2C,QAAP,cAIpC,EAAY,e,IAER,EAN+D,GAMxD,GxxB/D0BA,K,SwxBgEnC,mBAFF,QAGI,eAAK,4CAAkD,EAAlD,KAR2B,U,+HC7MpC,yC,4EAUA,sD,uCAeA,YACI,qCAAwB,KAAuB,I,gDAGnD,cACI,OAAO,qBAAc,gB,6CAGzB,c,KJ/C4C,QAJ5C,IAAI,SIoDsB,EJpDtB,KAAmD,UAAK,sBAAc,qB,CIoDhD,EJnDX,uBImDuB,GJlDlC,QAEJ,MAAuB,QAAqB,WIgDlB,EJhDkB,UAA0C,WIgDhD,EJhDgD,WIiD9E,yBAAmB,EJ/C3B,EAAiB,uBI8CqB,S,kCAKtC,YACI,gBAAS,WACT,0BAAa,qBAAc,oBAC3B,gBAAS,cAAM,IACf,gBAAS,QACT,0BAAa,EAAW,a,oCAG5B,YAgBW,QAfP,EAAmB,GAAL,UAAgB,GAW9B,OAVY,EAAR,EAAQ,SAAS,KACjB,gBAAS,cAAc,EAAR,EAAQ,QACvB,gBAAS,UAGT,0BACA,yBAAmB,EACnB,sBAAe,IAGf,cAAQ,EACD,KAGJ,2CAAoB,EAAQ,SAA5B,QAAwC,OAAqB,gBAAU,UAAM,EAAS,wB,kCAGjG,YACa,EAAL,YAAK,OAAO,KACZ,gBAAS,WACT,gBAAS,WACT,gBAAS,cAAW,EAAL,YAAK,Q,mCAI5B,cACU,IAQqB,EAR3B,OAAM,YAAN,M,IACI,OACS,gBAAS,cACV,gBAAS,cAAM,IACnB,gBAAS,WAHb,M,IAKA,MACS,gBAAS,cAWV,qBAAe,EACf,gBAAS,aAXU,EAAQ,GAAK,GAC5B,gBAAS,cAAM,IACf,gBAAS,WACT,OAEA,gBAAS,cAAM,IACf,gBAAS,QACT,MAPJ,uBAFR,M,IAgBA,WACiB,IAAT,IACA,qBAAe,GACN,IAAT,IACA,gBAAS,cAAM,IACf,gBAAS,QACT,qBAAe,GANvB,M,QAUS,gBAAS,cACV,gBAAS,cAAM,IACnB,gBAAS,WACT,0BAAa,EAAW,uBAAe,IACvC,gBAAS,cAAM,IACf,gBAAS,QAGjB,OAAO,G,kCAGX,YACI,OAA4B,GAAjB,GAAmC,OAC1C,OACI,gBAAS,WACT,gBAAS,cACV,UAAM,YAAM,MAEd,M,wBAGT,WACI,gBAAS,cAAM,K,mCAGnB,YACQ,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,I,gCAGzE,YACQ,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,I,iCAGzE,YACQ,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,I,+BAGzE,YACQ,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,I,gCAGzE,YACQ,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,I,iCAGzE,YAGI,GADI,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,IAChE,qBAAc,kCAA0C,GAAN,GACnD,MAAM,GAA4B,EAAO,gBAAS,WAAG,a,kCAI7D,YAGI,GADI,oBAAc,0BAAa,EAAM,YAAiB,gBAAS,cAAM,IAChE,qBAAc,kCAA0C,GAAN,GACnD,MAAM,GAA4B,EAAO,gBAAS,WAAG,a,gCAI7D,YACI,0BAAmB,oBAAN,K,kCAGjB,YAA2C,gBAAS,oBAAY,I,gCAEhE,cACI,0BAAa,EAAe,uBAAe,K,uEAK3C,+C,IAAA,6C,oBAGA,WACI,mBAAe,EAAM,+B,sBAGzB,WACI,+B,sBAGJ,WAEI,GADA,mBAAe,EACX,kBAAK,sBAAc,Y,CACnB,mBAAM,M9wBzElB,I8wB0EY,MAAO,a9wB1EnB,EAAc,EAAd,EAAsBvV,EAAtB,I8wB0E4B,mBAAM,kBAAK,sBAAc,qB,mBAIjD,WACQ,kBAAK,sBAAc,aACnB,mBAAM,K,2BAGd,YAA0B,uBAAG,eAAO,I,2BACpC,YAA4B,uBAAG,eAAO,I,2BACtC,YAA2B,uBAAG,eAAO,I,2BACrC,YAA4B,uBAAG,eAAO,I,2BACtC,YAA0B,uBAAG,eAAO,I,2BACpC,YAA2B,uBAAG,eAAO,I,2BACrC,YAAyB,uBAAG,eAAO,I,2BACnC,YAA0B,uBAAG,eAAO,I,2BACpC,YAA6B,uBAAG,eAAO,I,iCACvC,YAA+C,GAAH,gBAAe,I,sFAK3D,YACI,OAAa,qCAAiB,I1xB2DHqV,G0xB3DR,GAAW,a,2BAGlC,YACI,OAAa,qCAAkB,I3qBsEDa,E2qBtEX,GAAY,a,2BAGnC,YACI,OAAa,qCAAkB,I3xBKDf,G2xBLX,GAAY,a,2BAGnC,YACI,OAAa,qCAAmB,IzxBcCyB,GyxBdd,GAAa,a,0MEpOxC,yC,gDACA,0C,4EAII,WAAQ,iBAAK,qB,6BAKjB,WAA8B,wDAAwB,+BAAxB,QAAgD,Y,+BAE9E,WAAgD,+B,6CAEhD,YACI,OAAO,QAAmC,I,iCAG9C,cAA0E,U,oCAE1E,YAE4B,MAAjB,EADP,EAAoB,uBAEhB,GADoB,EAAX,EAAW,KACpB,cAAoB,c,CAA0C,gBL4JtE,IAAI,SK5J6E,EL4J7E,IACA,MAAM,IACF,EACA,gDK/JwF,EL+J3B,WAA7D,uCK/JyE,IAA/B,WAA+B,QACzE,e,CAA0B,IClB3B,EDkB2B,EAAL,UCpB7B,EDqBY,ECrBsB,6BAAqB,GACvD,EAAc,EAAc,KACrB,GAAI,eAA4B,Y,CDoBN,gBLyJjC,IAAI,eACA,MAAM,IACF,EACA,gDAA6D,aAA7D,2CM/KJ,EDmBU,gBClBP,KAAI,wBAAc,uBAGrB,MAAM,GAAwB,GDgBA,gBLwJlC,IAAI,eACA,MAAM,IACF,EACA,gDAA6D,aAA7D,2CM7KJ,EDkBU,YAHoB,Q,CAKF,gBLsJhC,IAAI,SKtJuC,ELsJvC,IACA,MAAM,IACF,EACA,gDKzJkD,ELyJW,WAA7D,uCKzJmC,IAA3B,WAA2B,GAPvC,U,kCAWJ,c,+BAIA,WAA4C,4C,8BAE5C,YAEW,QADP,EAAqB,4BAAe,GAC7B,qCAAoC,MAAM,IAC7C,EACA,6BAA4B,EAA5B,WAAwC,EAAiB,uBAAgB,YAF7E,OAAO,G,sCAQX,cACI,OAAe,GAAf,EAAsC,sBAAS,GAAK,U,oCAExD,YAAuD,a,2CAEvD,YAA6D,mCAAe,KAAS,M,uCAErF,YAGsB,MAKL,EAsCF,EA7CX,EAAY,sBAAS,GACrB,IAAK,UAAK,sBAAc,YACN,wBACF,SAAU,MAAM,IACxB,EAAI,4BAA2B,EAA3B,0BAAsD,GAAc,uBAAgB,Y,IAI5F,qBADG,IACc,MAAM,KAqCvB,EAAO,SArCP,GAqCO,EAAW,yBAtCC,W,SAuCrB,mBAFF,QAGI,yBAxCmB,WAAvB,U,oCAKJ,YAA2D,MAiC5C,EAjC4C,EAAd,sBAAS,G,IAClD,MAAa,MAgCT,EAAO,SA/BP,IAAU,MAAK,UAAW,GAAK,WAA/B,oBAAiD,GAAP,GACzC,MA8BM,EAAW,yBAjC2C,Q,SAkC/D,mBAFF,QAGI,yBAnC6D,QAAxB,U,qCAM7C,YAA4D,MA2B7C,EA3B6C,EAAd,sBAAS,G,IACnD,MAAa,MA0BT,EAAO,SAzBP,IAAU,MAAM,UAAW,GAAM,WAAjC,oBAAmD,GAAP,GAC3C,MAwBM,EAAW,yBA3B4C,S,SA4BhE,mBAFF,QAGI,yBA7B8D,SAAxB,U,mCAM9C,YAA0D,MAqB3C,EArB2C,EAAd,sBAAS,G,IAqB7C,EAAO,SArB8D,OAqB9D,EAAW,yBArB0C,O,SAsB9D,mBAFF,QAGI,yBAvB4D,OAAxB,U,oCAC5C,YAA2D,MAoB5C,EApB4C,EAAd,sBAAS,G,IAoB9C,EAAO,SApBgE,OAoBhE,EAAW,yBApB2C,Q,SAqB/D,mBAFF,QAGI,yBAtB6D,QAAxB,U,qCAE7C,YAC+B,MAiBhB,EAjBgB,EAAd,sBAAS,G,IAiBlB,EAAO,SAjBqC,OAiBrC,EAAW,yBAjBe,S,SAkBnC,mBAFF,QAGI,yBAnBiC,SAArC,QAEA,GADgB,UAAK,sBAAc,iCACX,GAAP,GAAmB,OAAO,EAC3C,MAAM,GAA4B,EAAQ,EAAK,uBAAgB,a,sCAGnE,YAC+B,MAUhB,EAVgB,EAAd,sBAAS,G,IAUlB,EAAO,SAVsC,OAUtC,EAAW,yBAVe,U,SAWnC,mBAFF,QAGI,yBAZiC,UAArC,QAEA,GADgB,UAAK,sBAAc,iCACX,GAAP,GAAmB,OAAO,EAC3C,MAAM,GAA4B,EAAQ,EAAK,uBAAgB,a,oCAGnE,YAAiE,MAIlD,EAJkD,EAAd,sBAAS,G,IAIpD,EAAO,SAJ8E,KAAR,aAItE,EAAW,yBAJiD,Q,SAKrE,mBAFF,QAGI,yBANmE,QAAxB,U,yBAEnD,gBAEe,M,IAAP,OAAO,iBAAW,yBAAkB,G,SACtC,mBAFF,QAGI,yBAAkB,K,iCAI1B,YACI,MAAM,IAAsB,EAAI,oBAAmB,EAAnB,IAAgC,uBAAgB,a,sCAGpF,YAGsB,MAFlB,EAAY,sBAAS,GACrB,IAAK,UAAK,sBAAc,aACN,wBACD,SAAU,MAAM,IACzB,EAAI,2BAA0B,EAA1B,wBAAmD,GAAc,uBAAgB,YAG7F,OAAO,EAAM,S,wCAGjB,cAEI,OAAO,OAA4B,OAAW,sBAAS,GAAK,SAAU,Y,+HAI/B,0C,wCAM3C,YAAqE,U,oCAErE,YlxBzIA,GkxB0IY,IAAQ,GlxBxIhB,MAAM,EkxBwI2B,6DlxBxIM3yB,YkxByIvC,OAAO,Y,yHAMX,0C,gCAMA,gBAOyB,QAAD,EAHpB,EAAwB,EAAW,6BAAqB,GACxD,GAAI,qCAAe,GAAf,MAAoC,EAAkB,WAAY,OAAO,EAC7E,GAAI,IAAkB,KAAlB,Q,CACgB,mBAAC,yCAAe,GAAf,YAAD,YACL,OAAO,EADlB,MAAgB,EAGhB,IAAiB,IADD,EAAkB,wBAAgB,GACF,OAAO,EAE3D,OAAO,G,wCAGX,YACI,IACiC,MAD1B,gBAAW,EAAW,e,CACzB,IxxBsDqB,EwxBtDrB,EAAsB,oBAAX,GAAkB,wCAAP,IAClB,EAAQ,WAAZ,IxxBqDqB,uBAAmB,kBwxBrDpC,MAAmB,qBAAc,oBAAsB,wBAAiB,EAAY,gBAAW,EAAX,EAAc,IAClG,OAAO,gBAAW,EAAX,EAGf,OAAO,G,oCAGX,YAAwD,OAAM,GAAN,WAAe,I,oCAEvE,YAKI,OAAI,IAAe,sBAAuB,KAC7B,8CAAe,I,kCAGhC,YAKgB,MAJZ,IAAI,qBAAc,oBAAqB,WAAW,KAAX,GAAvC,CAEA,MACuB,GAAX,GACZ,IAAY,aAAM,KAAN,wB,CAAA,eACR,IAAY,EAAR,oBAAiB,IAAO,0BACxB,MAAM,GAAoB,EAAK,WAAM,e,oHAMR,0C,iCAKzC,cACI,MAAQ,EAAQ,EAAR,EACR,OAAO,wBAAK,I,wCAGhB,YACI,KAAO,iBAAW,YAAO,EAAP,IAEd,OADA,oCACO,gBAEX,OAAO,G,oCAGX,YACI,OAAW,gBAAW,GAAK,EAAG,GAAc,GAAgB,GAAN,WAAe,I,kCAGzE,c,uHAK0C,0C,iCAI1C,cAAuE,OAAC,EAAO,Y,oCAE/E,YACI,OAAO,uBAAU,EAAJ,K,wCAGjB,YACI,KAAO,qBAAe,YAAO,EAAP,IAElB,OADA,4CACO,oBAEX,OAAO,G,uHL5PX,yC,4EAKI,WAAQ,iBAAK,qB,uCAOjB,YACI,qCAAwB,KAAuB,I,gDAGnD,cACI,4BAAc,gB,iCAElB,cAA0E,U,wBAK1E,WACc,yCAAoB,OAAO,oBAAa,MAAlD,MAAU,EACV,4BAAiB,I,oCAGrB,YAA6C,wBAAW,EAAK,O,qCAE7D,cAAwD,wBAAW,EAAK,GAAc,K,sCACtF,cAA0D,wBAAW,EAAK,GAAc,K,uCACxF,cAA4D,wBAAW,EAAK,GAAc,K,sCAC1F,cAA0D,wBAAW,EAAK,GAAc,K,uCAExF,cAGI,GADA,wBAAW,EAAK,GAAc,KACzB,qBAAc,kCAA0C,GAAN,GACnD,MAAM,GAA4B,EAAO,EAAK,kBAAa,a,6CAInE,cAEI,GAAI,8BAA4B,WAAW,WAAW,KAAtB,IAAgD,EAAW,WAAW,OAAtB,O,KDrDxC,QAJ5C,IAAI,SC0D0B,ED1D1B,KAAmD,UAAK,sBAAc,qB,CC0D5C,EDzDf,uBCyD2B,GDxDtC,QAEJ,MAAuB,QAAqB,WCsDd,EDtDc,UAA0C,WCsD5C,EDtD4C,WCsDnC,yBAAmB,EDpDtE,EAAiB,uBCoDyB,S,QACU,MAAzC,OAAqB,UAAM,qB3wBStC,E2wBRQ,qC3wBQR,E2wBPQ,kBAAqB,gB,wCAI7B,cAGI,GADA,wBAAW,EAAK,GAAc,KACzB,qBAAc,kCAA0C,GAAN,GACnD,MAAM,GAA4B,EAAO,EAAK,kBAAa,a,yCAInE,cAAgE,wBAAW,EAAK,GAAc,K,sCAC9F,cAA0D,wBAAW,EAAK,GAAoB,oBAAN,M,wCACxF,cAA8D,wBAAW,EAAK,GAAc,K,sCAC5F,gBAII,wBAAW,EAAK,GAAc,EAAe,uBAAe,M,uCAEhE,cACI,wBAAW,EAAK,GAAc,EAAM,c,4EAMhC,sD,uCAEA,YAAmC,qDAAW,iBAAK,OAAY,GAAc,K,+BAC7E,YAAqC,+BAAiC,IvxB4M3CoxB,GuxB5M4B,GAAe,a,gCACtE,YAAuC,+BAAkC,IxqB0N3Ca,EwqB1N2B,GAAgB,a,gCACzE,YAAuC,+BAAkC,IxxB4J3Cf,GwxB5J2B,GAAgB,a,iCACzE,YAAyC,+BAAmC,ItxBwK3CyB,GsxBxK0B,GAAiB,a,+EATpF,cAEI,uB,oCAWJ,YAKmC,MAAjB,EAFL,EAFT,EACQ,4BAA0B,qBACzB,mBAAuC,OAA7B,qBAAW,aAAY,GAAM,IAG5C,GAD2B,EAAX,EAAW,KAC3B,cAAoB,cAAsB,SAAoB,UAAM,QACpE,e,CAA0B,IM/E3B,EN+E2B,EAAL,UMjF7B,ENkFY,EMlFsB,6BAAqB,GACvD,EAAc,EAAc,KACrB,GAAI,eAA4B,YACnC,ENgFU,OAAmB,UAAnB,OM/EP,KAAI,wBAAc,uBAGrB,MAAM,GAAwB,GAF9B,EN+EU,OAAoB,UAApB,GAHoB,SAKlB,SAAgB,UAAM,GAPlC,QAeA,OALI,0BACA,yBAAmB,EACnB,EAAQ,mBAAW,qBAAc,mBAAoB,GAAc,EAAW,cAG3E,G,+BAGX,YACI,oBAAa,oB,+GAgBjB,c7wBtHA,G6wBuHY,IAAQ,G7wBrHhB,MAAM,E6wBqH2B,+D7wBrHM3yB,YAF3C,G6wBwHY,qB7wBtHR,MAAM,E6wBsHqB,yF7wBtHYA,Y6wBuHvC,eAAU,G,wBAGd,WACI,MAAe,e7wBhGnB,GAAa,MAAT9C,EAEA,MAAM,E6wB8FoB,2F7wB9Fa8C,Y6wB8FvC,O7wB5FO9C,G,yG6wBqGX,cACI,enxB6EJ,YmxB7EY,EAAO,I,wBAGnB,WAAyC,cAAW,iB,oIAIpD,W,0CAAA,oB,IAAA,oC,gCAGA,cAEoB,IAAN,EADV,GAAI,a,CAEI,YADQ,EACR,IAA4B,EAAR,EAAQ,YAC5B,aAFQ,EAER,IAAiB,MAAM,GAAwB,KAAqB,YACpE,YAHQ,EAGR,IAAgB,MAAM,GAAwB,KAAoB,Y,0BAHtE,aAKA,cAAQ,M,CAER,uBAAQ,WnxB0DhB,cAAI,EmxB1DmB,GACf,cAAQ,I,wBAIhB,WACI,OAAO,OAAW,iB,wGAOtB,cAA6E,SAAM,Y,gCAEnF,cACI,MAAc,EAAJ,GACV,aAAM,YAAI,EAAK,I,wBAGnB,WAAyC,cAAU,e,sKMrMvD,sB,IAAA,kB,IAAA,mB,IAAA,kB,IAAA,uB,QAAA,0E,6KdwGA,mBAGgB,gBACZ,MAAc,OAAY,EAAK,uBAG/B,OAFQ,EAAR,GAEO,OADI,EAAQ,kB,sjBCqCnB,YAAQ,mDAAuB,KAAM,e,yBAOrC,YAAQ,mDAAsB,KAAM,c,2QnN7FxC,gBA/CI,MAAc,OAqDd,OAAyB,EApDzB,GAoDA,cAAI,EAnDG,EAAQ,U,eA2EnB,gBAK8E,qBAAI,EAAK,GAAc,K,y4GkNqKnE,O,GACO,O,GMxQR,4E,GAEa,gG,GACH,8E,GACK,4H,GAGtB,O,GAGC,G,GACA,G,GACI,I,GACF,I,GACG,G,GACF,G,GACF,G,GACI,G,GAED,GAAF,G,GACI,I,GAGG,E,GACC,E,GACI,E,GACR,E,GACG,E,GACA,E,GACI,E,GACF,E,GACG,E,GACF,E,GACJ,G,GACG,G,GACJ,G,GK3BM,IAC/B,GAAL,cAAkB,WACZ,EAAN,aAAmB,WACb,GAAN,cAAmB,WACZ,GAAP,cAAoB,aCFpB,IADiE,OAA1B,WAAqB,IAArB,MACvC,GAAU,EAAV,IAAa,GAAb,K,CACI,OAAS,GAAU,IAAM,IACzB,GAAS,GAAU,IAAM,GACzB,GAAS,GAAU,IAAM,GACzB,GAAS,GAAU,I/wB0DvB,G+wBzDS,IAAK,0BAAK,IAAL,oBAAQ,IAAR,oBAAW,IAAX,oBAAc,I,O/wByD5B,G+wBvDK,IAAe,M/wBuDpB,G+wBtDK,IAAgB,O/wBsDrB,G+wBrDK,GAAgB,M/wBqDrB,G+wBpDK,GAAgB,M/wBoDrB,G+wBnDK,IAAgB,M/wBmDrB,G+wBlDK,IAAgB,M/wBkDrB,G+wBjDK,IAAQ,M,G/wBkDN,G,G2wB0DwB,YT5H4B,c,q1BpwBQ/D,2B,wB0EqCA,K,yB3E0mDA,c,sFNnlDA,+C2xB7EA,sC,qDAEQ,EAA4B,qBAAK,cAC7B,6C,gCC6BR,SACA,QACA,8B,QAWA,E,UAII,gBAKyC,EAEzC,0BAIA,oC,qFAeY,mC,+BA8CgB,mB,kPAyByC,qF,EAAA,qE,+DD1IzE,E,wKCyGA,mBAhFA,EAgFA,WAhFA,yBAgFA,WA/EA,KAmCQ,sEACY,EADZ,e,OrxBxCJ,4BqxBwCIgE,IAII,Y,2IAcI,gDALR,8EACY,EADZ,e,OrxBrDJ,oCqxBqDIA,IAGI,Y,4FAIR,YAOA,K,sCAEA,wDAKA,E,kLAIkC,E,WAAA,S,etxB4jDtB,Y,oCADhB,EAAIrF,KAAA,mB,KACJ,M,GAAgB,e,aAAM,GsxB5jDkC,E,QtxB6jDxD,I,eAAA,a,uCsxB7jDI,KACA,SAE4B,W,StxByjDhB,E,EADZA,KAAA,6B,EAAiC,E,sBACf,E,GAAwB,e,aAAA,K,wCsxBzjD1C,GAA4B,SAA5B,oB,MAGJ,Q,yBAII,GAGgC,sB,iCAA5B,E,IACA,W,OACA,sBAGO,YAAY,wBAAZ,YACX,MAGmE,a,IAAA,I,OAAA,0F,iIAC3D,YAAQ,StxBgpDJ,W,kBAAAA,KAAA,S,iBsxB9oDsB,6BAAR,2C,KAAyB,W,uJACN,iB,6JAMjC,6BAF0B,uBAE1B,2B,MAAmB,yBACQ,EAAnB,0BAAQ,sBAAiB,gBAAN,a,eAG/B,oDAAY,mBAAZ,wB,GAAA,6B,0EAbA,E,gUAgB6D,2B,oGAC7D,gBAAI,oEAA0B,S,2FAEK,uBAAjB,gBAAA0b,QAAA,gC,OAAA,e,yCAAlB,2BAAkB,kBAAlB,G,iHAGyB,gBAAR,sBAAmC,kB,6BAAA,gE,8BAApD,eACA,mBAAe,oCAAsB,EAAM,MAC3C,kB,gCAAA,c,cAPA,aAOA,E,mVAVJ,EAEiE,oB,qCAlBrE,mB,qCAkBqE,0B,OAAA,E,EAAA,W,aAA3D,aAAiB,6C,0BAjC/B,O,gBAAA,EA+CJ,c,yBA/CI,6DAoDJ,E,wGCtJmD,E,2CCfnD,sBAII,sB,k9B7TVJ,W,qvB3dm+CA,qD,EAAA,4C,4ByxBx6CI,cACqB,cAAqB,aAApB,YAGN,uBACZ,UAAoC7D,UACpC,UAAmB,SACnB,eAFA,eACA,YACA,wBAEJ,sFACI,mBAAO,qBAAP,0BAAO,0BCvCkB,gBAMD,MAHZ,yBAAoB+sF,EAAkB,yBAAgB7gC,EAEtE,aCRA8gC,GDSI,KAAAC,eCTJ,ODS4B,kBAED,MACJ,EAFf,OACmB,IAAAC,aACJ,IAAAC,SAEb,IAJFC,GAAA,EAGuB,EAAAC,iBAHvB,GAIEC,aAGV,sBAAyC,EAAN,cCxBvC,mBhUnBuB,MgUoBF,EhUpBjB,EAAmB,uBgUoBPxjG,KhUpBO,qBgUoBnB,OhUnBI,UACA,GgUkBa,eAAE,WAAAyjG,GAAY,ShUjB3B,cgUiBQzjG,EhUjBC,IAGN,EgUeF0jG,MAOoC,eACzC,a,eCTA,eAC2B,iBAAqD,cAApD,kBAAwB,oBAC9B,eAAqB,cAApB,YACM,eAA8C,cAA7C,gBAC1B,sBAAsB,c,43BHmCtB,WAAkB,kB,yBAAlB,8BAAkB,oB,qBAAlB,iBAAkB,qCAAlB,K,qBAAA,0BAAkB,gC,mBAAlB,mHAAkB,4B,sIAGtB,WACI,qB,uBADJ,WAEI,kB,uBAFJ,WAGI,8B,wBAHJ,kCACI,0BACA,uBACA,gC,qBAHJ,iBACI,0CACA,gCACA,wDAHJ,K,qBAAA,0BAGI,MADA,MADA,mCACA,yBACA,qC,mBAHJ,mHACI,kCACA,4BACA,oD,wEAEJ,4B,kBAAA,sB,IAAA,mB,IAAA,qB,QAAA,iF,gICxBA,2C,iCAEA,YACQ,EAAAC,oBAAqB,KAAAC,WAAW,eAAgB,MAAcr9B,IAC7D,KAAAg9B,iBAAiB,oC,uCAG1B,YACI,aAAMM,OAAc,OAAQt9B,K,mCAGhC,YACI,aAAMs9B,OAAc,OAAeC,K,8BAGvC,cAAuD,YAAArmE,IAAI,kBAAU4xB,EAAV,I,+EA1B3C,oE,wEAAA,6D,mEAAA,wD,qEAAA,0D,mCAAA,2F,kEAAsC,uD,6DAAA,kD,oEAAA,yD,0EAAA,+D,sEAAA,2D,gGCDtD,WACI,KAAAq0C,MAAMvZ,W,wJCXN,WAAwB,wB,wBAAxB,WAAgD,0B,0BAAhD,iCAAwB,6BAAwB,4B,sBAAhD,iBAAwB,uDAAwB,gDAAhD,K,sBAAA,0BAAgD,MAAxB,sCAAwB,iC,oBAAhD,mHAAwB,wCAAwB,4C,oFAChD,WAAmB,kB,0BAAnB,+BAAmB,oB,sBAAnB,iBAAmB,sCAAnB,K,sBAAA,0BAAmB,gC,oBAAnB,mHAAmB,4B,2FACnB,WAA0B,sB,0BAA1B,+BAA0B,wB,sBAA1B,iBAA0B,qDAA1B,K,sBAAA,0BAA0B,oC,oBAA1B,mHAA0B,oC,6EAE1B,sBAAkB,c,+OznB+EJ,0E,iBAAA,E,wBsBzDV,gB,+OexBgG,yE,wEAH5G,G,iFAAA,kBAGkG,S,4CAIlG,S,QAAA,uE,YrCqEA,iB,MAMW,mC,EACH,wD,kgBAPR,S,cAOQ,a,MAAA,M,qEAPR,gD,8BsBjDY,qB,2JAEJ,mB,uHAAe,Y,sDAAA,yC,4KACnB,qB,KAHQ,E,GAAA,e,cAAA,mI,SAAA,E,8CALZ,qB,QLOA,uE,YAAA,iB,MAoB8C,mC,EApB9C,wDKHwB,c,OAAA,gB,MAAA,oB,SAAA,E,+LE+NyB,sBkmB1OP,mBAkBlC,c,EAjBJ,sBACA,0BACA,kBAcA,oBACI,gIAGgB,EAAA1lB,YAAYC,SAH5B,MADJ,W,EAKc,GrlBvClB,kB,yDqlBkCI,SAVI,uDAEI,yBAAiC,iBAAa3kE,OACnC,sBACQ,MACA,IAAAgkG,EAAA,CAAmBjqC,IAHQ,iBAIxB,Y,kBAJwB,eA6CtD,uBAxBA,eAC0B,eAAoC,cAAnC,aACG,eAA8C,cAA7C,gBACL,eAAqB,cAApB,YAG3B,6BAAmCkqC,EAAA,WAEV,+I,MAAA,c,OAAA,sBADrB,yEAiBJ,sBzmBrBA,c,mDAAA,a,0GKtBsB,c,mSAAF,S,cAAA,e,UAAA,wC,wEe9BiF,wDb6PxD,sC,OAAA,0B,2GkmBjOrC,yD,gEAAA,oD,oBAAA,uD,qBAAA,sD,oBAAA,uD,oBAAA,uD,8DAHR,WACI,qB,wFAwBA,WAAuB,mB,0BAAvB,+BAAuB,qB,sBAAvB,iBAAuB,4CAAvB,K,sBAAA,0BAAuB,iC,oBAAvB,mHAAuB,8B,4FACvB,WAA2B,sB,0BAA3B,+BAA2B,wB,sBAA3B,iBAA2B,sDAA3B,K,sBAAA,0BAA2B,oC,oBAA3B,mHAA2B,oC,wFAC3B,WAAuB,kB,0BAAvB,+BAAuB,oB,sBAAvB,iBAAuB,0CAAvB,K,sBAAA,0BAAuB,gC,oBAAvB,mHAAuB,4B,oNAKF,W,uCACb,qDAAgB,OAAY,gBAA5B,E,wYAFR,W,uCACI,M,UAAA,oBAAAC,S,0DAAiB,gB,0CAAR,mB,2EAAA,gB,wRADb,kB,MAAA,mB,OAAA,sB,kCAMA,gBAEQ,SADEC,EACF,IAA0BC,EAAaD,EAAOE,WAAYF,EAAOG,cACjE,SAFEH,EAEF,IAA0BI,IAC1B,SAHEJ,EAGF,IAAsBK,IACtB,SAJEL,EAIF,IAAqB,sBAAgB,OAAmBA,EAAO39B,OAC/D,SALE29B,EAKF,KAA4B,sBAAgB,OAAgBA,EAAOJ,Y,oFAM3E,cAEQ,gBADE1gG,EACF,IAAyB,cAAeA,EAAOwkE,OAC/C,SAFExkE,EAEF,IAAyB,qBAAYA,EAAOmjE,MAC5C,SAHEnjE,EAGF,IAA6B,4BAAwBA,EAAO0gG,UAHhE,yB,2EAlCM,2F,MAAA,Y,OAAA,qB,2JAAA,W,uC7xBg7CP,IAuEM,EAvEN,EAAM,EAAa//E,E6xB/6Cd,c7xB+6CsC,KAuElD,IAAa,E6xBt/CD,c7xBs/CC,wB,CAAA,eACT3O,EAAY,U6xBr/CI,IAAAovF,E7xBq/CUlvF,E6xBr/CKo2C,G7xBq/CLp2C,E6xBr/CSb,K7xBq/CTa,E6xBr/CetW,K7xBq/CfsW,E6xBr/CqBixD,K7xBq/CrBjxD,E6xBr/C2BgwD,S7xBq/C3BhwD,E6xBr/CqCmvF,aAFvD,O7xBw/CLrvF,E,inByxB1+CX,cAEI,WAAAsvF,EAAmBzB,EAAkB7gC,K,qPGlDjC,0C,yCACA,0C,stBjmBmNJ,wC,qhBmmB7N6B,gCAAkB,OAAhB,EAAAuiC,QAAQ,gBAAQ,GACtB,iCAAoB,OAAlB,EAAAA,QAAQ,YAAM9sF,GAAI,GALhC,+JCOsF,cAK/D,WAJpC,IAAA+sF,MAAgC,EAAAngC,YAAYogC,MAG5C,yBAAwBj6C,IACxB,yBAAoC,kBAAE,OAAUI,EAAV,uBAAyB5pC,QAC/D,qBAAoB0jF,EAAeF,GAOlB,8IAiBA,8I,4LDrCJ,W,uCACT,MACI,oDACI/a,EACiB,wBACJ,0B,GAIrB,e,cAAAkb,EAAW,KAAX,4BAAW,Y,sBAAX,UAAW/a,IAAX,wB,OAAA,W,qCARA,OAQA,c,gOCMJ,YACmBl/B,EAAfzsD,KAAK,oBAAqB2mG,I,sJAIb,W,0CACT,e,cAAA,qDAAc,0BAAQ,mDAAtB,wB,OAAA,W,qCAAA,qB,wOAFR,YACiB,QAAPzgC,EAAN,0BAAM,UAAO,2B,MAAA,oB,OAAA,yB,iCAKjB,kB,sJAYiB,W,0CACT,e,cAAA,sDAAc,0BAAQ,mDAAtB,wB,OAAA,W,qCAAA,qB,wOAFR,YACiB,QAAPA,EAAN,0BAAM,UAAO,2B,MAAA,oB,OAAA,yB,kCAKjB,kB,oBAWA,WACU0gC,EAAN,uB,6BAGJ,YAQcj6C,EAAV,0BAAyBk6C,SAAS9hG,I,4BAGtC,YAOc4nD,EAAV,0BAAyBm6C,QAAQC,I,yRC3ErC,YAAQ,OFARC,GAAa,cEAE,c,sBFAF,oB,MAAA,oB,OAAA,iC,umBnUZjB,W,swBheuFA,0C,EK0KA,2C,EAodA,2C,EA8wBA,qD,EAAA,4C,4BiyBh6CI,cACI,oBAAkB,a,wuBAAlB,sCAEY,uBACZ,UAAwC,WACxC,UAAmB,SACnB,UAAoCnvF,KAFpC,mBACA,YACA,iBC7CyB,gBAMD,MAHZ,yBAAoB+sF,EAAkB,yBAAgB7gC,EAEtE,aCNA8gC,EDOI,KAAAC,eCPJ,MDO4B,kBAEL,MACI,EACF,EACU,EAJ3B,OACe,EAAL,EAAK1lE,IACI,IAAA2lE,aACF,IAAAkC,WACU,IAAAC,qBAGzB,IAPFC,GAAA,MAKW,EAAAj/B,KACY,EAAAg9B,iBANvB,GAOEC,aAGV,sBAAyC,EAAN,cCzBvC,kBxUnBuB,MwUoBF,ExUpBjB,EAAmB,uBwUoBPxjG,KxUpBO,oBwUoBnB,OxUnBI,UACA,GwUkBa,eAAE,WAAAyjG,EAAY,SxUjB3B,cwUiBQzjG,ExUjBC,IAGN,EwUeF0jG,MAOoC,cACzC,a,cCRA,cACyB,eAAqB,aAApB,YACE,eAA4B,aAA3B,aACE,eAAsC,aAArC,iBAC5B,sBAA+B,a,sIH4CnC,WACI,yB,uBADJ,WAEI,kB,uBAFJ,WAGI,uB,yBAHJ,kCACI,8BACA,uBACA,yB,qBAHJ,iBACI,kDACA,gCACA,0CAHJ,K,qBAAA,0BAGI,MADA,MADA,uCACA,yBACA,8B,mBAHJ,mHACI,0CACA,4BACA,sC,gIC5BJ,2C,yCAEA,YACI,aAAMG,OAAc,OAAiBt+B,K,sCAGzC,YACI,aAAMs+B,OAAc,OAAcn8B,K,0BAGtC,WACI,KAAA+9B,WAAW,qB,oCAGf,WACI,aAAM5B,OAAA,O,8BAGV,cAAuD,YAAApmE,IAAI,kBAAU4xB,EAAV,I,+EAhC3C,oE,wEAAA,6D,mEAAA,wD,qEAAA,0D,mCAAA,2F,6DAAsC,kD,8EAAA,mE,oEAAA,yD,8DAAA,mD,oEAAA,yD,0EAAA,+D,sEAAA,2D,+FCCtD,WACI,KAAAq0C,MAAMvZ,W,oJCVN,WAAsB,kB,0BAAtB,+BAAsB,oB,sBAAtB,iBAAsB,yCAAtB,K,sBAAA,0BAAsB,gC,oBAAtB,mHAAsB,4B,yFACtB,WAAyB,mB,0BAAzB,+BAAyB,qB,sBAAzB,iBAAyB,8CAAzB,K,sBAAA,0BAAyB,iC,oBAAzB,mHAAyB,8B,4FACzB,WAA4B,uB,0BAA5B,+BAA4B,yB,sBAA5B,iBAA4B,yDAA5B,K,sBAAA,0BAA4B,qC,oBAA5B,mHAA4B,sC,qFAC5B,0CCQkC,yBACtC,aACA,sBACA,oBACA,cACA,0BACA,8BAEA,YAAatnB,IAET,uDAEI,yBAAiC,iBAAa9iE,OACnC,sBACQ,MACA,IAAAgkG,EAAA,CAAmBjqC,IAHQ,iBAIxB,Y,kBAJwB,eAuDtD,uBA/CA,eAC4B,iBAAuE,cAAtE,cAAiC,iBAChC,eAAiC,cAAhC,YACD,eAA2B,cAA1B,YAG/B,6BAAmCkqC,EAAA,WAKQ,oO,MAAA,kB,OAAA,sBAHvC,+FAUA,mHA6BJ,sB,mMAvDQ,yD,gEAAA,oD,oBAAA,uD,qBAAA,sD,oBAAA,uD,oBAAA,uD,6DAHR,WACI,qB,0FAWA,WAAyB,oB,wBAAzB,WAA0D,uB,0BAA1D,iCAAyB,yBAAiC,yB,sBAA1D,iBAAyB,gDAAiC,0CAA1D,K,sBAAA,0BAA0D,MAAjC,kCAAiC,8B,oBAA1D,mHAAyB,gCAAiC,sC,4FAC1D,WAA2B,kB,0BAA3B,+BAA2B,oB,sBAA3B,iBAA2B,8CAA3B,K,sBAAA,0BAA2B,gC,oBAA3B,mHAA2B,4B,4FAC3B,WAA2B,kB,0BAA3B,+BAA2B,oB,sBAA3B,iBAA2B,8CAA3B,K,sBAAA,0BAA2B,gC,oBAA3B,mHAA2B,4B,oNAQY,W,uCAC/B,4CAAA1gC,OAAO,UAAE,eAAI76D,KAAKjG,WAAY,2BAC9B,MAA4C,mEAArB,8BAAW+iE,UAA+B,gBACjE,OAAImgC,E3yB6JyC1vF,W2yB7JV,8CAAgB,OAAgB0vF,IACvE,E,wYAPJ,W,0CACI,e,cAAA,gCAAqB,OAAW,0BAAO,oBAAvC,wB,OAAA,W,wCAEqB,e,cAAAC,EAArB,yCAAmC,qDAAd,wB,OAAA,W,gQAHzB,kB,MAAA,mB,OAAA,sB,2JAUA,W,uCACU,IACiC,EAAnC,YADE,kBACF,I,IAAmC,e,cAAX,+BAAW,cAAM,yBAAN,wB,OAAA,WAMnC,YAPE,kBAOF,I,CAEyB,IryBouBrB,EqyBpuBqB,EAAjB,kBAAOpgC,UryByoBpB,EAAS,IA2FhB,IAAgB,4B,CAAA,eqyBpuB8B,EryBouBVtwD,EqyBpuBaoyD,WAAH,kBryBouBAjyD,EAAY,UAAIH,GqyBruB9C,MryBsuBTG,EqyBpuBS,G3yB2JT,M2yB3JawwF,K3yB2JQ5vF,U,C2yB3JmB,qCAAiB,2BAAhD,e,YACK,e,cAAA6vF,EAAeD,EAAW,+BAAY,wBAAtC,wB,OAAA,WAST,YApBE,kBAoBF,I,IACI,e,cAAAC,EAAe1vF,EAAO,kBAAOuxD,OAAQ,+BAAY,wBAAjD,wB,OAAA,WAGJ,SAxBE,kBAwBF,IAAmCo+B,I,wBAJnC,e,8CAEI,4BAAgB,OAAgB,kBAAOp+B,MAAM,6GAFjD,e,gBAbA,e,gBAGI,e,gBAG4B,IryB29C/B,EqyB39C+B,EAAjB,kBAAOnC,UryBo5C3B,EAAM,EAAaxhD,EAAwB,OAuElD,IAAa,4B,CAAA,IACO,EADP,W,EACT,E,eqyB39CgB,GAAI,EryB29CMzO,EqyB39CH+xD,WAAH,iB,CACA,EryB09CM/xD,EqyB19CQ,2GAAd,QADJ,EryB29CUA,Q,GAAd,OAAZ,EAAY,GqyB59CA,MryB69CT,E,oBqyBx9CoG,EAAjC,yCAAqBywF,YAA/E,4BAAgB,OAAqB,yBAAL3vF,EAAqE,GryB2KnF,KAAW,cqyB3KwE,G1yBGnE,O0yBdtC,e,gBANA,gB,gBAAwB,UAAW,iB,mBAAiB,wBAChD,YAAoCyf,EAAV,EAAA0vC,WACoB,QAAAA,UAAgE,EAAjC,yBAAqBwgC,Y,GAAlG,4BAAiB,SAAuC,2BAAgE,GryB0LtG,KAAW,cqyB1L2F,G1yBkBtF,O0yBjBlC,e,cAAA,iF,OAAA,WAHoB,e,gBAAA,e,gBAAxB,gB,yQAFR,kB,MAAA,mB,OAAA,sB,oFA8BA,cAEQ,gBADE3iG,EACF,IAA2B,eAAmBA,EAAOA,OAA6C,EAAAmjE,KAAzBnjE,EAAOmiE,WAChF,SAFEniE,EAEF,IAA6B,6BAAiBA,EAAOgT,MACrD,SAHEhT,EAGF,IAA6B,yBAAgBA,EAAOkS,MAHxD,yB,+BAMJ,cACkC,IryBm8CzB,EqyBn8CyB,EAAf,EAAKiwD,UryB43CrB,EAAM,EAAaxhD,EAAwB,OAuElD,IAAa,4B,CAAA,eACT3O,EAAY,UAAc,EqyBp8CiBknB,OAAvC,MryBq8CDlnB,EqyBr8CgD,cAAQE,EAAKgnB,OAC5D,IAAiB,IAAbltB,E,KACkD,EAAhBymB,EAAV,EAAA0vC,WAAxB,OlyBhCZ,EkyBgCsE,iBAAnD,oB,SlyB/BZ,GkyBiCC,OAAO,G,+GAGf,cAIqB,MryBw7CR,EAvEN,EAAM,EAAaxhD,EqyBp3CN,EryBo3C8B,KAuElD,IAAa,EqyB37CO,EryB27CP,wB,CAAA,eACT3O,EAAY,UAAcE,EqyB57CIgnB,OAA9B,MryB67CGlnB,EqyB57C6C,E3yB9BA,ISM9C,EkyBwBwD,kBAA1D,MlyBvBG,EkyByBH,IAAiB,EAAAzS,E1yB+PuFgc,QAAQ/I,W0yB/P/F,a,CAAA,IAGuD,cAHvD,WlyBZd,EkyBaCowF,EAAU,cAAQC,EAASjmG,MACN,IAAboP,IACY,EAAA04D,EAAA,EAAU14D,GAAsC,IAAA1P,MAAkB,kBAAC,WAAS,IAAAA,MAAT,WAAD,mBAA6DwmG,EAAA,YAAY92F,GAAU41D,SAAjK,yHACIkhC,EAAA,kBAMhB,OAAOA,G,gUJtDf,cAEI,WAAAC,EAAmBlD,EAAkB7gC,K,ovBvyBIzC,2C,EuG0TA,iC,EvC3RI,yC,suBEgCJ,K,E3DZA,4C,oGqyBlIe,uBAAuB,WAAyC,GAA/D,gBAAsB,iCAAgD,a,cA+CtE,uBACZ,UAAqB,SACrB,WAA4B,QAC5B,UAA6B,MAC7B,cAHA,cACA,oBACA,cAEA,a5yBiCoD,I4yB/BpD,e5yB+BoD,I4yBrBpD,qB5yBqBoD,I4yBpBpD,0B5yBoBoD,I6yBvFxD,cACI,I5uByrBM,E4uBzrBN,EAAQ,E,K7uBqHJ,IAAIn+C,ECokBR,EDpkBgB,gBACZ,GAAa,MAATA,E,CAAe,EAAa,EAAAzhB,WAAb,QAEnB,IAAI4iB,EAAY,EAChB,EAAmB,EAAApiB,OACnB,EAAS,EAAcA,G,GAEnB,MAAiB,EAAAihB,GACjBoB,EAAG,iBAAcD,EAAWE,EAAWC,MAAM1T,OAC7CwT,EAAG,e6uB7HP,I7uB6HwBC,E6uB7HjB,MhyBgLqD,emDlDxDF,EAAYE,EAAWC,MAAMlN,aAAe,EAAhC,EACZ4L,EAAQqB,EAAWvP,aACdqP,EAAYpiB,GAAmB,MAATihB,GAE3BmB,EAAYpiB,GACZqiB,EAAG,iBAAcD,EAAWpiB,GAGhC,EAAOqiB,EAAG7iB,iB,G6uBvId,O5uByrBA,E4uBrrBJ,gBAA4C,WAAO,GCL9B,cACjB,KADgD,aAAS,GAAvC,uBAClB,qBACI,UAAW,MAAgB,QAC3B,UAAW,MAAgB,QAC3B,aAAc,MAAgB,WAC9B,aAAc,MAAgB,WAC9B,eAAgB,MAAgB,aAChC,mBAAoB,MAAgB,kBACpC,eAAgB,MAAgB,cAChC,gBAAiB,MAAgB,eACjC,gBAAiB,MAAgB,eACjC,gBAAiB,MAAgB,eACjC,gBAAiB,MAAgB,e,mC5yB6BzC,qC,mtC0yBvCA,WAAgB,sB,uBAAhB,WAAsC,uC,uBAAtC,WAAsF,mB,yBAAtF,kCAAgB,2BAAsB,4CAAgD,qB,qBAAtF,iBAAgB,2CAAsB,0EAAgD,kCAAtF,K,qBAAA,0BAAsF,MAAhD,MAAtB,oCAAsB,8CAAgD,0B,mBAAtF,mHAAgB,oCAAsB,sEAAgD,8B,+BAGlF,cACI,ItyB4vDY,E6GllDA,E7GklDA,EsyB5vDZ,EAAoB,ItyB4vDxB,IAAgB,EsyB3vDZ,WtyB2vDY,wB,CAAA,esyB3vDK,EtyB2vDQ,EsyB3vDR,aAAU,EtyB2vDF,EsyB3vDE,aAA2B,EtyB2vD7B,EsyB3vD6B,aAClD,IAAmB,oBAAY,G,CAC3B,MAA0B,MACtB,QACe,EACF,EAAJ,KAAuD,M3yBuOhF,c2yB1O0B,E3yB0OjB9C,G2yBnOI,EADM,cAAc,KzrBiKjC,IAAgB,EyrB7JZ,E3yB2VgFif,QAAQ/I,WkH9L5E,a,CAAA,eyrB5JR,iBzrB4JqB,EyrB5JR,IzrB4JQ,QyrB3JrB,iBzrB2JqB,EyrB3JX,OACV,iBAAO,OtyB4uDf,IAAgB,EsyBzuDZ,gBtyByuDY,wB,CAAA,esyBzuDU,EtyByuDG,EsyBzuDH,aAAU,EtyByuDP,EsyBzuDO,aAA2B,EtyByuDlC,EsyBzuDkC,aAKrD,EAJiB,MACX,QACe,EACF,EAAJ,KAAuD,MAChE,EnyBgDhB,GmyBpDQ,MnyBqDD,EmyB/CC,iBAAS,UACT,iBAAO,GACP,iBAAO,S,yBAOf,cAA6C,yBAAK,GAAsC,OAA3C,EAA0D,I,iCAEvG,kBACqD,MAAjD,MAAK,EAAU,EAA2B,GAA1C,OACK,EAAgB,gBAAgB,YAAO,UnyBiChD,GACO,G,yBmyBnCH,oB,YAD2D,WAAsB,GAArF,iD,oFAeA,WrsBwVuB,IYlOP,EZkOO,EAAhB,IYlOP,IAAgB,EyrBrHZ,kB3yBmTgF+I,QAAQ/I,WkH9L5E,a,CAAA,e1GlGhB,EmyBlBQ,eAAiB,EzrBoHIX,EyrBpHR,KAAN,KzrBoHcA,EyrBpHe,MAA7B,WAAU,OAFC,OAKtB,wBnyBeJ,EmyBfe,anyBgBR,E8FmUqCzS,Y,+DqsBhV5C,0C,oEACA,+C,2BAEA,cACI,yBAAK,GAAkC,OAAvC,EAAsD,I,2BAE1D,cAAkD,qCAAQ,I,2BAE1D,YAE6B,sCAAW,I,4BAExC,YAA8B,uCAAY,I,4BAC1C,YAA8B,uCAAY,I,6BAC1C,YAA+B,wCAAa,I,0BAC5C,YAA4B,qCAAU,I,4BACtC,YAA8B,uCAAY,I,+BAC1C,YAAiC,2CAAgB,I,gCACjD,YAAkC,6CAAkB,I,0BACpD,YAA4B,qCAAU,I,gCACtC,YAAkC,4CAAiB,I,0BACnD,YAA4B,qCAAU,I,kCACtC,YAAoC,6CAAkB,I,4BACtD,YAA8B,wCAAa,I,4BAC3C,YAA8B,uCAAY,I,8BAC1C,YAAgC,0CAAe,I,+BAC/C,YAAiC,4CAAiB,I,yBAClD,YAA2B,oCAAS,I,wBACpC,cAA4C,oCAAQ,EAAR,IAAmB,I,6BAC/D,cAAiD,0CAAc,EAAd,IAAyB,I,iCAC1E,cAAqD,+CAAmB,EAAnB,IAA8B,I,kCACnF,cAAsD,iDAAqB,EAArB,IAAgC,I,8BACtF,cAAkD,4CAAgB,EAAhB,IAA2B,I,8BAC7E,YAAgC,0CAAe,I,+BAC/C,YAAiC,4CAAiB,I,6BAClD,YAA+B,wCAAa,I,+BAC5C,YAAiC,4CAAiB,I,6BAClD,YAA+B,yCAAc,I,8BAC7C,YAAgC,0CAAe,I,6BAC/C,YAA+B,wCAAa,I,0BAC5C,YAA4B,qCAAU,I,4BACtC,YAA8B,uCAAY,I,6BAE1C,cACyD,YAA5C,UAAoB,MAAwB,4BAAO,UAAY,KAAM,I,gCAElF,cAA4D,YAA5C,UAAoB,MAAwB,0BAAK,UAAY,KAAM,I,kCAEnF,cAAsD,2BAAE,EAAF,WAAoB,I,0BAE1E,YAC4B,uCAAW,gBAGvC,OAFI,KAAa,GAAH,KACV,KACJ,KAHuC,O,2BAKvC,YAA6B,wCAAY,gBAGzC,OAFI,KAAa,GAAH,KACV,KACJ,KAHyC,O,gCAKzC,YACI,qCAAiB,GACjB,mDAA+B,GAC/B,0CAAsB,GACtB,+CAA2B,GAC3B,yCAAqB,I,0BAGzB,cAC8C,gCAAI,EAAU,I,4BAE5D,cAAgD,gCAAI,EAAU,I,oCAE9D,cAAwD,gCAAI,EAAU,I,8BAEtE,YACgC,+BAAI,I,8BAEpC,YAII,OAFA,WAAM,iBAAe,EAAN,aACf,mBAAM,EAAK,SAAU,EAAK,OACnB,G,wBAGX,YACI,WAAM,iBAAe,EAAN,aACN,MAAT,WAAS,EAAQ,EAAM,cAAvB,oB3uBuhB4E,EAAM,gBAAQ,E2uBvhBpD,cAAc,U,8BAGxD,YACI,WAAM,iBAAe,EAAN,aACf,yBAAI,WAAU,U,6BAGlB,cACI,YADS,UAAmB,GACrB,kBAAS,EAAJ,IAAW,IAA0C,OAA1D,EAAwE,I,2BAGnF,cACI,oBAAE,EAAF,KAAc,I,0BAGlB,cAC2C,qCAAS,EAAO,I,6BAE3D,cAA8C,wCAAY,EAAO,I,6BAEjE,YAA+B,yBAAK,cAA0C,GAAoB,EAAc,I,2BAEhH,YAC2E,MAAvE,mBAAM,iEAAiE,gBAEvE,OADI,KACJ,M,yBAGJ,YAEY,MAAR,6BAAQ,gBAER,OADI,KACJ,M,sCAGJ,cACI,iBAAI,KAAI,EAAO,EAAM,Q,wBAGzB,cAEI,aAAgB,OAAM,EAAN,KAAW,EAAX,O,wBAEpB,cACI,aAAgB,OAAM,EAAN,KAAW,EAAX,M,0BAEpB,gBACI,aAAgB,SAAQ,EAAR,KAAc,EAAd,KAAoB,EAApB,M,8BAEpB,YACmC,S,8BAEnC,YAAkC,gBAAS,I,8BAE3C,YlzBk5ZgB,MAAhB,YkzBl5ZyC,ElzBk5ZzC,W,CAAgB,MkzBl5ZyB,ElzBk5ZzC,GkzBl5ZwD,gBlzBk5Z3B,K,8BkzBh5Z7B,YtyB+iDgB,MAAhB,IAAgB,EsyB/iD4B,EtyB+iD5B,wB,CAAA,esyB/iD2C,gBtyB+iD9B,K,uBsyB7iD7B,YAIS,QAHD,kBACA,aAAQ,UAAI,GAEZ,OAAC,qCAAD,aAAkC,I,+GEzNxB,0C,2LAClB,yCAgCJ,iBACI,OAAW,IAAU,GACjB,EAEA,EAAO,WAAa,ECnCL,eAAC,uBAIxB,yFACI,sBAAS,uBAAS,qBAElB,oBAAM,uBAAS,sBAAQ,qBAAO,mBAAK,yBAAW,uBAAS,0BAAW,wBAAS,yBAF3E,4BAAS,6BAAS,6BAElB,6BAAM,6BAAS,6BAAQ,6BAAO,6BAAK,6BAAW,6BAAS,6BAAW,6BAAS,6BAK/E,yFACI,uBAAS,uBAAS,qBAElB,sBACA,qBACA,mBACA,yBACA,uBACA,oBACA,qBACA,yBACA,8BACA,6BACA,6BACA,4BACA,4BACA,wBACA,2BACA,6BAjBA,6BAAS,6BAAS,6BAElB,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BA6CJ,yFACI,uBAAS,uBAAS,qBAElB,oBAAM,sBAAQ,sBAAQ,qBAFtB,6BAAS,6BAAS,6BAElB,6BAAM,6BAAQ,6BAAQ,6BAqCf,eAOP,KAPsC,aAAS,GAAvC,uBACR,WAA2B,KAM3B,sBACI,aAAc,OAAM,WACpB,aAAc,OAAM,WACpB,WAAY,OAAM,SAElB,iBAAkB,OAAM,eACxB,kBAAmB,OAAM,gBAEzB,eACgB,GAAM,YAAa,WACnC,kBAAmB,GAAM,eAAgB,WACzC,UAAW,GAAM,OAAQ,WACzB,gBAAiB,GAAM,aAAc,WACrC,WAAY,GAAM,QAAS,WAC3B,WAAY,GAAM,QAAS,WAC3B,YAAa,GAAM,SAAU,WAC7B,WAAY,GAAM,QAAS,WAC3B,oBAAqB,GAAM,iBAAkB,WAC7C,UAAW,GAAM,OAAQ,WACzB,gBAAiB,GAAM,aAAc,WACrC,WAAY,GAAM,QAAS,WAC3B,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,gBAAiB,GAAM,aAAc,WACrC,eAAgB,GAAM,YAAa,WACnC,WAAY,GAAM,QAAS,WAC3B,oBAAqB,GAAM,iBAAkB,WAC7C,cAAe,GAAM,WAAY,WACjC,aAAc,GAAM,UAAW,WAC/B,UAAW,GAAM,OAAQ,WACzB,cAAe,GAAM,WAAY,WACjC,cAAe,GAAM,WAAY,WACjC,mBAAoB,GAAM,gBAAiB,WAC3C,cAAe,GAAM,WAAY,WACjC,eAAgB,GAAM,YAAa,WACnC,cAAe,GAAM,WAAY,WACjC,eAAgB,GAAM,YAAa,WACnC,iBAAkB,GAAM,cAAe,WACvC,oBAAqB,GAAM,iBAAkB,WAC7C,gBAAiB,GAAM,aAAc,WACrC,gBAAiB,GAAM,aAAc,WACrC,aAAc,GAAM,UAAW,WAC/B,gBAAiB,GAAM,aAAc,WACrC,kBAAmB,GAAM,eAAgB,WACzC,mBAAoB,GAAM,gBAAiB,WAC3C,mBAAoB,GAAM,gBAAiB,WAC3C,mBAAoB,GAAM,gBAAiB,WAC3C,mBAAoB,GAAM,gBAAiB,WAC3C,gBAAiB,GAAM,aAAc,WACrC,cAAe,GAAM,WAAY,WACjC,iBAAkB,GAAM,cAAe,WACvC,aAAc,GAAM,UAAW,WAC/B,aAAc,GAAM,UAAW,WAC/B,gBAAiB,GAAM,aAAc,WACrC,eAAgB,GAAM,YAAa,WACnC,iBAAkB,GAAM,cAAe,WACvC,iBAAkB,GAAM,cAAe,WACvC,aAAc,GAAM,UAAW,WAC/B,eAAgB,GAAM,YAAa,WACnC,gBAAiB,GAAM,aAAc,WACrC,UAAW,GAAM,OAAQ,WACzB,eAAgB,GAAM,YAAa,WACnC,UAAW,GAAM,OAAQ,WACzB,WAAY,GAAM,QAAS,WAC3B,iBAAkB,GAAM,cAAe,WACvC,UAAW,GAAM,OAAQ,WACzB,cAAe,GAAM,WAAY,WACjC,aAAc,GAAM,UAAW,WAC/B,eAAgB,GAAM,YAAa,WACnC,YAAa,GAAM,SAAU,WAC7B,WAAY,GAAM,QAAS,WAC3B,WAAY,GAAM,QAAS,WAC3B,cAAe,GAAM,WAAY,WACjC,mBAAoB,GAAM,gBAAiB,WAC3C,eAAgB,GAAM,YAAa,WACnC,kBAAmB,GAAM,eAAgB,WACzC,eAAgB,GAAM,YAAa,WACnC,gBAAiB,GAAM,aAAc,WACrC,eAAgB,GAAM,YAAa,WACnC,0BAA2B,GAAM,uBAAwB,WACzD,eAAgB,GAAM,YAAa,WACnC,gBAAiB,GAAM,aAAc,WACrC,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,iBAAkB,GAAM,cAAe,WACvC,mBAAoB,GAAM,gBAAiB,WAC3C,kBAAmB,GAAM,eAAgB,WACzC,oBAAqB,GAAM,iBAAkB,WAC7C,oBAAqB,GAAM,iBAAkB,WAC7C,oBAAqB,GAAM,iBAAkB,WAC7C,iBAAkB,GAAM,cAAe,WACvC,UAAW,GAAM,OAAQ,WACzB,eAAgB,GAAM,YAAa,WACnC,WAAY,GAAM,QAAS,WAC3B,aAAc,GAAM,UAAW,WAC/B,YAAa,GAAM,SAAU,WAC7B,sBAAuB,GAAM,mBAAoB,WACjD,gBAAiB,GAAM,aAAc,WACrC,kBAAmB,GAAM,eAAgB,WACzC,kBAAmB,GAAM,eAAgB,WACzC,oBAAqB,GAAM,iBAAkB,WAC7C,qBAAsB,GAAM,kBAAmB,WAC/C,uBAAwB,GAAM,oBAAqB,WACnD,qBAAsB,GAAM,kBAAmB,WAC/C,qBAAsB,GAAM,kBAAmB,WAC/C,kBAAmB,GAAM,eAAgB,WACzC,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,cAAe,GAAM,WAAY,WACjC,iBAAkB,GAAM,cAAe,WACvC,UAAW,GAAM,OAAQ,WACzB,aAAc,GAAM,UAAW,WAC/B,WAAY,GAAM,QAAS,WAC3B,eAAgB,GAAM,YAAa,WACnC,YAAa,GAAM,SAAU,WAC7B,eAAgB,GAAM,YAAa,WACnC,YAAa,GAAM,SAAU,WAC7B,mBAAoB,GAAM,gBAAiB,WAC3C,eAAgB,GAAM,YAAa,WACnC,mBAAoB,GAAM,gBAAiB,WAC3C,mBAAoB,GAAM,gBAAiB,WAC3C,gBAAiB,GAAM,aAAc,WACrC,eAAgB,GAAM,YAAa,WACnC,UAAW,GAAM,OAAQ,WACzB,UAAW,GAAM,OAAQ,WACzB,UAAW,GAAM,OAAQ,WACzB,gBAAiB,GAAM,aAAc,WACrC,YAAa,GAAM,SAAU,WAC7B,SAAU,GAAM,MAAO,WACvB,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,iBAAkB,GAAM,cAAe,WACvC,YAAa,GAAM,SAAU,WAC7B,gBAAiB,GAAM,aAAc,WACrC,cAAe,GAAM,WAAY,WACjC,cAAe,GAAM,WAAY,WACjC,YAAa,GAAM,SAAU,WAC7B,YAAa,GAAM,SAAU,WAC7B,aAAc,GAAM,UAAW,WAC/B,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,eAAgB,GAAM,YAAa,WACnC,UAAW,GAAM,OAAQ,WACzB,iBAAkB,GAAM,cAAe,WACvC,eAAgB,GAAM,YAAa,WACnC,SAAU,GAAM,MAAO,WACvB,UAAW,GAAM,OAAQ,WACzB,aAAc,GAAM,UAAW,WAC/B,YAAa,GAAM,SAAU,WAC7B,eAAgB,GAAM,YAAa,WACnC,YAAa,GAAM,SAAU,WAC7B,WAAY,GAAM,QAAS,WAC3B,WAAY,GAAM,QAAS,WAC3B,gBAAiB,GAAM,aAAc,WACrC,YAAa,GAAM,SAAU,WAC7B,iBAAkB,GAAM,cAAe,U,yEDvQvC,WAAQ,OAAI,aAAS,GAAM,MAAW,c,uBAE1C,WAA4B,aAEd,EAAN,WAAiB,IAAQ,WjyB6K4C,UiyB7K5B,GACnC,EAAN,WAAiB,QAAW,cAAa,WAAb,IAC5B,aAAS,GAAQ,WACT,IAAG,a,yBAInB,YAA4C,aAAgB,QAAO,qBAAP,MAAyB,EAAM,gBAA/B,M,0BAC5D,YAA6C,aAAgB,QAAO,qBAAP,MAAyB,EAAM,gBAA/B,M,0BAC7D,YAAoC,aAAgB,QAAO,qBAAP,MAAwB,EAAxB,iB,wBACpD,YAAkC,aAAgB,QAAO,qBAAP,MAAwB,EAAxB,iB,mHC5B9B,0C,sBACpB,WAA0B,mB,iFAQ1B,WAA0B,OAAK,EAAL,Y,mEAL9B,qF,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,mB,IAAA,sB,IAAA,qB,IAAA,oB,IAAA,kB,IAAA,wB,IAAA,sB,IAAA,wB,IAAA,sB,IAAA,uB,QAAA,6C,sBA4BI,WAA0B,OAAK,EAAL,Y,4EApB9B,mH,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,qB,IAAA,oB,IAAA,kB,IAAA,wB,IAAA,sB,IAAA,mB,IAAA,oB,IAAA,uB,IAAA,4B,IAAA,2B,IAAA,2B,IAAA,0B,IAAA,0B,IAAA,sB,IAAA,yB,IAAA,2B,QAAA,sD,sBAoEI,WAAkC,kB,yEALtC,uD,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,mB,IAAA,qB,IAAA,qB,IAAA,oB,QAAA,mD,gDAwCY,0C,gDAoKJ,YACI,OAAM,EAAN,EAA8B,EAAoB,I,sCAEtD,YACI,OAAM,EAAN,EAA8B,EAAkB,M,kCAEpD,YACI,OAAM,EAAN,EAA8B,EAAkB,M,kCAEpD,YAEI,OAA8B,GAA3B,EAAQ,IAAO,KAAO,M,oCAE7B,YACI,+CAA2B,I,iRA3KnC,0CA4QwB,0BAIpB,UAAoB,GAHpB,WACA,aACA,YACA,aA4BoB,0BAIpB,UAAoB,GAHpB,WACA,kBACA,iBACA,aAKI,mBAEW,IADP,EAAa,EAAI,EAAG,EAAI,EAAW,EAAI,EAAG,EAAI,EAAO,EACrD,OACK,EAAK,EAAM,EAAM,EAAiB,GAAX,EAAK,GAAU,EACtC,EAAK,GAAY,EACjB,EAAK,EAAM,EAAM,EAAkB,GAAX,EAAK,IAAW,EAAM,EAAI,GAC3C,EA/TxB,2DAAkD,UAAK,GACnD,QAAW,EADf,EA6ZJ,mBAA2C,cAAM,OAAM,EAAN,KAAY,EAAZ,KAAoB,EAApB,KACjD,qBAA2D,cAAM,QAAO,EAAP,KAAa,EAAb,KAAqB,EAArB,KAA6B,GAAY,GAAzC,KAEjE,qBAAqE,cAAM,QAAO,EAAP,KAAa,EAAb,MAA2B,EAA3B,MAAyC,GAAY,GAArD,KAI3E,etyBjbW,MsyBkbP,EAAM,WAAN,OACQ,EAAO,EAAP,KAAW,EAAU,EAAF,KAoCb,eAA+B,aAAS,GAAvC,uBAID,eAAQ,cAAa,GAUvC,yFACI,uBAAS,uBAAS,qBAElB,qBAAO,sBAAU,qBAEjB,oBAAM,wBAAU,qBAAO,oBAAM,qBAAM,wBAEnC,yBAEA,8BAAe,iCAAkB,iCAAkB,yBAAU,0BAAW,iCAAkB,4BAAa,6BAEvG,yBAAU,qBAEV,4BAAa,+BAAgB,4BAAa,2BAAY,2BAZtD,6BAAS,6BAAS,6BAElB,6BAAO,6BAAU,6BAEjB,6BAAM,6BAAU,6BAAO,6BAAM,6BAAM,6BAEnC,6BAEA,6BAAe,6BAAkB,6BAAkB,6BAAU,6BAAW,6BAAkB,6BAAa,6BAEvG,6BAAU,6BAEV,6BAAa,6BAAgB,6BAAa,6BAAY,6BAwE1D,yFACI,uBAAS,uBAAS,qBAElB,sBAAQ,6BAAe,mBAAK,0BAF5B,6BAAS,6BAAS,6BAElB,6BAAQ,6BAAe,6BAAK,6BA8MhC,yFACI,uBAAS,uBAAS,qBAElB,uBAAS,sBAAQ,sBAAQ,oBAFzB,6BAAS,6BAAS,6BAElB,6BAAS,6BAAQ,6BAAQ,6BAsD7B,yFACI,uBAAS,uBAAS,qBAElB,oBAAM,qBAAO,sBAAQ,uBAAS,0BAAY,qBAAO,mBAAK,4BAFtD,6BAAS,6BAAS,6BAElB,6BAAM,6BAAO,6BAAQ,6BAAS,6BAAY,6BAAO,6BAAK,6BAa1D,yFACI,uBAAS,uBAAS,qBAElB,oBAAM,wBAFN,6BAAS,6BAAS,6BAElB,6BAAM,6BAiDV,yFACI,uBAAS,uBAAS,qBAElB,sBAAQ,sBAAQ,mBAAK,uBAAS,uBAF9B,6BAAS,6BAAS,6BAElB,6BAAQ,6BAAQ,6BAAK,6BAAS,6BCx/BR,eAAC,2BACvB,oBhzBwFoD,IizBpFxD,cACI,kBAAmB,IAOK,oBAAC,UAAkC,MAAlC,iB,+BF+RzB,YAEQ,GAAM,EAAN,WAAiB,OAAO,G,CtyB3OhB,MsyB2O8B,gCAD1C,OACgE,GAAK,MAAK,aAAY,YAAW,+BAAwB,EAAK,OtyB3OlH,MsyB4OK,sBAFjB,OAE6B,GAAK,MAAK,QAAO,OAAM,+BAAwB,EAAK,Q,2BAGrF,YAEI,MAAa,KAAK,iBAClB,EAAiB,EAAgB,iBAEjC,GAAgB,EAAI,EAAO,OAAS,EAAW,IAAQ,EAAO,MAAQ,EAAO,IAC7E,GAAgB,EAAI,EAAO,OAAS,EAAW,MAAU,EAAO,MAAQ,EAAO,MAC/E,GAAgB,EAAI,EAAO,OAAS,EAAW,KAAS,EAAO,MAAQ,EAAO,KAE9E,OAAO,GAAY,EAAR,GAA8B,EAAR,GAA8B,EAAR,K,6BAG3D,YAYW,MALP,EAAmB,EAAN,WAAiB,OAAoB,GAClD,EAAe,EAAQ,gCAAwB,sBAAS,SAExD,EAAgB,EAAK,UAAmE,EAAtD,EAAK,WAAa,8BAAiB,GAAW,MAAhE,EAChB,EAAc,EAAK,2BAAiB,8BAAiB,IAC9C,GAAI,EACP,KAAK,EAAQ,IAAK,EAAQ,WAAY,EAAQ,UAAW,EAAQ,W,CtyBxQzD,MsyB0QH,EAAQ,SAAb,EAAyB,GAAK,MAAK,QAAO,OAAM,SAHpD,U,4BAOJ,YAYW,MALP,EAAmB,EAAN,WAAiB,OAAoB,GAClD,EAAe,EAAQ,gCAAwB,sBAAS,SAExD,EAAe,EAAK,UAAmE,EAAtD,EAAK,WAAa,8BAAiB,GAAW,MAAhE,EACf,EAAc,EAAK,2BAAiB,8BAAiB,IAC9C,GAAI,EACP,KAAK,EAAQ,IAAK,EAAQ,WAAY,EAAQ,UAAW,EAAQ,W,CtyB3RzD,MsyB6RH,EAAQ,SAAb,EAAyB,GAAK,MAAK,QAAO,OAAM,SAHpD,U,8BAOJ,YAYW,MALP,EAAmB,EAAN,WAAiB,OAAoB,GAClD,EAAe,EAAQ,gCAAwB,sBAAS,SAExD,EAAiB,EAAK,WAAqE,EAAvD,EAAK,YAAc,8BAAiB,GAAW,MAAlE,EACjB,EAAc,EAAK,oBAAkB,8BAAiB,IAC/C,GAAI,EACP,KAAK,EAAQ,IAAK,EAAQ,WAAY,EAAQ,UAAW,EAAQ,W,CtyB9SzD,MsyBgTH,EAAQ,SAAb,EAAyB,GAAK,MAAK,QAAO,OAAM,SAHpD,U,gCAOJ,YAYW,MALP,EAAmB,EAAN,WAAiB,OAAoB,GAClD,EAAe,EAAQ,gCAAwB,sBAAS,SAExD,EAAmB,EAAK,WAAqE,EAAvD,EAAK,YAAc,8BAAiB,GAAW,MAAlE,EACnB,EAAc,EAAK,oBAAkB,8BAAiB,IAC/C,GAAI,EACP,KAAK,EAAQ,IAAK,EAAQ,WAAY,EAAQ,UAAW,EAAQ,W,CtyBjUzD,MsyBmUH,EAAQ,SAAb,EAAyB,GAAK,MAAK,QAAO,OAAM,SAHpD,U,oBAcA,WAakB,IAAN,EADA,EATR,EAAQ,SAAM,IACd,EAAQ,WAAQ,IAChB,EAAQ,UAAO,IAEf,E7uB7PD,EAAK0J,I6uB6Pa,EAAG,EAAG,GACvB,E7uBhCD,EAAKxD,I6uBgCa,EAAG,EAAG,GACvB,EAAa,EAAO,EAEpB,EAAS,yCAA4B,EAAO,GAAQ,GAC5C,GAAc,IAAV,E,KAA0D,EAAK,EAAM,EAAM,EAA/E,E,KAAmB,mCAA2B,GAAU,E9vBlE1B,EAAWyH,IAAInB,U8vBkE7C,EAA2F,EAAnG,QAEI,GADU,IACV,EAAQ,SACR,GAFU,IAEV,EAAK,GAAQ,EAAI,GAAK,EAAU,EAA3B,QACL,GAHU,IAGV,EAAK,OAAQ,EAAI,GAAK,EAAU,OAChC,IAJU,IAIV,ExyBtRiC,MAAM,EwyBuRzB,2BxyBvRuDxM,YwyBsRhE,OAAQ,EAAI,GAAK,EAAU,GAJpC,QAQA,OAAO,OAAK,0BAAa,GAAc,EAAL,IAAJ,GAAkC,EAAL,IAAL,GAAwB,a,+EA5BtF,WACI,iB,wBADJ,WAEI,mB,wBAFJ,WAGI,kB,wBAHJ,WAII,mB,0BAJJ,qCACI,sBACA,wBACA,uBACA,qB,sBAJJ,iBACI,iCACA,kCACA,gCACA,kCAJJ,K,sBAAA,0BAII,MADA,MADA,MADA,+BACA,0BACA,yBACA,0B,oBAJJ,mHACI,0BACA,8BACA,4BACA,8B,oBAmCA,WAEI,SAUA,GAAkB,IAAd,gBAAiB,OAAO,OAAK,eAAW,eAAW,gBAGvD,MAAS,SAAM,IAAS,IACxB,EAAQ,gBAAa,IACrB,EAAS,eAAY,IAErB,EAAa,EAAK,GAAK,GAAM,EAAI,GAAS,EAAK,EAAI,EAAK,EACxD,EAAS,EAAI,EAAK,EAClB,EAAQ,wCAA2B,EAAS,EAAI,EAAI,EAAK,EAAM,IAC/D,EAAQ,wCAA2B,EAAS,EAAI,EAAI,IACpD,EAAQ,wCAA2B,EAAS,EAAI,EAAI,EAAK,EAAM,IAC/D,OAAO,OAAe,EAAL,IAAJ,GAAiC,EAAL,IAAJ,GAAiC,EAAL,IAAJ,GAAuB,a,+EA/B5F,WACI,iB,wBADJ,WAEI,wB,wBAFJ,WAGI,uB,wBAHJ,WAII,mB,0BAJJ,qCACI,sBACA,6BACA,4BACA,qB,sBAJJ,iBACI,iCACA,4CACA,0CACA,kCAJJ,K,sBAAA,0BAII,MADA,MADA,MADA,+BACA,+BACA,8BACA,0B,oBAJJ,mHACI,0BACA,wCACA,sCACA,8B,sCA+BJ,WAWQ,MAUuB,UAhB3B,IAFA,EAAY,EADE,4IACF,eAAwC,aAAK,YAEzD,0BACI,6EAAmB,GAAnB,oBACO,MAAM,EAAyB,sCAAqC,SAD3E,WAGJ,EAAe,EAAgB,GAGY,EAA1B,EAAT,EAAkB,QAAQ,GAAS,GAAiC,EAAxB,EAAT,EAAyB,SACnD,EAAT,EAAkB,OAAO,GAAuD,IAAb,EAAvB,EAAT,EAAyB,QAA2B,KAC9E,EAAT,EAAkB,QAAQ,GAAuD,IAAb,EAAxB,EAAT,EAAyB,SACnD,EAAT,EAAkB,OAAO,GAAyC,EAAvB,EAAT,EAAyB,QAC1C,EAAT,GANhB,MAAU,6BASV,EAAiB,8BAAoC,EAAnB,EAAgB,KAClD,EAAgB,8BAAoC,EAAnB,EAAgB,KAGjD,OAF2B,2EAAmB,GAAnB,iCAA4C,EAEhE,OAAK,EAAK,EAAY,EAFjB,iC,sCAKhB,WAkB+B,cAb3B,IAFA,EAAY,EADE,2GACF,eAAwC,aAAK,YAEzD,0BACgB,6EAAmB,GAAnB,oBACL,MAAM,EAAyB,sCAAqC,SAD3E,MAAY,EAGZ,OACW,EAAN,EAAe,IAA6F,EAAP,IAA5E,wCAAsD,EAArB,EAAN,EAAsB,KAAkB,MACrF,0BAAmB,EAAN,MAI7B,EAAU,EAAgB,GAC1B,EAAY,EAAgB,GAC5B,EAAW,EAAgB,GAG3B,OAF2B,2EAAmB,GAAnB,iCAA4C,EAEhE,OAAK,EAAK,EAAO,EAFZ,iC,4BAKhB,WACY,MACD,EADP,EAAQ,uBAAO,WAEX,GAAE,EAAF,EAAa,OAAU,uCAGvB,GAAE,EAAF,EAAa,MAAoB,IAAZ,EAAE,OAAe,SACZ,EAArB,EAAK,oBAAL,aAAE,IAAgB,GAAS,IACN,EAArB,EAAK,oBAAL,aAAE,IAAgB,GAAS,IACN,EAArB,EAAK,oBAAL,aAAE,IAAgB,GAAS,SAIhC,KAAE,EAAF,EAAa,MAAqB,IAAZ,EAAE,QAA2B,IAAZ,EAAE,OAKjC,MAAM,EAAyB,+DAA8D,GAL5C,SACjC,EAAjB,EAAF,EAAY,QAAG,IAAU,IACN,EAAjB,EAAF,EAAY,QAAG,IAAU,IACN,EAAjB,EAAF,EAAY,QAAG,IAAU,KAdlC,U,0GAoEW,0C,sBACf,WAAkC,UAAG,WAAH,K,uFA4BlC,WAAkC,OAAK,EAAL,Y,qEAftC,gK,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,oB,IAAA,qB,IAAA,oB,IAAA,mB,IAAA,uB,IAAA,oB,IAAA,mB,IAAA,mB,IAAA,sB,IAAA,uB,IAAA,4B,IAAA,+B,IAAA,+B,IAAA,uB,IAAA,wB,IAAA,+B,IAAA,0B,IAAA,2B,IAAA,uB,IAAA,mB,IAAA,0B,IAAA,6B,IAAA,0B,IAAA,yB,IAAA,yB,QAAA,+C,sBA0FI,WAA0B,OAAK,EAAL,Y,2EAL9B,uD,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,qB,IAAA,4B,IAAA,kB,IAAA,yB,QAAA,qD,sBAsNI,WAAkC,kB,sEALtC,uD,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,sB,IAAA,qB,IAAA,qB,IAAA,mB,QAAA,gD,sBA8DI,WAA0B,OAAK,EAAL,Y,uEAL9B,2E,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,mB,IAAA,oB,IAAA,qB,IAAA,sB,IAAA,yB,IAAA,oB,IAAA,kB,IAAA,0B,QAAA,iD,sBAqBI,WAA0B,kB,0EAL9B,6C,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,mB,IAAA,uB,QAAA,oD,sBAyDI,WAA0B,OAAK,EAAL,Y,wEAL9B,4D,mBAAA,sB,IAAA,sB,IAAA,sB,IAAA,oB,IAAA,qB,IAAA,qB,IAAA,kB,IAAA,sB,IAAA,sB,QAAA,kD,sBCl/BI,WACI,2BAAK,UAAa,OACL,EAAL,oBAAkB,2B,mBAG9B,WAAc,oBAAK,S,8BAEnB,YACI,oB/tBsCC,U+tBtCO,I,qFCHZ,cACI,kBhzB4OJ,YgzB5OiB,EAAO,I,8FAKxB,cACI,MAOO,EALuC,EAF9C,8BACiB,eAAa,kBAAqB,gB,CAC3C,MAAQ,eAAR,EAA8B,eAA9B,EAAsC,wBhzBoOlD,cAAIxC,EAAKN,GgzB/NL,OAAO,WAAQ,aAAR,UAAqB,EAAS,gBAA9B,qB,8BAGX,gBAC0C,MAAtC,IAAQ,aAAR,EAAqB,EAAS,aAA9B,EAAsC,sBhzB2N1C,cAAIM,EAAK,I,guCgzBjKb,6C,u1BAqDA,6C,6BACA,6C,+BACA,6C,gCACA,6C,8BACA,6C,gTAgBA,6C,8BACA,6C,gCACA,6C,iCACA,6C,4BACA,6C,8VAqDA,qBAMI,OAAW,IAAO,IAAU,IAAS,GAC7B,IAAO,GACP,EAAE,GAEF,EAAE,GAAF,MAAO,GAGP,IAAS,GACT,EAAE,GAAF,MAAO,GAAP,MAAc,GAEd,EAAE,GAAF,MAAO,GAAP,MAAc,GAAd,MAAsB,GAKlC,4BACI,UAAwB,WACxB,UAA0B,WAC1B,UAA2B,WAC3B,UAAyB,MAErB,SAAe,SAAiB,SAAkB,QAClD,KAAS,GAAkB,EAAK,EAAO,EAAQ,KAE/C,SAAW,KAAX,GACA,SAAa,KAAb,GACA,SAAc,KAAd,GACA,SAAY,KAAZ,IAYR,4BACI,UAAwB,WACxB,UAA0B,WAC1B,UAA2B,WAC3B,UAAyB,MAErB,SAAe,SAAiB,SAAkB,QAClD,KAAU,GAAkB,EAAK,EAAO,EAAQ,KAEhD,SAAW,KAAX,GACA,SAAa,KAAb,GACA,SAAc,KAAd,GACA,SAAY,KAAZ,IC7QS,eAAC,eAElB,sB,kOACI,cAII,cAAY,EAAS,e,iFAL7B,0CC8CA,cACI,KADe,aAAqB,MACpC,sBACI,UAAW,O,s3CADf,0CCnCJ,cACI,KADe,aAAqB,MACpC,sBACI,UAAW,O,uIADf,0CCfkB,oBAAC,UAA6B,IAA7B,gBAMnB,qBrzBiFoD,IqzBhFpD,0BrzBgFoD,IszB3ExD,cACI,KADe,aAAqB,KACpC,sBACI,UAAW,O,uIADf,0CCRJ,cACI,KADgB,aAAsB,MACtC,sBACI,UAAW,O,uIADf,0C,oSTmC2B,YAAQ,aAAgB,GAAM,EAAM,Q,kBAOpC,YAAQ,aAAgB,GAAM,EAAM,Q,8iKGpBnE,2C,0BACA,2C,yBACA,2C,+BAMA,2C,4BAcA,2C,iCASA,2C,2BAGA,2C,2BAMA,2C,gCAEA,2C,iCACA,2C,qBAQA,2C,iDAOA,2C,sBAEA,2C,6BACA,2C,wBACA,2C,wBAMA,2C,sBA4BA,2C,8BAIA,2C,uKAYA,2C,wBASA,2C,6KAmBA,2C,4BAEA,2C,0BASA,2C,qBACA,2C,uCAqEA,cAAkD,KAAO,EAAK,EAAK,EAAK,I,kBAExE,qBAAyB,UAA6B,WAAM,UAA+B,MACvF,KAAO,EAAU,EAAY,EAAU,I,yCAqB3C,cAAmD,KAAQ,EAAK,EAAK,EAAK,I,mBAE1E,qBAA0B,UAA6B,WAAM,UAA+B,MACxF,KAAQ,EAAU,EAAY,EAAU,I,wyBJtRf,EAAM,S,ECAV,I,GG8BgB,O,GACF,O,GACD,OACP,QAAY,WAAE,iBAEL,OACwB,OACZ,O,GACR,OACA,OACY,OACR,OACQ,OACZ,OAER,OACG,OACE,OACC,OACF,OACY,O,GAED,OACO,OACC,OACE,OACC,OAEhB,OACG,OACE,O,GACC,OACF,O,GAEA,OACG,OACE,OACC,OACF,O,GAEd,OACG,O,GACE,O,GACC,OACF,OAEC,OACH,OACX,QAAY,WAAE,iBAEX,O,GACA,OACQ,OACJ,O,GACK,OACP,OAEM,O,GACJ,O,GAEF,O,GACc,O,GACZ,OACE,OACE,OACF,OACN,OACM,O,GACO,OACH,OACF,OAEZ,OACwB,OACN,OACA,OACJ,OACM,OAGA,OACI,OAGhB,OACA,OACM,OAGA,OACI,OACA,OACU,OACI,OACN,O,GAEX,OAEP,O,GAEc,OAET,OACS,OACR,OACM,O,GAEd,O,GACY,O,GACE,O,GACC,O,GACF,O,GACF,OACA,OACC,OACA,OAEN,OACE,OACP,OACC,O,GACE,OACC,OACA,OACO,OACY,O,GAEvB,O,GACY,O,GACE,O,GACC,O,GACF,OACA,OACV,OAEI,OACR,OAEgB,O,GAEV,OACU,O,GACJ,OACE,OACR,OACX,QAAY,WAAE,iBACb,QAAY,WAAE,iBAEI,OACN,O,GAEA,O,GACA,OACF,OACF,OAEI,OAEE,OACM,OAEnB,OAEG,OCrL3B,KACG,KACA,KACG,KACA,KACF,KACA,KAEJ,KACE,KACO,KACP,KACC,KACF,KACI,KAEA,KACC,KACH,KACA,KACD,KACK,KACD,KAEC,KACL,KACI,KACJ,KACG,KACH,KACD,KAEA,KACG,KAEG,KACF,KACI,KACJ,KACF,KAEF,KACA,KACA,KACA,KACA,KACA,KACI,KACA,KACJ,KACE,KAEH,KACK,KACH,KACE,KACF,KAEA,KACG,KAED,KACD,KAED,KACC,KACA,KACA,KACA,KACC,KAEF,KACK,KAEN,KACO,KACH,KAEL,KACE,KACK,KAEP,KAEG,KAEA,KACE,KACC,KACD,KACD,KACD,KACE,KACD,KACF,KACA,KACA,KAEE,KACA,KACH,KACM,KACH,KACH,KACG,KACD,KACF,KAEA,KAGG,K,oDM7Hb,UAEI,EAAO,CAAC,EAAW,KAAU,MAAyC,KAAS,MAAmB,MAA8C,aAAqB,0BAAP,EAkB1J,SAAUiB,EAAGD,EAAQolG,EAA+C1sC,EAAe2sC,EAAyB1sC,EAAoD2sC,GACtK,aACA,IA6IIC,EA7IA1sC,EAAuB54D,EAAE44D,uBAAyB54D,EAAE44D,qBAAuB,IAC3ElsD,EAAuB3M,EAAO2M,qBAC9BsvD,EAAUmpC,EAA8CvlC,MAAMa,gBAC9DxE,EAAUkpC,EAA8CvlC,MAAMc,gBAC9DxE,EAAMipC,EAA8CvlC,MAAMe,YAC1Dh5C,EAAgB8wC,EAAc9wC,cAC9BmzC,EAAWqqC,EAA8CvlC,MAAM9E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C,MAGT03F,EAAK11F,UAAUwpD,OAAS,SAAgB/M,GAEtC,OADAz+C,KAAK0xH,MAAMvvE,OAAOniD,KAAKyxH,MAAMjmE,UACtBxrD,KAAK0xH,MAAMlmE,OAAO/M,K,cC7C3B5+C,EAAOD,QAAU,CACf62D,QAAS,CACPv9C,KAAM,EACN89C,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAIN1Z,IAAK,CACH/I,IAAK,EACLyiB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,wE,6BCrwBR,IAAIv3B,EAAK,EAAQ,GACbkyF,EAAW,EAAQ,KACnB30E,EAAQ,EAAQ,IAChB89B,EAAS,EAAQ,IACjB1B,EAAO,EAAQ,IACf95C,EA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","file":"web-app.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"web-app\"] = factory();\n\telse\n\t\troot[\"web-app\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 144);\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define('kotlin', ['exports'], factory);\n }\n else if (typeof exports === 'object') {\n factory(module.exports);\n }\n else {\n root.kotlin = {};\n factory(root.kotlin);\n }\n}(this, function (Kotlin) {\n var _ = Kotlin;\n\n insertContent();\n}));\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.isBooleanArray = function (a) {\n return (Array.isArray(a) || a instanceof Int8Array) && a.$type$ === \"BooleanArray\"\n};\n\nKotlin.isByteArray = function (a) {\n return a instanceof Int8Array && a.$type$ !== \"BooleanArray\"\n};\n\nKotlin.isShortArray = function (a) {\n return a instanceof Int16Array\n};\n\nKotlin.isCharArray = function (a) {\n return a instanceof Uint16Array && a.$type$ === \"CharArray\"\n};\n\nKotlin.isIntArray = function (a) {\n return a instanceof Int32Array\n};\n\nKotlin.isFloatArray = function (a) {\n return a instanceof Float32Array\n};\n\nKotlin.isDoubleArray = function (a) {\n return a instanceof Float64Array\n};\n\nKotlin.isLongArray = function (a) {\n return Array.isArray(a) && a.$type$ === \"LongArray\"\n};\n\nKotlin.isArray = function (a) {\n return Array.isArray(a) && !a.$type$;\n};\n\nKotlin.isArrayish = function (a) {\n return Array.isArray(a) || ArrayBuffer.isView(a)\n};\n\nKotlin.arrayToString = function (a) {\n if (a === null) return \"null\"\n var toString = Kotlin.isCharArray(a) ? String.fromCharCode : Kotlin.toString;\n return \"[\" + Array.prototype.map.call(a, function(e) { return toString(e); }).join(\", \") + \"]\";\n};\n\nKotlin.arrayDeepToString = function (arr) {\n return Kotlin.kotlin.collections.contentDeepToStringImpl(arr);\n};\n\nKotlin.arrayEquals = function (a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null || !Kotlin.isArrayish(b) || a.length !== b.length) {\n return false;\n }\n\n for (var i = 0, n = a.length; i < n; i++) {\n if (!Kotlin.equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n};\n\nKotlin.arrayDeepEquals = function (a, b) {\n return Kotlin.kotlin.collections.contentDeepEqualsImpl(a, b);\n};\n\nKotlin.arrayHashCode = function (arr) {\n if (arr === null) return 0\n var result = 1;\n for (var i = 0, n = arr.length; i < n; i++) {\n result = ((31 * result | 0) + Kotlin.hashCode(arr[i])) | 0;\n }\n return result;\n};\n\nKotlin.arrayDeepHashCode = function (arr) {\n return Kotlin.kotlin.collections.contentDeepHashCodeImpl(arr);\n};\n\nKotlin.primitiveArraySort = function (array) {\n array.sort(Kotlin.doubleCompareTo)\n};\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.getCallableRef = function(name, f) {\n f.callableName = name;\n return f;\n};\n\nKotlin.getPropertyCallableRef = function(name, paramCount, getter, setter) {\n getter.get = getter;\n getter.set = setter;\n getter.callableName = name;\n return getPropertyRefClass(getter, setter, propertyRefClassMetadataCache[paramCount]);\n};\n\nfunction getPropertyRefClass(obj, setter, cache) {\n obj.$metadata$ = getPropertyRefMetadata(typeof setter === \"function\" ? cache.mutable : cache.immutable);\n obj.constructor = obj;\n return obj;\n}\n\nvar propertyRefClassMetadataCache = [\n {\n mutable: { value: null, implementedInterface: function () {\n return Kotlin.kotlin.reflect.KMutableProperty0 }\n },\n immutable: { value: null, implementedInterface: function () {\n return Kotlin.kotlin.reflect.KProperty0 }\n }\n },\n {\n mutable: { value: null, implementedInterface: function () {\n return Kotlin.kotlin.reflect.KMutableProperty1 }\n },\n immutable: { value: null, implementedInterface: function () {\n return Kotlin.kotlin.reflect.KProperty1 }\n }\n }\n];\n\nfunction getPropertyRefMetadata(cache) {\n if (cache.value === null) {\n cache.value = {\n interfaces: [cache.implementedInterface()],\n baseClass: null,\n functions: {},\n properties: {},\n types: {},\n staticMembers: {}\n };\n }\n return cache.value;\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.compareTo = function (a, b) {\n var typeA = typeof a;\n if (typeA === \"number\") {\n if (typeof b === \"number\") {\n return Kotlin.doubleCompareTo(a, b);\n }\n return Kotlin.primitiveCompareTo(a, b);\n }\n if (typeA === \"string\" || typeA === \"boolean\") {\n return Kotlin.primitiveCompareTo(a, b);\n }\n return a.compareTo_11rb$(b);\n};\n\nKotlin.primitiveCompareTo = function (a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n};\n\nKotlin.doubleCompareTo = function (a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n\n if (a === b) {\n if (a !== 0) return 0;\n\n var ia = 1 / a;\n return ia === 1 / b ? 0 : (ia < 0 ? -1 : 1);\n }\n\n return a !== a ? (b !== b ? 0 : 1) : -1\n};\n\nKotlin.charInc = function (value) {\n return Kotlin.toChar(value+1);\n};\n\nKotlin.charDec = function (value) {\n return Kotlin.toChar(value-1);\n};\n\nKotlin.imul = Math.imul || imul;\n\nKotlin.imulEmulated = imul;\n\nfunction imul(a, b) {\n return ((a & 0xffff0000) * (b & 0xffff) + (a & 0xffff) * (b | 0)) | 0;\n}\n\n(function() {\n var buf = new ArrayBuffer(8);\n var bufFloat64 = new Float64Array(buf);\n var bufFloat32 = new Float32Array(buf);\n var bufInt32 = new Int32Array(buf);\n var lowIndex = 0;\n var highIndex = 1;\n\n bufFloat64[0] = -1; // bff00000_00000000\n if (bufInt32[lowIndex] !== 0) {\n lowIndex = 1;\n highIndex = 0;\n }\n\n Kotlin.doubleToBits = function(value) {\n return Kotlin.doubleToRawBits(isNaN(value) ? NaN : value);\n };\n\n Kotlin.doubleToRawBits = function(value) {\n bufFloat64[0] = value;\n return Kotlin.Long.fromBits(bufInt32[lowIndex], bufInt32[highIndex]);\n };\n\n Kotlin.doubleFromBits = function(value) {\n bufInt32[lowIndex] = value.low_;\n bufInt32[highIndex] = value.high_;\n return bufFloat64[0];\n };\n\n Kotlin.floatToBits = function(value) {\n return Kotlin.floatToRawBits(isNaN(value) ? NaN : value);\n };\n\n Kotlin.floatToRawBits = function(value) {\n bufFloat32[0] = value;\n return bufInt32[0];\n };\n\n Kotlin.floatFromBits = function(value) {\n bufInt32[0] = value;\n return bufFloat32[0];\n };\n\n // returns zero value for number with positive sign bit and non-zero value for number with negative sign bit.\n Kotlin.doubleSignBit = function(value) {\n bufFloat64[0] = value;\n return bufInt32[highIndex] & 0x80000000;\n };\n\n Kotlin.numberHashCode = function(obj) {\n if ((obj | 0) === obj) {\n return obj | 0;\n }\n else {\n bufFloat64[0] = obj;\n return (bufInt32[highIndex] * 31 | 0) + bufInt32[lowIndex] | 0;\n }\n }\n})();\n\nKotlin.ensureNotNull = function(x) {\n return x != null ? x : Kotlin.throwNPE();\n};\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nif (typeof String.prototype.startsWith === \"undefined\") {\n Object.defineProperty(String.prototype, \"startsWith\", {\n value: function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n }\n });\n}\nif (typeof String.prototype.endsWith === \"undefined\") {\n Object.defineProperty(String.prototype, \"endsWith\", {\n value: function (searchString, position) {\n var subjectString = this.toString();\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n }\n });\n}\n// ES6 Math polyfills\nif (typeof Math.sign === \"undefined\") {\n Math.sign = function(x) {\n x = +x; // convert to a number\n if (x === 0 || isNaN(x)) {\n return Number(x);\n }\n return x > 0 ? 1 : -1;\n };\n}\nif (typeof Math.trunc === \"undefined\") {\n Math.trunc = function(x) {\n if (isNaN(x)) {\n return NaN;\n }\n if (x > 0) {\n return Math.floor(x);\n }\n return Math.ceil(x);\n };\n}\n\n(function() {\n var epsilon = 2.220446049250313E-16;\n var taylor_2_bound = Math.sqrt(epsilon);\n var taylor_n_bound = Math.sqrt(taylor_2_bound);\n var upper_taylor_2_bound = 1/taylor_2_bound;\n var upper_taylor_n_bound = 1/taylor_n_bound;\n\n if (typeof Math.sinh === \"undefined\") {\n Math.sinh = function(x) {\n if (Math.abs(x) < taylor_n_bound) {\n var result = x;\n if (Math.abs(x) > taylor_2_bound) {\n result += (x * x * x) / 6;\n }\n return result;\n } else {\n var y = Math.exp(x);\n var y1 = 1 / y;\n if (!isFinite(y)) return Math.exp(x - Math.LN2);\n if (!isFinite(y1)) return -Math.exp(-x - Math.LN2);\n return (y - y1) / 2;\n }\n };\n }\n if (typeof Math.cosh === \"undefined\") {\n Math.cosh = function(x) {\n var y = Math.exp(x);\n var y1 = 1 / y;\n if (!isFinite(y) || !isFinite(y1)) return Math.exp(Math.abs(x) - Math.LN2);\n return (y + y1) / 2;\n };\n }\n\n if (typeof Math.tanh === \"undefined\") {\n Math.tanh = function(x){\n if (Math.abs(x) < taylor_n_bound) {\n var result = x;\n if (Math.abs(x) > taylor_2_bound) {\n result -= (x * x * x) / 3;\n }\n return result;\n }\n else {\n var a = Math.exp(+x), b = Math.exp(-x);\n return a === Infinity ? 1 : b === Infinity ? -1 : (a - b) / (a + b);\n }\n };\n }\n\n // Inverse hyperbolic function implementations derived from boost special math functions,\n // Copyright Eric Ford & Hubert Holin 2001.\n\n if (typeof Math.asinh === \"undefined\") {\n var asinh = function(x) {\n if (x >= +taylor_n_bound)\n {\n if (x > upper_taylor_n_bound)\n {\n if (x > upper_taylor_2_bound)\n {\n // approximation by laurent series in 1/x at 0+ order from -1 to 0\n return Math.log(x) + Math.LN2;\n }\n else\n {\n // approximation by laurent series in 1/x at 0+ order from -1 to 1\n return Math.log(x * 2 + (1 / (x * 2)));\n }\n }\n else\n {\n return Math.log(x + Math.sqrt(x * x + 1));\n }\n }\n else if (x <= -taylor_n_bound)\n {\n return -asinh(-x);\n }\n else\n {\n // approximation by taylor series in x at 0 up to order 2\n var result = x;\n if (Math.abs(x) >= taylor_2_bound)\n {\n var x3 = x * x * x;\n // approximation by taylor series in x at 0 up to order 4\n result -= x3 / 6;\n }\n return result;\n }\n };\n Math.asinh = asinh;\n }\n if (typeof Math.acosh === \"undefined\") {\n Math.acosh = function(x) {\n if (x < 1)\n {\n return NaN;\n }\n else if (x - 1 >= taylor_n_bound)\n {\n if (x > upper_taylor_2_bound)\n {\n // approximation by laurent series in 1/x at 0+ order from -1 to 0\n return Math.log(x) + Math.LN2;\n }\n else\n {\n return Math.log(x + Math.sqrt(x * x - 1));\n }\n }\n else\n {\n var y = Math.sqrt(x - 1);\n // approximation by taylor series in y at 0 up to order 2\n var result = y;\n if (y >= taylor_2_bound)\n {\n var y3 = y * y * y;\n // approximation by taylor series in y at 0 up to order 4\n result -= y3 / 12;\n }\n\n return Math.sqrt(2) * result;\n }\n };\n }\n if (typeof Math.atanh === \"undefined\") {\n Math.atanh = function(x) {\n if (Math.abs(x) < taylor_n_bound) {\n var result = x;\n if (Math.abs(x) > taylor_2_bound) {\n result += (x * x * x) / 3;\n }\n return result;\n }\n return Math.log((1 + x) / (1 - x)) / 2;\n };\n }\n if (typeof Math.log1p === \"undefined\") {\n Math.log1p = function(x) {\n if (Math.abs(x) < taylor_n_bound) {\n var x2 = x * x;\n var x3 = x2 * x;\n var x4 = x3 * x;\n // approximation by taylor series in x at 0 up to order 4\n return (-x4 / 4 + x3 / 3 - x2 / 2 + x);\n }\n return Math.log(x + 1);\n };\n }\n if (typeof Math.expm1 === \"undefined\") {\n Math.expm1 = function(x) {\n if (Math.abs(x) < taylor_n_bound) {\n var x2 = x * x;\n var x3 = x2 * x;\n var x4 = x3 * x;\n // approximation by taylor series in x at 0 up to order 4\n return (x4 / 24 + x3 / 6 + x2 / 2 + x);\n }\n return Math.exp(x) - 1;\n };\n }\n})();\nif (typeof Math.hypot === \"undefined\") {\n Math.hypot = function() {\n var y = 0;\n var length = arguments.length;\n\n for (var i = 0; i < length; i++) {\n if (arguments[i] === Infinity || arguments[i] === -Infinity) {\n return Infinity;\n }\n y += arguments[i] * arguments[i];\n }\n return Math.sqrt(y);\n };\n}\nif (typeof Math.log10 === \"undefined\") {\n Math.log10 = function(x) {\n return Math.log(x) * Math.LOG10E;\n };\n}\nif (typeof Math.log2 === \"undefined\") {\n Math.log2 = function(x) {\n return Math.log(x) * Math.LOG2E;\n };\n}\nif (typeof Math.clz32 === \"undefined\") {\n Math.clz32 = (function(log, LN2) {\n return function(x) {\n var asUint = x >>> 0;\n if (asUint === 0) {\n return 32;\n }\n return 31 - (log(asUint) / LN2 | 0) | 0; // the \"| 0\" acts like math.floor\n };\n })(Math.log, Math.LN2);\n}\n\n// For HtmlUnit and PhantomJs\nif (typeof ArrayBuffer.isView === \"undefined\") {\n ArrayBuffer.isView = function(a) {\n return a != null && a.__proto__ != null && a.__proto__.__proto__ === Int8Array.prototype.__proto__;\n };\n}\n\nif (typeof Array.prototype.fill === \"undefined\") {\n // Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#Polyfill\n Object.defineProperty(Array.prototype, 'fill', {\n value: function (value) {\n\n // Steps 1-2.\n if (this == null) {\n throw new TypeError('this is null or not defined');\n }\n\n var O = Object(this);\n\n // Steps 3-5.\n var len = O.length >>> 0;\n\n // Steps 6-7.\n var start = arguments[1];\n var relativeStart = start >> 0;\n\n // Step 8.\n var k = relativeStart < 0 ?\n Math.max(len + relativeStart, 0) :\n Math.min(relativeStart, len);\n\n // Steps 9-10.\n var end = arguments[2];\n var relativeEnd = end === undefined ?\n len : end >> 0;\n\n // Step 11.\n var finalValue = relativeEnd < 0 ?\n Math.max(len + relativeEnd, 0) :\n Math.min(relativeEnd, len);\n\n // Step 12.\n while (k < finalValue) {\n O[k] = value;\n k++;\n }\n\n // Step 13.\n return O;\n }\n });\n}\n\n(function() {\n function normalizeOffset(offset, length) {\n if (offset < 0) return Math.max(0, offset + length);\n return Math.min(offset, length);\n }\n function typedArraySlice(begin, end) {\n if (typeof end === \"undefined\") {\n end = this.length;\n }\n begin = normalizeOffset(begin || 0, this.length);\n end = Math.max(begin, normalizeOffset(end, this.length));\n return new this.constructor(this.subarray(begin, end));\n }\n\n var arrays = [Int8Array, Int16Array, Uint16Array, Int32Array, Float32Array, Float64Array];\n for (var i = 0; i < arrays.length; ++i) {\n var TypedArray = arrays[i];\n if (typeof TypedArray.prototype.fill === \"undefined\") {\n Object.defineProperty(TypedArray.prototype, 'fill', {\n value: Array.prototype.fill\n });\n }\n if (typeof TypedArray.prototype.slice === \"undefined\") {\n Object.defineProperty(TypedArray.prototype, 'slice', {\n value: typedArraySlice\n });\n }\n }\n\n // Patch apply to work with TypedArrays if needed.\n try {\n (function() {}).apply(null, new Int32Array(0))\n } catch (e) {\n var apply = Function.prototype.apply;\n Object.defineProperty(Function.prototype, 'apply', {\n value: function(self, array) {\n return apply.call(this, self, [].slice.call(array));\n }\n });\n }\n\n\n // Patch map to work with TypedArrays if needed.\n for (var i = 0; i < arrays.length; ++i) {\n var TypedArray = arrays[i];\n if (typeof TypedArray.prototype.map === \"undefined\") {\n Object.defineProperty(TypedArray.prototype, 'map', {\n value: function(callback, self) {\n return [].slice.call(this).map(callback, self);\n }\n });\n }\n }\n\n // Patch sort to work with TypedArrays if needed.\n // TODO: consider to remove following function and replace it with `Kotlin.doubleCompareTo` (see misc.js)\n var totalOrderComparator = function (a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n\n if (a === b) {\n if (a !== 0) return 0;\n\n var ia = 1 / a;\n return ia === 1 / b ? 0 : (ia < 0 ? -1 : 1);\n }\n\n return a !== a ? (b !== b ? 0 : 1) : -1\n };\n\n for (var i = 0; i < arrays.length; ++i) {\n var TypedArray = arrays[i];\n if (typeof TypedArray.prototype.sort === \"undefined\") {\n Object.defineProperty(TypedArray.prototype, 'sort', {\n value: function(compareFunction) {\n return Array.prototype.sort.call(this, compareFunction || totalOrderComparator);\n }\n });\n }\n }\n})();\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.equals = function (obj1, obj2) {\n if (obj1 == null) {\n return obj2 == null;\n }\n\n if (obj2 == null) {\n return false;\n }\n\n if (obj1 !== obj1) {\n return obj2 !== obj2;\n }\n\n if (typeof obj1 === \"object\" && typeof obj1.equals === \"function\") {\n return obj1.equals(obj2);\n }\n\n if (typeof obj1 === \"number\" && typeof obj2 === \"number\") {\n return obj1 === obj2 && (obj1 !== 0 || 1 / obj1 === 1 / obj2)\n }\n\n return obj1 === obj2;\n};\n\nKotlin.hashCode = function (obj) {\n if (obj == null) {\n return 0;\n }\n var objType = typeof obj;\n if (\"object\" === objType) {\n return \"function\" === typeof obj.hashCode ? obj.hashCode() : getObjectHashCode(obj);\n }\n if (\"function\" === objType) {\n return getObjectHashCode(obj);\n }\n if (\"number\" === objType) {\n return Kotlin.numberHashCode(obj);\n }\n if (\"boolean\" === objType) {\n return Number(obj)\n }\n\n var str = String(obj);\n return getStringHashCode(str);\n};\n\n\nKotlin.toString = function (o) {\n if (o == null) {\n return \"null\";\n }\n else if (Kotlin.isArrayish(o)) {\n return \"[...]\";\n }\n else {\n return o.toString();\n }\n};\n\n/** @const */\nvar POW_2_32 = 4294967296;\n// TODO: consider switching to Symbol type once we are on ES6.\n/** @const */\nvar OBJECT_HASH_CODE_PROPERTY_NAME = \"kotlinHashCodeValue$\";\n\nfunction getObjectHashCode(obj) {\n if (!(OBJECT_HASH_CODE_PROPERTY_NAME in obj)) {\n var hash = (Math.random() * POW_2_32) | 0; // Make 32-bit singed integer.\n Object.defineProperty(obj, OBJECT_HASH_CODE_PROPERTY_NAME, { value: hash, enumerable: false });\n }\n return obj[OBJECT_HASH_CODE_PROPERTY_NAME];\n}\n\nfunction getStringHashCode(str) {\n var hash = 0;\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n hash = (hash * 31 + code) | 0; // Keep it 32-bit.\n }\n return hash;\n}\n\nKotlin.identityHashCode = getObjectHashCode;\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/**\n * @param {string} id\n * @param {Object} declaration\n */\nKotlin.defineModule = function (id, declaration) {\n};\n\nKotlin.defineInlineFunction = function(tag, fun) {\n return fun;\n};\n\nKotlin.wrapFunction = function(fun) {\n var f = function() {\n f = fun();\n return f.apply(this, arguments);\n };\n return function() {\n return f.apply(this, arguments);\n };\n};\n\nKotlin.isTypeOf = function(type) {\n return function (object) {\n return typeof object === type;\n }\n};\n\nKotlin.isInstanceOf = function (klass) {\n return function (object) {\n return Kotlin.isType(object, klass);\n }\n};\n\nKotlin.orNull = function (fn) {\n return function (object) {\n return object == null || fn(object);\n }\n};\n\nKotlin.andPredicate = function (a, b) {\n return function (object) {\n return a(object) && b(object);\n }\n};\n\nKotlin.kotlinModuleMetadata = function (abiVersion, moduleName, data) {\n};\n\nKotlin.suspendCall = function(value) {\n return value;\n};\n\nKotlin.coroutineResult = function(qualifier) {\n throwMarkerError();\n};\n\nKotlin.coroutineController = function(qualifier) {\n throwMarkerError();\n};\n\nKotlin.coroutineReceiver = function(qualifier) {\n throwMarkerError();\n};\n\nKotlin.setCoroutineResult = function(value, qualifier) {\n throwMarkerError();\n};\n\nKotlin.getReifiedTypeParameterKType = function(typeParameter) {\n throwMarkerError();\n};\n\nfunction throwMarkerError() {\n throw new Error(\n \"This marker function should never been called. \" +\n \"Looks like compiler did not eliminate it properly. \" +\n \"Please, report an issue if you caught this exception.\");\n}\n\nKotlin.getFunctionById = function(id, defaultValue) {\n return function() {\n return defaultValue;\n }\n};","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.toShort = function (a) {\n return (a & 0xFFFF) << 16 >> 16;\n};\n\nKotlin.toByte = function (a) {\n return (a & 0xFF) << 24 >> 24;\n};\n\nKotlin.toChar = function (a) {\n return a & 0xFFFF;\n};\n\nKotlin.numberToLong = function (a) {\n return a instanceof Kotlin.Long ? a : Kotlin.Long.fromNumber(a);\n};\n\nKotlin.numberToInt = function (a) {\n return a instanceof Kotlin.Long ? a.toInt() : Kotlin.doubleToInt(a);\n};\n\nKotlin.numberToShort = function (a) {\n return Kotlin.toShort(Kotlin.numberToInt(a));\n};\n\nKotlin.numberToByte = function (a) {\n return Kotlin.toByte(Kotlin.numberToInt(a));\n};\n\nKotlin.numberToDouble = function (a) {\n return +a;\n};\n\nKotlin.numberToChar = function (a) {\n return Kotlin.toChar(Kotlin.numberToInt(a));\n};\n\nKotlin.doubleToInt = function(a) {\n if (a > 2147483647) return 2147483647;\n if (a < -2147483648) return -2147483648;\n return a | 0;\n};\n\nKotlin.toBoxedChar = function (a) {\n if (a == null) return a;\n if (a instanceof Kotlin.BoxedChar) return a;\n return new Kotlin.BoxedChar(a);\n};\n\nKotlin.unboxChar = function(a) {\n if (a == null) return a;\n return Kotlin.toChar(a);\n};\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Copyright 2009 The Closure Library Authors. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\n/**\n * Constructs a 64-bit two's-complement integer, given its low and high 32-bit\n * values as *signed* integers. See the from* functions below for more\n * convenient ways of constructing Longs.\n *\n * The internal representation of a long is the two given signed, 32-bit values.\n * We use 32-bit pieces because these are the size of integers on which\n * Javascript performs bit-operations. For operations like addition and\n * multiplication, we split each number into 16-bit pieces, which can easily be\n * multiplied within Javascript's floating-point representation without overflow\n * or change in sign.\n *\n * In the algorithms below, we frequently reduce the negative case to the\n * positive case by negating the input(s) and then post-processing the result.\n * Note that we must ALWAYS check specially whether those values are MIN_VALUE\n * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n * a positive number, it overflows back into a negative). Not handling this\n * case would often result in infinite recursion.\n *\n * @param {number} low The low (signed) 32 bits of the long.\n * @param {number} high The high (signed) 32 bits of the long.\n * @constructor\n * @final\n */\nKotlin.Long = function(low, high) {\n /**\n * @type {number}\n * @private\n */\n this.low_ = low | 0; // force into 32 signed bits.\n\n /**\n * @type {number}\n * @private\n */\n this.high_ = high | 0; // force into 32 signed bits.\n};\n\nKotlin.Long.$metadata$ = {\n kind: \"class\",\n simpleName: \"Long\",\n interfaces:[]\n};\n\n\n// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the\n// from* methods on which they depend.\n\n\n/**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @private\n */\nKotlin.Long.IntCache_ = {};\n\n\n/**\n * Returns a Long representing the given (32-bit) integer value.\n * @param {number} value The 32-bit integer in question.\n * @return {!Kotlin.Long} The corresponding Long value.\n */\nKotlin.Long.fromInt = function(value) {\n if (-128 <= value && value < 128) {\n var cachedObj = Kotlin.Long.IntCache_[value];\n if (cachedObj) {\n return cachedObj;\n }\n }\n\n var obj = new Kotlin.Long(value | 0, value < 0 ? -1 : 0);\n if (-128 <= value && value < 128) {\n Kotlin.Long.IntCache_[value] = obj;\n }\n return obj;\n};\n\n\n/**\n * Converts this number value to `Long`.\n * The fractional part, if any, is rounded down towards zero.\n * Returns zero if this `Double` value is `NaN`, `Long.MIN_VALUE` if it's less than `Long.MIN_VALUE`,\n * `Long.MAX_VALUE` if it's bigger than `Long.MAX_VALUE`.\n * @param {number} value The number in question.\n * @return {!Kotlin.Long} The corresponding Long value.\n */\nKotlin.Long.fromNumber = function(value) {\n if (isNaN(value)) {\n return Kotlin.Long.ZERO;\n } else if (value <= -Kotlin.Long.TWO_PWR_63_DBL_) {\n return Kotlin.Long.MIN_VALUE;\n } else if (value + 1 >= Kotlin.Long.TWO_PWR_63_DBL_) {\n return Kotlin.Long.MAX_VALUE;\n } else if (value < 0) {\n return Kotlin.Long.fromNumber(-value).negate();\n } else {\n return new Kotlin.Long(\n (value % Kotlin.Long.TWO_PWR_32_DBL_) | 0,\n (value / Kotlin.Long.TWO_PWR_32_DBL_) | 0);\n }\n};\n\n\n/**\n * Returns a Long representing the 64-bit integer that comes by concatenating\n * the given high and low bits. Each is assumed to use 32 bits.\n * @param {number} lowBits The low 32-bits.\n * @param {number} highBits The high 32-bits.\n * @return {!Kotlin.Long} The corresponding Long value.\n */\nKotlin.Long.fromBits = function(lowBits, highBits) {\n return new Kotlin.Long(lowBits, highBits);\n};\n\n\n/**\n * Returns a Long representation of the given string, written using the given\n * radix.\n * @param {string} str The textual representation of the Long.\n * @param {number=} opt_radix The radix in which the text is written.\n * @return {!Kotlin.Long} The corresponding Long value.\n */\nKotlin.Long.fromString = function(str, opt_radix) {\n if (str.length == 0) {\n throw Error('number format error: empty string');\n }\n\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n\n if (str.charAt(0) == '-') {\n return Kotlin.Long.fromString(str.substring(1), radix).negate();\n } else if (str.indexOf('-') >= 0) {\n throw Error('number format error: interior \"-\" character: ' + str);\n }\n\n // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = Kotlin.Long.fromNumber(Math.pow(radix, 8));\n\n var result = Kotlin.Long.ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i);\n var value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = Kotlin.Long.fromNumber(Math.pow(radix, size));\n result = result.multiply(power).add(Kotlin.Long.fromNumber(value));\n } else {\n result = result.multiply(radixToPower);\n result = result.add(Kotlin.Long.fromNumber(value));\n }\n }\n return result;\n};\n\n\n// NOTE: the compiler should inline these constant values below and then remove\n// these variables, so there should be no runtime penalty for these.\n\n\n/**\n * Number used repeated below in calculations. This must appear before the\n * first call to any from* function below.\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_16_DBL_ = 1 << 16;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_24_DBL_ = 1 << 24;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_32_DBL_ =\n Kotlin.Long.TWO_PWR_16_DBL_ * Kotlin.Long.TWO_PWR_16_DBL_;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_31_DBL_ =\n Kotlin.Long.TWO_PWR_32_DBL_ / 2;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_48_DBL_ =\n Kotlin.Long.TWO_PWR_32_DBL_ * Kotlin.Long.TWO_PWR_16_DBL_;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_64_DBL_ =\n Kotlin.Long.TWO_PWR_32_DBL_ * Kotlin.Long.TWO_PWR_32_DBL_;\n\n\n/**\n * @type {number}\n * @private\n */\nKotlin.Long.TWO_PWR_63_DBL_ =\n Kotlin.Long.TWO_PWR_64_DBL_ / 2;\n\n\n/** @type {!Kotlin.Long} */\nKotlin.Long.ZERO = Kotlin.Long.fromInt(0);\n\n\n/** @type {!Kotlin.Long} */\nKotlin.Long.ONE = Kotlin.Long.fromInt(1);\n\n\n/** @type {!Kotlin.Long} */\nKotlin.Long.NEG_ONE = Kotlin.Long.fromInt(-1);\n\n\n/** @type {!Kotlin.Long} */\nKotlin.Long.MAX_VALUE =\n Kotlin.Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);\n\n\n/** @type {!Kotlin.Long} */\nKotlin.Long.MIN_VALUE = Kotlin.Long.fromBits(0, 0x80000000 | 0);\n\n\n/**\n * @type {!Kotlin.Long}\n * @private\n */\nKotlin.Long.TWO_PWR_24_ = Kotlin.Long.fromInt(1 << 24);\n\n\n/** @return {number} The value, assuming it is a 32-bit integer. */\nKotlin.Long.prototype.toInt = function() {\n return this.low_;\n};\n\n\n/** @return {number} The closest floating-point representation to this value. */\nKotlin.Long.prototype.toNumber = function() {\n return this.high_ * Kotlin.Long.TWO_PWR_32_DBL_ +\n this.getLowBitsUnsigned();\n};\n\n/** @return {number} The 32-bit hashCode of this value. */\nKotlin.Long.prototype.hashCode = function() {\n return this.high_ ^ this.low_;\n};\n\n/**\n * @param {number=} opt_radix The radix in which the text should be written.\n * @return {string} The textual representation of this value.\n * @override\n */\nKotlin.Long.prototype.toString = function(opt_radix) {\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n\n if (this.isZero()) {\n return '0';\n }\n\n if (this.isNegative()) {\n if (this.equalsLong(Kotlin.Long.MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = Kotlin.Long.fromNumber(radix);\n var div = this.div(radixLong);\n var rem = div.multiply(radixLong).subtract(this);\n return div.toString(radix) + rem.toInt().toString(radix);\n } else {\n return '-' + this.negate().toString(radix);\n }\n }\n\n // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = Kotlin.Long.fromNumber(Math.pow(radix, 6));\n\n var rem = this;\n var result = '';\n while (true) {\n var remDiv = rem.div(radixToPower);\n var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();\n var digits = intval.toString(radix);\n\n rem = remDiv;\n if (rem.isZero()) {\n return digits + result;\n } else {\n while (digits.length < 6) {\n digits = '0' + digits;\n }\n result = '' + digits + result;\n }\n }\n};\n\n\n/** @return {number} The high 32-bits as a signed value. */\nKotlin.Long.prototype.getHighBits = function() {\n return this.high_;\n};\n\n\n/** @return {number} The low 32-bits as a signed value. */\nKotlin.Long.prototype.getLowBits = function() {\n return this.low_;\n};\n\n\n/** @return {number} The low 32-bits as an unsigned value. */\nKotlin.Long.prototype.getLowBitsUnsigned = function() {\n return (this.low_ >= 0) ?\n this.low_ : Kotlin.Long.TWO_PWR_32_DBL_ + this.low_;\n};\n\n\n/**\n * @return {number} Returns the number of bits needed to represent the absolute\n * value of this Long.\n */\nKotlin.Long.prototype.getNumBitsAbs = function() {\n if (this.isNegative()) {\n if (this.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return 64;\n } else {\n return this.negate().getNumBitsAbs();\n }\n } else {\n var val = this.high_ != 0 ? this.high_ : this.low_;\n for (var bit = 31; bit > 0; bit--) {\n if ((val & (1 << bit)) != 0) {\n break;\n }\n }\n return this.high_ != 0 ? bit + 33 : bit + 1;\n }\n};\n\n\n/** @return {boolean} Whether this value is zero. */\nKotlin.Long.prototype.isZero = function() {\n return this.high_ == 0 && this.low_ == 0;\n};\n\n\n/** @return {boolean} Whether this value is negative. */\nKotlin.Long.prototype.isNegative = function() {\n return this.high_ < 0;\n};\n\n\n/** @return {boolean} Whether this value is odd. */\nKotlin.Long.prototype.isOdd = function() {\n return (this.low_ & 1) == 1;\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long equals the other.\n */\nKotlin.Long.prototype.equalsLong = function(other) {\n return (this.high_ == other.high_) && (this.low_ == other.low_);\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long does not equal the other.\n */\nKotlin.Long.prototype.notEqualsLong = function(other) {\n return (this.high_ != other.high_) || (this.low_ != other.low_);\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long is less than the other.\n */\nKotlin.Long.prototype.lessThan = function(other) {\n return this.compare(other) < 0;\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long is less than or equal to the other.\n */\nKotlin.Long.prototype.lessThanOrEqual = function(other) {\n return this.compare(other) <= 0;\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long is greater than the other.\n */\nKotlin.Long.prototype.greaterThan = function(other) {\n return this.compare(other) > 0;\n};\n\n\n/**\n * @param {Kotlin.Long} other Long to compare against.\n * @return {boolean} Whether this Long is greater than or equal to the other.\n */\nKotlin.Long.prototype.greaterThanOrEqual = function(other) {\n return this.compare(other) >= 0;\n};\n\n\n/**\n * Compares this Long with the given one.\n * @param {Kotlin.Long} other Long to compare against.\n * @return {number} 0 if they are the same, 1 if the this is greater, and -1\n * if the given one is greater.\n */\nKotlin.Long.prototype.compare = function(other) {\n if (this.equalsLong(other)) {\n return 0;\n }\n\n var thisNeg = this.isNegative();\n var otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) {\n return -1;\n }\n if (!thisNeg && otherNeg) {\n return 1;\n }\n\n // at this point, the signs are the same, so subtraction will not overflow\n if (this.subtract(other).isNegative()) {\n return -1;\n } else {\n return 1;\n }\n};\n\n\n/** @return {!Kotlin.Long} The negation of this value. */\nKotlin.Long.prototype.negate = function() {\n if (this.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return Kotlin.Long.MIN_VALUE;\n } else {\n return this.not().add(Kotlin.Long.ONE);\n }\n};\n\n\n/**\n * Returns the sum of this and the given Long.\n * @param {Kotlin.Long} other Long to add to this one.\n * @return {!Kotlin.Long} The sum of this and the given Long.\n */\nKotlin.Long.prototype.add = function(other) {\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return Kotlin.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n};\n\n\n/**\n * Returns the difference of this and the given Long.\n * @param {Kotlin.Long} other Long to subtract from this.\n * @return {!Kotlin.Long} The difference of this and the given Long.\n */\nKotlin.Long.prototype.subtract = function(other) {\n return this.add(other.negate());\n};\n\n\n/**\n * Returns the product of this and the given long.\n * @param {Kotlin.Long} other Long to multiply with this.\n * @return {!Kotlin.Long} The product of this and the other.\n */\nKotlin.Long.prototype.multiply = function(other) {\n if (this.isZero()) {\n return Kotlin.Long.ZERO;\n } else if (other.isZero()) {\n return Kotlin.Long.ZERO;\n }\n\n if (this.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return other.isOdd() ? Kotlin.Long.MIN_VALUE : Kotlin.Long.ZERO;\n } else if (other.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return this.isOdd() ? Kotlin.Long.MIN_VALUE : Kotlin.Long.ZERO;\n }\n\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().multiply(other.negate());\n } else {\n return this.negate().multiply(other).negate();\n }\n } else if (other.isNegative()) {\n return this.multiply(other.negate()).negate();\n }\n\n // If both longs are small, use float multiplication\n if (this.lessThan(Kotlin.Long.TWO_PWR_24_) &&\n other.lessThan(Kotlin.Long.TWO_PWR_24_)) {\n return Kotlin.Long.fromNumber(this.toNumber() * other.toNumber());\n }\n\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return Kotlin.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n};\n\n\n/**\n * Returns this Long divided by the given one.\n * @param {Kotlin.Long} other Long by which to divide.\n * @return {!Kotlin.Long} This Long divided by the given one.\n */\nKotlin.Long.prototype.div = function(other) {\n if (other.isZero()) {\n throw Error('division by zero');\n } else if (this.isZero()) {\n return Kotlin.Long.ZERO;\n }\n\n if (this.equalsLong(Kotlin.Long.MIN_VALUE)) {\n if (other.equalsLong(Kotlin.Long.ONE) ||\n other.equalsLong(Kotlin.Long.NEG_ONE)) {\n return Kotlin.Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n } else if (other.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return Kotlin.Long.ONE;\n } else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = this.shiftRight(1);\n var approx = halfThis.div(other).shiftLeft(1);\n if (approx.equalsLong(Kotlin.Long.ZERO)) {\n return other.isNegative() ? Kotlin.Long.ONE : Kotlin.Long.NEG_ONE;\n } else {\n var rem = this.subtract(other.multiply(approx));\n var result = approx.add(rem.div(other));\n return result;\n }\n }\n } else if (other.equalsLong(Kotlin.Long.MIN_VALUE)) {\n return Kotlin.Long.ZERO;\n }\n\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().div(other.negate());\n } else {\n return this.negate().div(other).negate();\n }\n } else if (other.isNegative()) {\n return this.div(other.negate()).negate();\n }\n\n // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n var res = Kotlin.Long.ZERO;\n var rem = this;\n while (rem.greaterThanOrEqual(other)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));\n\n // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n var log2 = Math.ceil(Math.log(approx) / Math.LN2);\n var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);\n\n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n var approxRes = Kotlin.Long.fromNumber(approx);\n var approxRem = approxRes.multiply(other);\n while (approxRem.isNegative() || approxRem.greaterThan(rem)) {\n approx -= delta;\n approxRes = Kotlin.Long.fromNumber(approx);\n approxRem = approxRes.multiply(other);\n }\n\n // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n if (approxRes.isZero()) {\n approxRes = Kotlin.Long.ONE;\n }\n\n res = res.add(approxRes);\n rem = rem.subtract(approxRem);\n }\n return res;\n};\n\n\n/**\n * Returns this Long modulo the given one.\n * @param {Kotlin.Long} other Long by which to mod.\n * @return {!Kotlin.Long} This Long modulo the given one.\n */\nKotlin.Long.prototype.modulo = function(other) {\n return this.subtract(this.div(other).multiply(other));\n};\n\n\n/** @return {!Kotlin.Long} The bitwise-NOT of this value. */\nKotlin.Long.prototype.not = function() {\n return Kotlin.Long.fromBits(~this.low_, ~this.high_);\n};\n\n\n/**\n * Returns the bitwise-AND of this Long and the given one.\n * @param {Kotlin.Long} other The Long with which to AND.\n * @return {!Kotlin.Long} The bitwise-AND of this and the other.\n */\nKotlin.Long.prototype.and = function(other) {\n return Kotlin.Long.fromBits(this.low_ & other.low_,\n this.high_ & other.high_);\n};\n\n\n/**\n * Returns the bitwise-OR of this Long and the given one.\n * @param {Kotlin.Long} other The Long with which to OR.\n * @return {!Kotlin.Long} The bitwise-OR of this and the other.\n */\nKotlin.Long.prototype.or = function(other) {\n return Kotlin.Long.fromBits(this.low_ | other.low_,\n this.high_ | other.high_);\n};\n\n\n/**\n * Returns the bitwise-XOR of this Long and the given one.\n * @param {Kotlin.Long} other The Long with which to XOR.\n * @return {!Kotlin.Long} The bitwise-XOR of this and the other.\n */\nKotlin.Long.prototype.xor = function(other) {\n return Kotlin.Long.fromBits(this.low_ ^ other.low_,\n this.high_ ^ other.high_);\n};\n\n\n/**\n * Returns this Long with bits shifted to the left by the given amount.\n * @param {number} numBits The number of bits by which to shift.\n * @return {!Kotlin.Long} This shifted to the left by the given amount.\n */\nKotlin.Long.prototype.shiftLeft = function(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n } else {\n var low = this.low_;\n if (numBits < 32) {\n var high = this.high_;\n return Kotlin.Long.fromBits(\n low << numBits,\n (high << numBits) | (low >>> (32 - numBits)));\n } else {\n return Kotlin.Long.fromBits(0, low << (numBits - 32));\n }\n }\n};\n\n\n/**\n * Returns this Long with bits shifted to the right by the given amount.\n * @param {number} numBits The number of bits by which to shift.\n * @return {!Kotlin.Long} This shifted to the right by the given amount.\n */\nKotlin.Long.prototype.shiftRight = function(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n } else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Kotlin.Long.fromBits(\n (low >>> numBits) | (high << (32 - numBits)),\n high >> numBits);\n } else {\n return Kotlin.Long.fromBits(\n high >> (numBits - 32),\n high >= 0 ? 0 : -1);\n }\n }\n};\n\n\n/**\n * Returns this Long with bits shifted to the right by the given amount, with\n * zeros placed into the new leading bits.\n * @param {number} numBits The number of bits by which to shift.\n * @return {!Kotlin.Long} This shifted to the right by the given amount, with\n * zeros placed into the new leading bits.\n */\nKotlin.Long.prototype.shiftRightUnsigned = function(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n } else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Kotlin.Long.fromBits(\n (low >>> numBits) | (high << (32 - numBits)),\n high >>> numBits);\n } else if (numBits == 32) {\n return Kotlin.Long.fromBits(high, 0);\n } else {\n return Kotlin.Long.fromBits(high >>> (numBits - 32), 0);\n }\n }\n};\n\n// Support for Kotlin\nKotlin.Long.prototype.equals = function (other) {\n return other instanceof Kotlin.Long && this.equalsLong(other);\n};\n\nKotlin.Long.prototype.compareTo_11rb$ = Kotlin.Long.prototype.compare;\n\nKotlin.Long.prototype.inc = function() {\n return this.add(Kotlin.Long.ONE);\n};\n\nKotlin.Long.prototype.dec = function() {\n return this.add(Kotlin.Long.NEG_ONE);\n};\n\nKotlin.Long.prototype.valueOf = function() {\n return this.toNumber();\n};\n\nKotlin.Long.prototype.unaryPlus = function() {\n return this;\n};\n\nKotlin.Long.prototype.unaryMinus = Kotlin.Long.prototype.negate;\nKotlin.Long.prototype.inv = Kotlin.Long.prototype.not;\n\nKotlin.Long.prototype.rangeTo = function (other) {\n return new Kotlin.kotlin.ranges.LongRange(this, other);\n};","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. \n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nKotlin.Kind = {\n CLASS: \"class\",\n INTERFACE: \"interface\",\n OBJECT: \"object\"\n};\n\nKotlin.callGetter = function (thisObject, klass, propertyName) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(klass, propertyName);\n if (propertyDescriptor != null && propertyDescriptor.get != null) {\n return propertyDescriptor.get.call(thisObject);\n }\n\n propertyDescriptor = Object.getOwnPropertyDescriptor(thisObject, propertyName);\n if (propertyDescriptor != null && \"value\" in propertyDescriptor) {\n return thisObject[propertyName];\n }\n\n return Kotlin.callGetter(thisObject, Object.getPrototypeOf(klass), propertyName);\n};\n\nKotlin.callSetter = function (thisObject, klass, propertyName, value) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(klass, propertyName);\n if (propertyDescriptor != null && propertyDescriptor.set != null) {\n propertyDescriptor.set.call(thisObject, value);\n return;\n }\n\n propertyDescriptor = Object.getOwnPropertyDescriptor(thisObject, propertyName);\n if (propertyDescriptor != null && \"value\" in propertyDescriptor) {\n thisObject[propertyName] = value;\n return\n }\n\n Kotlin.callSetter(thisObject, Object.getPrototypeOf(klass), propertyName, value);\n};\n\nfunction isInheritanceFromInterface(ctor, iface) {\n if (ctor === iface) return true;\n\n var metadata = ctor.$metadata$;\n if (metadata != null) {\n var interfaces = metadata.interfaces;\n for (var i = 0; i < interfaces.length; i++) {\n if (isInheritanceFromInterface(interfaces[i], iface)) {\n return true;\n }\n }\n }\n\n var superPrototype = ctor.prototype != null ? Object.getPrototypeOf(ctor.prototype) : null;\n var superConstructor = superPrototype != null ? superPrototype.constructor : null;\n return superConstructor != null && isInheritanceFromInterface(superConstructor, iface);\n}\n\n/**\n *\n * @param {*} object\n * @param {Function|Object} klass\n * @returns {Boolean}\n */\nKotlin.isType = function (object, klass) {\n if (klass === Object) {\n switch (typeof object) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"function\":\n return true;\n default:\n return object instanceof Object;\n }\n }\n\n if (object == null || klass == null || (typeof object !== 'object' && typeof object !== 'function')) {\n return false;\n }\n\n if (typeof klass === \"function\" && object instanceof klass) {\n return true;\n }\n\n var proto = Object.getPrototypeOf(klass);\n var constructor = proto != null ? proto.constructor : null;\n if (constructor != null && \"$metadata$\" in constructor) {\n var metadata = constructor.$metadata$;\n if (metadata.kind === Kotlin.Kind.OBJECT) {\n return object === klass;\n }\n }\n\n var klassMetadata = klass.$metadata$;\n\n // In WebKit (JavaScriptCore) for some interfaces from DOM typeof returns \"object\", nevertheless they can be used in RHS of instanceof\n if (klassMetadata == null) {\n return object instanceof klass;\n }\n\n if (klassMetadata.kind === Kotlin.Kind.INTERFACE && object.constructor != null) {\n return isInheritanceFromInterface(object.constructor, klass);\n }\n\n return false;\n};\n\nKotlin.isNumber = function (a) {\n return typeof a == \"number\" || a instanceof Kotlin.Long;\n};\n\nKotlin.isChar = function (value) {\n return value instanceof Kotlin.BoxedChar\n};\n\nKotlin.isComparable = function (value) {\n var type = typeof value;\n\n return type === \"string\" ||\n type === \"boolean\" ||\n Kotlin.isNumber(value) ||\n Kotlin.isType(value, Kotlin.kotlin.Comparable);\n};\n\nKotlin.isCharSequence = function (value) {\n return typeof value === \"string\" || Kotlin.isType(value, Kotlin.kotlin.CharSequence);\n};","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// a package is omitted to get declarations directly under the module\n\n@PublishedApi\nexternal internal fun <T> Array(size: Int): Array<T>\n\n@JsName(\"newArray\")\nfun <T> newArray(size: Int, initValue: T) = fillArrayVal(Array<T>(size), initValue)\n\n@JsName(\"newArrayF\")\ninline fun <T> arrayWithFun(size: Int, init: (Int) -> T) = fillArrayFun(Array<T>(size), init)\n\n@JsName(\"fillArray\")\ninline fun <T> fillArrayFun(array: Array<T>, init: (Int) -> T): Array<T> {\n for (i in 0..array.size - 1) {\n array[i] = init(i)\n }\n return array\n}\n\n@JsName(\"booleanArray\")\nfun booleanArray(size: Int, init: dynamic): Array<Boolean> {\n val result: dynamic = Array<Boolean>(size)\n result.`$type$` = \"BooleanArray\"\n return when (init) {\n null, true -> fillArrayVal(result, false)\n false -> result\n else -> fillArrayFun<Boolean>(result, init)\n }\n}\n\n@JsName(\"booleanArrayF\")\ninline fun booleanArrayWithFun(size: Int, init: (Int) -> Boolean): Array<Boolean> = fillArrayFun(booleanArray(size, false), init)\n\n@JsName(\"charArray\")\n@Suppress(\"UNUSED_PARAMETER\")\nfun charArray(size: Int, init: dynamic): Array<Char> {\n val result = js(\"new Uint16Array(size)\")\n result.`$type$` = \"CharArray\"\n return when (init) {\n null, true, false -> result // For consistency\n else -> fillArrayFun<Char>(result, init)\n }\n}\n\n@JsName(\"charArrayF\")\ninline fun charArrayWithFun(size: Int, init: (Int) -> Char): Array<Char> {\n val array = charArray(size, null)\n for (i in 0..array.size - 1) {\n @Suppress(\"UNUSED_VARIABLE\") // used in js block\n val value = init(i)\n js(\"array[i] = value;\")\n }\n return array\n}\n\n@JsName(\"untypedCharArrayF\")\ninline fun untypedCharArrayWithFun(size: Int, init: (Int) -> Char): Array<Char> {\n val array = Array<Char>(size)\n for (i in 0..array.size - 1) {\n @Suppress(\"UNUSED_VARIABLE\") // used in js block\n val value = init(i)\n js(\"array[i] = value;\")\n }\n return array\n}\n\n@JsName(\"longArray\")\nfun longArray(size: Int, init: dynamic): Array<Long> {\n val result: dynamic = Array<Long>(size)\n result.`$type$` = \"LongArray\"\n return when (init) {\n null, true -> fillArrayVal(result, 0L)\n false -> result\n else -> fillArrayFun<Long>(result, init)\n }\n}\n\n@JsName(\"longArrayF\")\ninline fun longArrayWithFun(size: Int, init: (Int) -> Long): Array<Long> = fillArrayFun(longArray(size, false), init)\n\nprivate fun <T> fillArrayVal(array: Array<T>, initValue: T): Array<T> {\n for (i in 0..array.size - 1) {\n array[i] = initValue\n }\n return array\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\npublic class Enum<T : Enum<T>> : Comparable<Enum<T>> {\n @JsName(\"name$\") private var _name: String = \"\"\n @JsName(\"ordinal$\") private var _ordinal: Int = 0\n\n val name: String\n get() = _name\n\n val ordinal: Int\n get() = _ordinal\n\n override fun compareTo(other: Enum<T>) = ordinal.compareTo(other.ordinal)\n\n override fun equals(other: Any?) = this === other\n\n override fun hashCode(): Int = js(\"Kotlin.identityHashCode\")(this)\n\n override fun toString() = name\n\n companion object\n}",null,"/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"ArraysKt\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Array<out T>.component1(): T {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ByteArray.component1(): Byte {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ShortArray.component1(): Short {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun IntArray.component1(): Int {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun LongArray.component1(): Long {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun FloatArray.component1(): Float {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun DoubleArray.component1(): Double {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun BooleanArray.component1(): Boolean {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharArray.component1(): Char {\n return get(0)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Array<out T>.component2(): T {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ByteArray.component2(): Byte {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ShortArray.component2(): Short {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun IntArray.component2(): Int {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun LongArray.component2(): Long {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun FloatArray.component2(): Float {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun DoubleArray.component2(): Double {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun BooleanArray.component2(): Boolean {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharArray.component2(): Char {\n return get(1)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Array<out T>.component3(): T {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ByteArray.component3(): Byte {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ShortArray.component3(): Short {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun IntArray.component3(): Int {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun LongArray.component3(): Long {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun FloatArray.component3(): Float {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun DoubleArray.component3(): Double {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun BooleanArray.component3(): Boolean {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharArray.component3(): Char {\n return get(2)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Array<out T>.component4(): T {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ByteArray.component4(): Byte {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ShortArray.component4(): Short {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun IntArray.component4(): Int {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun LongArray.component4(): Long {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun FloatArray.component4(): Float {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun DoubleArray.component4(): Double {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun BooleanArray.component4(): Boolean {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharArray.component4(): Char {\n return get(3)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Array<out T>.component5(): T {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ByteArray.component5(): Byte {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun ShortArray.component5(): Short {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun IntArray.component5(): Int {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun LongArray.component5(): Long {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun FloatArray.component5(): Float {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun DoubleArray.component5(): Double {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun BooleanArray.component5(): Boolean {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharArray.component5(): Char {\n return get(4)\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun <@kotlin.internal.OnlyInputTypes T> Array<out T>.contains(element: T): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun ByteArray.contains(element: Byte): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun ShortArray.contains(element: Short): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun IntArray.contains(element: Int): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun LongArray.contains(element: Long): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'any { it == element }' instead to continue using this behavior, or '.asList().contains(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"any { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@Suppress(\"DEPRECATION\")\npublic operator fun FloatArray.contains(element: Float): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'any { it == element }' instead to continue using this behavior, or '.asList().contains(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"any { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@Suppress(\"DEPRECATION\")\npublic operator fun DoubleArray.contains(element: Double): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun BooleanArray.contains(element: Boolean): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns `true` if [element] is found in the array.\n */\npublic operator fun CharArray.contains(element: Char): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun <T> Array<out T>.elementAt(index: Int): T\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun ByteArray.elementAt(index: Int): Byte\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun ShortArray.elementAt(index: Int): Short\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun IntArray.elementAt(index: Int): Int\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun LongArray.elementAt(index: Int): Long\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun FloatArray.elementAt(index: Int): Float\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun DoubleArray.elementAt(index: Int): Double\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun BooleanArray.elementAt(index: Int): Boolean\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun CharArray.elementAt(index: Int): Char\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Byte): Byte {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Short): Short {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Int): Int {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Long): Long {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Float): Float {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Double): Double {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Boolean): Boolean {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.elementAtOrElse(index: Int, defaultValue: (Int) -> Char): Char {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.elementAtOrNull(index: Int): T? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.elementAtOrNull(index: Int): Byte? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.elementAtOrNull(index: Int): Short? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.elementAtOrNull(index: Int): Int? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.elementAtOrNull(index: Int): Long? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.elementAtOrNull(index: Int): Float? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.elementAtOrNull(index: Int): Double? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.elementAtOrNull(index: Int): Boolean? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.elementAtOrNull(index: Int): Char? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.find(predicate: (T) -> Boolean): T? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.find(predicate: (Byte) -> Boolean): Byte? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.find(predicate: (Short) -> Boolean): Short? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.find(predicate: (Int) -> Boolean): Int? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.find(predicate: (Long) -> Boolean): Long? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.find(predicate: (Float) -> Boolean): Float? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.find(predicate: (Double) -> Boolean): Double? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.find(predicate: (Boolean) -> Boolean): Boolean? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.find(predicate: (Char) -> Boolean): Char? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.findLast(predicate: (Byte) -> Boolean): Byte? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.findLast(predicate: (Short) -> Boolean): Short? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.findLast(predicate: (Int) -> Boolean): Int? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.findLast(predicate: (Long) -> Boolean): Long? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.findLast(predicate: (Float) -> Boolean): Float? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.findLast(predicate: (Double) -> Boolean): Double? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.findLast(predicate: (Boolean) -> Boolean): Boolean? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.findLast(predicate: (Char) -> Boolean): Char? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun <T> Array<out T>.first(): T {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun ByteArray.first(): Byte {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun ShortArray.first(): Short {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun IntArray.first(): Int {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun LongArray.first(): Long {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun FloatArray.first(): Float {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun DoubleArray.first(): Double {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun BooleanArray.first(): Boolean {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\npublic fun CharArray.first(): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun <T> Array<out T>.first(predicate: (T) -> Boolean): T {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun ByteArray.first(predicate: (Byte) -> Boolean): Byte {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun ShortArray.first(predicate: (Short) -> Boolean): Short {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun IntArray.first(predicate: (Int) -> Boolean): Int {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun LongArray.first(predicate: (Long) -> Boolean): Long {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun FloatArray.first(predicate: (Float) -> Boolean): Float {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun DoubleArray.first(predicate: (Double) -> Boolean): Double {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun BooleanArray.first(predicate: (Boolean) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun CharArray.first(predicate: (Char) -> Boolean): Char {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun <T> Array<out T>.firstOrNull(): T? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun ByteArray.firstOrNull(): Byte? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun ShortArray.firstOrNull(): Short? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun IntArray.firstOrNull(): Int? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun LongArray.firstOrNull(): Long? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun FloatArray.firstOrNull(): Float? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun DoubleArray.firstOrNull(): Double? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun BooleanArray.firstOrNull(): Boolean? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\npublic fun CharArray.firstOrNull(): Char? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun <T> Array<out T>.firstOrNull(predicate: (T) -> Boolean): T? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun ByteArray.firstOrNull(predicate: (Byte) -> Boolean): Byte? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun ShortArray.firstOrNull(predicate: (Short) -> Boolean): Short? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun IntArray.firstOrNull(predicate: (Int) -> Boolean): Int? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun LongArray.firstOrNull(predicate: (Long) -> Boolean): Long? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun FloatArray.firstOrNull(predicate: (Float) -> Boolean): Float? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun DoubleArray.firstOrNull(predicate: (Double) -> Boolean): Double? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun BooleanArray.firstOrNull(predicate: (Boolean) -> Boolean): Boolean? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun CharArray.firstOrNull(predicate: (Char) -> Boolean): Char? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.getOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.getOrElse(index: Int, defaultValue: (Int) -> Byte): Byte {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.getOrElse(index: Int, defaultValue: (Int) -> Short): Short {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.getOrElse(index: Int, defaultValue: (Int) -> Int): Int {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.getOrElse(index: Int, defaultValue: (Int) -> Long): Long {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.getOrElse(index: Int, defaultValue: (Int) -> Float): Float {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.getOrElse(index: Int, defaultValue: (Int) -> Double): Double {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.getOrElse(index: Int, defaultValue: (Int) -> Boolean): Boolean {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.getOrElse(index: Int, defaultValue: (Int) -> Char): Char {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun <T> Array<out T>.getOrNull(index: Int): T? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun ByteArray.getOrNull(index: Int): Byte? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun ShortArray.getOrNull(index: Int): Short? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun IntArray.getOrNull(index: Int): Int? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun LongArray.getOrNull(index: Int): Long? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun FloatArray.getOrNull(index: Int): Float? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun DoubleArray.getOrNull(index: Int): Double? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun BooleanArray.getOrNull(index: Int): Boolean? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun CharArray.getOrNull(index: Int): Char? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Array<out T>.indexOf(element: T): Int {\n if (element == null) {\n for (index in indices) {\n if (this[index] == null) {\n return index\n }\n }\n } else {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun ByteArray.indexOf(element: Byte): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun ShortArray.indexOf(element: Short): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun IntArray.indexOf(element: Int): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun LongArray.indexOf(element: Long): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'indexOfFirst { it == element }' instead to continue using this behavior, or '.asList().indexOf(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"indexOfFirst { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.indexOf(element: Float): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'indexOfFirst { it == element }' instead to continue using this behavior, or '.asList().indexOf(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"indexOfFirst { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.indexOf(element: Double): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun BooleanArray.indexOf(element: Boolean): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\npublic fun CharArray.indexOf(element: Char): Int {\n for (index in indices) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun <T> Array<out T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun ByteArray.indexOfFirst(predicate: (Byte) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun ShortArray.indexOfFirst(predicate: (Short) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun IntArray.indexOfFirst(predicate: (Int) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun LongArray.indexOfFirst(predicate: (Long) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun FloatArray.indexOfFirst(predicate: (Float) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun DoubleArray.indexOfFirst(predicate: (Double) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun BooleanArray.indexOfFirst(predicate: (Boolean) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun CharArray.indexOfFirst(predicate: (Char) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun <T> Array<out T>.indexOfLast(predicate: (T) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun ByteArray.indexOfLast(predicate: (Byte) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun ShortArray.indexOfLast(predicate: (Short) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun IntArray.indexOfLast(predicate: (Int) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun LongArray.indexOfLast(predicate: (Long) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun FloatArray.indexOfLast(predicate: (Float) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun DoubleArray.indexOfLast(predicate: (Double) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun BooleanArray.indexOfLast(predicate: (Boolean) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\npublic inline fun CharArray.indexOfLast(predicate: (Char) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Array<out T>.last(): T {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun ByteArray.last(): Byte {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun ShortArray.last(): Short {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun IntArray.last(): Int {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun LongArray.last(): Long {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun FloatArray.last(): Float {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun DoubleArray.last(): Double {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun BooleanArray.last(): Boolean {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun CharArray.last(): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Array<out T>.last(predicate: (T) -> Boolean): T {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun ByteArray.last(predicate: (Byte) -> Boolean): Byte {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun ShortArray.last(predicate: (Short) -> Boolean): Short {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun IntArray.last(predicate: (Int) -> Boolean): Int {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun LongArray.last(predicate: (Long) -> Boolean): Long {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun FloatArray.last(predicate: (Float) -> Boolean): Float {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun DoubleArray.last(predicate: (Double) -> Boolean): Double {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun BooleanArray.last(predicate: (Boolean) -> Boolean): Boolean {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun CharArray.last(predicate: (Char) -> Boolean): Char {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Array<out T>.lastIndexOf(element: T): Int {\n if (element == null) {\n for (index in indices.reversed()) {\n if (this[index] == null) {\n return index\n }\n }\n } else {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun ByteArray.lastIndexOf(element: Byte): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun ShortArray.lastIndexOf(element: Short): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun IntArray.lastIndexOf(element: Int): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun LongArray.lastIndexOf(element: Long): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'indexOfLast { it == element }' instead to continue using this behavior, or '.asList().lastIndexOf(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"indexOfLast { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.lastIndexOf(element: Float): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@Deprecated(\"The function has unclear behavior when searching for NaN or zero values and will be removed soon. Use 'indexOfLast { it == element }' instead to continue using this behavior, or '.asList().lastIndexOf(element: T)' to get the same search behavior as in a list.\", ReplaceWith(\"indexOfLast { it == element }\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.lastIndexOf(element: Double): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun BooleanArray.lastIndexOf(element: Boolean): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\npublic fun CharArray.lastIndexOf(element: Char): Int {\n for (index in indices.reversed()) {\n if (element == this[index]) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Array<out T>.lastOrNull(): T? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun ByteArray.lastOrNull(): Byte? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun ShortArray.lastOrNull(): Short? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun IntArray.lastOrNull(): Int? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun LongArray.lastOrNull(): Long? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun FloatArray.lastOrNull(): Float? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun DoubleArray.lastOrNull(): Double? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun BooleanArray.lastOrNull(): Boolean? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun CharArray.lastOrNull(): Char? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Array<out T>.lastOrNull(predicate: (T) -> Boolean): T? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun ByteArray.lastOrNull(predicate: (Byte) -> Boolean): Byte? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun ShortArray.lastOrNull(predicate: (Short) -> Boolean): Short? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun IntArray.lastOrNull(predicate: (Int) -> Boolean): Int? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun LongArray.lastOrNull(predicate: (Long) -> Boolean): Long? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun FloatArray.lastOrNull(predicate: (Float) -> Boolean): Float? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun DoubleArray.lastOrNull(predicate: (Double) -> Boolean): Double? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun BooleanArray.lastOrNull(predicate: (Boolean) -> Boolean): Boolean? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun CharArray.lastOrNull(predicate: (Char) -> Boolean): Char? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.random(): T {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.random(): Byte {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.random(): Short {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.random(): Int {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.random(): Long {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.random(): Float {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.random(): Double {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.random(): Boolean {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.random(): Char {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> Array<out T>.random(random: Random): T {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun ByteArray.random(random: Random): Byte {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun ShortArray.random(random: Random): Short {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun IntArray.random(random: Random): Int {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun LongArray.random(random: Random): Long {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun FloatArray.random(random: Random): Float {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun DoubleArray.random(random: Random): Double {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun BooleanArray.random(random: Random): Boolean {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun CharArray.random(random: Random): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.randomOrNull(): T? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.randomOrNull(): Byte? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.randomOrNull(): Short? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.randomOrNull(): Int? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.randomOrNull(): Long? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.randomOrNull(): Float? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.randomOrNull(): Double? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.randomOrNull(): Boolean? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.randomOrNull(): Char? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> Array<out T>.randomOrNull(random: Random): T? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun ByteArray.randomOrNull(random: Random): Byte? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun ShortArray.randomOrNull(random: Random): Short? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun IntArray.randomOrNull(random: Random): Int? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun LongArray.randomOrNull(random: Random): Long? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun FloatArray.randomOrNull(random: Random): Float? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun DoubleArray.randomOrNull(random: Random): Double? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun BooleanArray.randomOrNull(random: Random): Boolean? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun CharArray.randomOrNull(random: Random): Char? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun <T> Array<out T>.single(): T {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun ByteArray.single(): Byte {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun ShortArray.single(): Short {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun IntArray.single(): Int {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun LongArray.single(): Long {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun FloatArray.single(): Float {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun DoubleArray.single(): Double {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun BooleanArray.single(): Boolean {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\npublic fun CharArray.single(): Char {\n return when (size) {\n 0 -> throw NoSuchElementException(\"Array is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Array has more than one element.\")\n }\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun <T> Array<out T>.single(predicate: (T) -> Boolean): T {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as T\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun ByteArray.single(predicate: (Byte) -> Boolean): Byte {\n var single: Byte? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Byte\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun ShortArray.single(predicate: (Short) -> Boolean): Short {\n var single: Short? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Short\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun IntArray.single(predicate: (Int) -> Boolean): Int {\n var single: Int? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Int\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun LongArray.single(predicate: (Long) -> Boolean): Long {\n var single: Long? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Long\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun FloatArray.single(predicate: (Float) -> Boolean): Float {\n var single: Float? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Float\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun DoubleArray.single(predicate: (Double) -> Boolean): Double {\n var single: Double? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Double\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun BooleanArray.single(predicate: (Boolean) -> Boolean): Boolean {\n var single: Boolean? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Boolean\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun CharArray.single(predicate: (Char) -> Boolean): Char {\n var single: Char? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Char\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun <T> Array<out T>.singleOrNull(): T? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun ByteArray.singleOrNull(): Byte? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun ShortArray.singleOrNull(): Short? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun IntArray.singleOrNull(): Int? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun LongArray.singleOrNull(): Long? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun FloatArray.singleOrNull(): Float? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun DoubleArray.singleOrNull(): Double? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun BooleanArray.singleOrNull(): Boolean? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\npublic fun CharArray.singleOrNull(): Char? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun <T> Array<out T>.singleOrNull(predicate: (T) -> Boolean): T? {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun ByteArray.singleOrNull(predicate: (Byte) -> Boolean): Byte? {\n var single: Byte? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun ShortArray.singleOrNull(predicate: (Short) -> Boolean): Short? {\n var single: Short? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun IntArray.singleOrNull(predicate: (Int) -> Boolean): Int? {\n var single: Int? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun LongArray.singleOrNull(predicate: (Long) -> Boolean): Long? {\n var single: Long? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun FloatArray.singleOrNull(predicate: (Float) -> Boolean): Float? {\n var single: Float? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun DoubleArray.singleOrNull(predicate: (Double) -> Boolean): Double? {\n var single: Double? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun BooleanArray.singleOrNull(predicate: (Boolean) -> Boolean): Boolean? {\n var single: Boolean? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun CharArray.singleOrNull(predicate: (Char) -> Boolean): Char? {\n var single: Char? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Array<out T>.drop(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun ByteArray.drop(n: Int): List<Byte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun ShortArray.drop(n: Int): List<Short> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun IntArray.drop(n: Int): List<Int> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun LongArray.drop(n: Int): List<Long> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun FloatArray.drop(n: Int): List<Float> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun DoubleArray.drop(n: Int): List<Double> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun BooleanArray.drop(n: Int): List<Boolean> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun CharArray.drop(n: Int): List<Char> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Array<out T>.dropLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun ByteArray.dropLast(n: Int): List<Byte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun ShortArray.dropLast(n: Int): List<Short> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun IntArray.dropLast(n: Int): List<Int> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun LongArray.dropLast(n: Int): List<Long> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun FloatArray.dropLast(n: Int): List<Float> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun DoubleArray.dropLast(n: Int): List<Double> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun BooleanArray.dropLast(n: Int): List<Boolean> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun CharArray.dropLast(n: Int): List<Char> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> Array<out T>.dropLastWhile(predicate: (T) -> Boolean): List<T> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun ByteArray.dropLastWhile(predicate: (Byte) -> Boolean): List<Byte> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun ShortArray.dropLastWhile(predicate: (Short) -> Boolean): List<Short> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun IntArray.dropLastWhile(predicate: (Int) -> Boolean): List<Int> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun LongArray.dropLastWhile(predicate: (Long) -> Boolean): List<Long> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun FloatArray.dropLastWhile(predicate: (Float) -> Boolean): List<Float> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun DoubleArray.dropLastWhile(predicate: (Double) -> Boolean): List<Double> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun BooleanArray.dropLastWhile(predicate: (Boolean) -> Boolean): List<Boolean> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun CharArray.dropLastWhile(predicate: (Char) -> Boolean): List<Char> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> Array<out T>.dropWhile(predicate: (T) -> Boolean): List<T> {\n var yielding = false\n val list = ArrayList<T>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun ByteArray.dropWhile(predicate: (Byte) -> Boolean): List<Byte> {\n var yielding = false\n val list = ArrayList<Byte>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun ShortArray.dropWhile(predicate: (Short) -> Boolean): List<Short> {\n var yielding = false\n val list = ArrayList<Short>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun IntArray.dropWhile(predicate: (Int) -> Boolean): List<Int> {\n var yielding = false\n val list = ArrayList<Int>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun LongArray.dropWhile(predicate: (Long) -> Boolean): List<Long> {\n var yielding = false\n val list = ArrayList<Long>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun FloatArray.dropWhile(predicate: (Float) -> Boolean): List<Float> {\n var yielding = false\n val list = ArrayList<Float>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun DoubleArray.dropWhile(predicate: (Double) -> Boolean): List<Double> {\n var yielding = false\n val list = ArrayList<Double>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun BooleanArray.dropWhile(predicate: (Boolean) -> Boolean): List<Boolean> {\n var yielding = false\n val list = ArrayList<Boolean>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun CharArray.dropWhile(predicate: (Char) -> Boolean): List<Char> {\n var yielding = false\n val list = ArrayList<Char>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Array<out T>.filter(predicate: (T) -> Boolean): List<T> {\n return filterTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun ByteArray.filter(predicate: (Byte) -> Boolean): List<Byte> {\n return filterTo(ArrayList<Byte>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun ShortArray.filter(predicate: (Short) -> Boolean): List<Short> {\n return filterTo(ArrayList<Short>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun IntArray.filter(predicate: (Int) -> Boolean): List<Int> {\n return filterTo(ArrayList<Int>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun LongArray.filter(predicate: (Long) -> Boolean): List<Long> {\n return filterTo(ArrayList<Long>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun FloatArray.filter(predicate: (Float) -> Boolean): List<Float> {\n return filterTo(ArrayList<Float>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun DoubleArray.filter(predicate: (Double) -> Boolean): List<Double> {\n return filterTo(ArrayList<Double>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun BooleanArray.filter(predicate: (Boolean) -> Boolean): List<Boolean> {\n return filterTo(ArrayList<Boolean>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun CharArray.filter(predicate: (Char) -> Boolean): List<Char> {\n return filterTo(ArrayList<Char>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun <T> Array<out T>.filterIndexed(predicate: (index: Int, T) -> Boolean): List<T> {\n return filterIndexedTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun ByteArray.filterIndexed(predicate: (index: Int, Byte) -> Boolean): List<Byte> {\n return filterIndexedTo(ArrayList<Byte>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun ShortArray.filterIndexed(predicate: (index: Int, Short) -> Boolean): List<Short> {\n return filterIndexedTo(ArrayList<Short>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun IntArray.filterIndexed(predicate: (index: Int, Int) -> Boolean): List<Int> {\n return filterIndexedTo(ArrayList<Int>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun LongArray.filterIndexed(predicate: (index: Int, Long) -> Boolean): List<Long> {\n return filterIndexedTo(ArrayList<Long>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun FloatArray.filterIndexed(predicate: (index: Int, Float) -> Boolean): List<Float> {\n return filterIndexedTo(ArrayList<Float>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun DoubleArray.filterIndexed(predicate: (index: Int, Double) -> Boolean): List<Double> {\n return filterIndexedTo(ArrayList<Double>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun BooleanArray.filterIndexed(predicate: (index: Int, Boolean) -> Boolean): List<Boolean> {\n return filterIndexedTo(ArrayList<Boolean>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun CharArray.filterIndexed(predicate: (index: Int, Char) -> Boolean): List<Char> {\n return filterIndexedTo(ArrayList<Char>(), predicate)\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Array<out T>.filterIndexedTo(destination: C, predicate: (index: Int, T) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Byte>> ByteArray.filterIndexedTo(destination: C, predicate: (index: Int, Byte) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Short>> ShortArray.filterIndexedTo(destination: C, predicate: (index: Int, Short) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Int>> IntArray.filterIndexedTo(destination: C, predicate: (index: Int, Int) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Long>> LongArray.filterIndexedTo(destination: C, predicate: (index: Int, Long) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Float>> FloatArray.filterIndexedTo(destination: C, predicate: (index: Int, Float) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Double>> DoubleArray.filterIndexedTo(destination: C, predicate: (index: Int, Double) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Boolean>> BooleanArray.filterIndexedTo(destination: C, predicate: (index: Int, Boolean) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : MutableCollection<in Char>> CharArray.filterIndexedTo(destination: C, predicate: (index: Int, Char) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Returns a list containing all elements that are instances of specified type parameter R.\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstance\n */\npublic inline fun <reified R> Array<*>.filterIsInstance(): List<@kotlin.internal.NoInfer R> {\n return filterIsInstanceTo(ArrayList<R>())\n}\n\n/**\n * Appends all elements that are instances of specified type parameter R to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstanceTo\n */\npublic inline fun <reified R, C : MutableCollection<in R>> Array<*>.filterIsInstanceTo(destination: C): C {\n for (element in this) if (element is R) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Array<out T>.filterNot(predicate: (T) -> Boolean): List<T> {\n return filterNotTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun ByteArray.filterNot(predicate: (Byte) -> Boolean): List<Byte> {\n return filterNotTo(ArrayList<Byte>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun ShortArray.filterNot(predicate: (Short) -> Boolean): List<Short> {\n return filterNotTo(ArrayList<Short>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun IntArray.filterNot(predicate: (Int) -> Boolean): List<Int> {\n return filterNotTo(ArrayList<Int>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun LongArray.filterNot(predicate: (Long) -> Boolean): List<Long> {\n return filterNotTo(ArrayList<Long>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun FloatArray.filterNot(predicate: (Float) -> Boolean): List<Float> {\n return filterNotTo(ArrayList<Float>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun DoubleArray.filterNot(predicate: (Double) -> Boolean): List<Double> {\n return filterNotTo(ArrayList<Double>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun BooleanArray.filterNot(predicate: (Boolean) -> Boolean): List<Boolean> {\n return filterNotTo(ArrayList<Boolean>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun CharArray.filterNot(predicate: (Char) -> Boolean): List<Char> {\n return filterNotTo(ArrayList<Char>(), predicate)\n}\n\n/**\n * Returns a list containing all elements that are not `null`.\n * \n * @sample samples.collections.Collections.Filtering.filterNotNull\n */\npublic fun <T : Any> Array<out T?>.filterNotNull(): List<T> {\n return filterNotNullTo(ArrayList<T>())\n}\n\n/**\n * Appends all elements that are not `null` to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterNotNullTo\n */\npublic fun <C : MutableCollection<in T>, T : Any> Array<out T?>.filterNotNullTo(destination: C): C {\n for (element in this) if (element != null) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Array<out T>.filterNotTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Byte>> ByteArray.filterNotTo(destination: C, predicate: (Byte) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Short>> ShortArray.filterNotTo(destination: C, predicate: (Short) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Int>> IntArray.filterNotTo(destination: C, predicate: (Int) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Long>> LongArray.filterNotTo(destination: C, predicate: (Long) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Float>> FloatArray.filterNotTo(destination: C, predicate: (Float) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Double>> DoubleArray.filterNotTo(destination: C, predicate: (Double) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Boolean>> BooleanArray.filterNotTo(destination: C, predicate: (Boolean) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Char>> CharArray.filterNotTo(destination: C, predicate: (Char) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Array<out T>.filterTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Byte>> ByteArray.filterTo(destination: C, predicate: (Byte) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Short>> ShortArray.filterTo(destination: C, predicate: (Short) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Int>> IntArray.filterTo(destination: C, predicate: (Int) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Long>> LongArray.filterTo(destination: C, predicate: (Long) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Float>> FloatArray.filterTo(destination: C, predicate: (Float) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Double>> DoubleArray.filterTo(destination: C, predicate: (Double) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Boolean>> BooleanArray.filterTo(destination: C, predicate: (Boolean) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : MutableCollection<in Char>> CharArray.filterTo(destination: C, predicate: (Char) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun <T> Array<out T>.slice(indices: IntRange): List<T> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun ByteArray.slice(indices: IntRange): List<Byte> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun ShortArray.slice(indices: IntRange): List<Short> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun IntArray.slice(indices: IntRange): List<Int> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun LongArray.slice(indices: IntRange): List<Long> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun FloatArray.slice(indices: IntRange): List<Float> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun DoubleArray.slice(indices: IntRange): List<Double> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun BooleanArray.slice(indices: IntRange): List<Boolean> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun CharArray.slice(indices: IntRange): List<Char> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun <T> Array<out T>.slice(indices: Iterable<Int>): List<T> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<T>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun ByteArray.slice(indices: Iterable<Int>): List<Byte> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Byte>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun ShortArray.slice(indices: Iterable<Int>): List<Short> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Short>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun IntArray.slice(indices: Iterable<Int>): List<Int> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Int>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun LongArray.slice(indices: Iterable<Int>): List<Long> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Long>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun FloatArray.slice(indices: Iterable<Int>): List<Float> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Float>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun DoubleArray.slice(indices: Iterable<Int>): List<Double> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Double>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun BooleanArray.slice(indices: Iterable<Int>): List<Boolean> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Boolean>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun CharArray.slice(indices: Iterable<Int>): List<Char> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<Char>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun <T> Array<T>.sliceArray(indices: Collection<Int>): Array<T> {\n val result = arrayOfNulls(this, indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun ByteArray.sliceArray(indices: Collection<Int>): ByteArray {\n val result = ByteArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun ShortArray.sliceArray(indices: Collection<Int>): ShortArray {\n val result = ShortArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun IntArray.sliceArray(indices: Collection<Int>): IntArray {\n val result = IntArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun LongArray.sliceArray(indices: Collection<Int>): LongArray {\n val result = LongArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun FloatArray.sliceArray(indices: Collection<Int>): FloatArray {\n val result = FloatArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun DoubleArray.sliceArray(indices: Collection<Int>): DoubleArray {\n val result = DoubleArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun BooleanArray.sliceArray(indices: Collection<Int>): BooleanArray {\n val result = BooleanArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\npublic fun CharArray.sliceArray(indices: Collection<Int>): CharArray {\n val result = CharArray(indices.size)\n var targetIndex = 0\n for (sourceIndex in indices) {\n result[targetIndex++] = this[sourceIndex]\n }\n return result\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun <T> Array<T>.sliceArray(indices: IntRange): Array<T> {\n if (indices.isEmpty()) return copyOfRange(0, 0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun ByteArray.sliceArray(indices: IntRange): ByteArray {\n if (indices.isEmpty()) return ByteArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun ShortArray.sliceArray(indices: IntRange): ShortArray {\n if (indices.isEmpty()) return ShortArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun IntArray.sliceArray(indices: IntRange): IntArray {\n if (indices.isEmpty()) return IntArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun LongArray.sliceArray(indices: IntRange): LongArray {\n if (indices.isEmpty()) return LongArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun FloatArray.sliceArray(indices: IntRange): FloatArray {\n if (indices.isEmpty()) return FloatArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun DoubleArray.sliceArray(indices: IntRange): DoubleArray {\n if (indices.isEmpty()) return DoubleArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun BooleanArray.sliceArray(indices: IntRange): BooleanArray {\n if (indices.isEmpty()) return BooleanArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\npublic fun CharArray.sliceArray(indices: IntRange): CharArray {\n if (indices.isEmpty()) return CharArray(0)\n return copyOfRange(indices.start, indices.endInclusive + 1)\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Array<out T>.take(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<T>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun ByteArray.take(n: Int): List<Byte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Byte>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun ShortArray.take(n: Int): List<Short> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Short>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun IntArray.take(n: Int): List<Int> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Int>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun LongArray.take(n: Int): List<Long> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Long>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun FloatArray.take(n: Int): List<Float> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Float>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun DoubleArray.take(n: Int): List<Double> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Double>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun BooleanArray.take(n: Int): List<Boolean> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Boolean>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun CharArray.take(n: Int): List<Char> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<Char>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Array<out T>.takeLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<T>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun ByteArray.takeLast(n: Int): List<Byte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Byte>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun ShortArray.takeLast(n: Int): List<Short> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Short>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun IntArray.takeLast(n: Int): List<Int> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Int>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun LongArray.takeLast(n: Int): List<Long> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Long>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun FloatArray.takeLast(n: Int): List<Float> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Float>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun DoubleArray.takeLast(n: Int): List<Double> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Double>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun BooleanArray.takeLast(n: Int): List<Boolean> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Boolean>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun CharArray.takeLast(n: Int): List<Char> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<Char>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> Array<out T>.takeLastWhile(predicate: (T) -> Boolean): List<T> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun ByteArray.takeLastWhile(predicate: (Byte) -> Boolean): List<Byte> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun ShortArray.takeLastWhile(predicate: (Short) -> Boolean): List<Short> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun IntArray.takeLastWhile(predicate: (Int) -> Boolean): List<Int> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun LongArray.takeLastWhile(predicate: (Long) -> Boolean): List<Long> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun FloatArray.takeLastWhile(predicate: (Float) -> Boolean): List<Float> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun DoubleArray.takeLastWhile(predicate: (Double) -> Boolean): List<Double> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun BooleanArray.takeLastWhile(predicate: (Boolean) -> Boolean): List<Boolean> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun CharArray.takeLastWhile(predicate: (Char) -> Boolean): List<Char> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> Array<out T>.takeWhile(predicate: (T) -> Boolean): List<T> {\n val list = ArrayList<T>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun ByteArray.takeWhile(predicate: (Byte) -> Boolean): List<Byte> {\n val list = ArrayList<Byte>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun ShortArray.takeWhile(predicate: (Short) -> Boolean): List<Short> {\n val list = ArrayList<Short>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun IntArray.takeWhile(predicate: (Int) -> Boolean): List<Int> {\n val list = ArrayList<Int>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun LongArray.takeWhile(predicate: (Long) -> Boolean): List<Long> {\n val list = ArrayList<Long>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun FloatArray.takeWhile(predicate: (Float) -> Boolean): List<Float> {\n val list = ArrayList<Float>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun DoubleArray.takeWhile(predicate: (Double) -> Boolean): List<Double> {\n val list = ArrayList<Double>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun BooleanArray.takeWhile(predicate: (Boolean) -> Boolean): List<Boolean> {\n val list = ArrayList<Boolean>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun CharArray.takeWhile(predicate: (Char) -> Boolean): List<Char> {\n val list = ArrayList<Char>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun <T> Array<T>.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun ByteArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun ShortArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun IntArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun LongArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun FloatArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun DoubleArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun BooleanArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements in the array in-place.\n */\npublic fun CharArray.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Array<T>.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun BooleanArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val midPoint = (fromIndex + toIndex) / 2\n if (fromIndex == midPoint) return\n var reverseIndex = toIndex - 1\n for (index in fromIndex until midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun <T> Array<out T>.reversed(): List<T> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun ByteArray.reversed(): List<Byte> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun ShortArray.reversed(): List<Short> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun IntArray.reversed(): List<Int> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun LongArray.reversed(): List<Long> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun FloatArray.reversed(): List<Float> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun DoubleArray.reversed(): List<Double> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun BooleanArray.reversed(): List<Boolean> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun CharArray.reversed(): List<Char> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun <T> Array<T>.reversedArray(): Array<T> {\n if (isEmpty()) return this\n val result = arrayOfNulls(this, size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun ByteArray.reversedArray(): ByteArray {\n if (isEmpty()) return this\n val result = ByteArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun ShortArray.reversedArray(): ShortArray {\n if (isEmpty()) return this\n val result = ShortArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun IntArray.reversedArray(): IntArray {\n if (isEmpty()) return this\n val result = IntArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun LongArray.reversedArray(): LongArray {\n if (isEmpty()) return this\n val result = LongArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun FloatArray.reversedArray(): FloatArray {\n if (isEmpty()) return this\n val result = FloatArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun DoubleArray.reversedArray(): DoubleArray {\n if (isEmpty()) return this\n val result = DoubleArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun BooleanArray.reversedArray(): BooleanArray {\n if (isEmpty()) return this\n val result = BooleanArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\npublic fun CharArray.reversedArray(): CharArray {\n if (isEmpty()) return this\n val result = CharArray(size)\n val lastIndex = lastIndex\n for (i in 0..lastIndex)\n result[lastIndex - i] = this[i]\n return result\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Array<T>.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun BooleanArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Array<T>.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun BooleanArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Sorts elements in the array in-place according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> Array<out T>.sortBy(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareBy(selector))\n}\n\n/**\n * Sorts elements in the array in-place descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> Array<out T>.sortByDescending(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareByDescending(selector))\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Array<out T>.sortDescending(): Unit {\n sortWith(reverseOrder())\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun ByteArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun ShortArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun IntArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun LongArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun FloatArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun DoubleArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\npublic fun CharArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Array<out T>.sorted(): List<T> {\n return sortedArray().asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun ByteArray.sorted(): List<Byte> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun ShortArray.sorted(): List<Short> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun IntArray.sorted(): List<Int> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun LongArray.sorted(): List<Long> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun FloatArray.sorted(): List<Float> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun DoubleArray.sorted(): List<Double> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\npublic fun CharArray.sorted(): List<Char> {\n return toTypedArray().apply { sort() }.asList()\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Array<T>.sortedArray(): Array<T> {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun ByteArray.sortedArray(): ByteArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun ShortArray.sortedArray(): ShortArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun IntArray.sortedArray(): IntArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun LongArray.sortedArray(): LongArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun FloatArray.sortedArray(): FloatArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun DoubleArray.sortedArray(): DoubleArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\npublic fun CharArray.sortedArray(): CharArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Array<T>.sortedArrayDescending(): Array<T> {\n if (isEmpty()) return this\n return this.copyOf().apply { sortWith(reverseOrder()) }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun ByteArray.sortedArrayDescending(): ByteArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun ShortArray.sortedArrayDescending(): ShortArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun IntArray.sortedArrayDescending(): IntArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun LongArray.sortedArrayDescending(): LongArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun FloatArray.sortedArrayDescending(): FloatArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun DoubleArray.sortedArrayDescending(): DoubleArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\npublic fun CharArray.sortedArrayDescending(): CharArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according the specified [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T> Array<out T>.sortedArrayWith(comparator: Comparator<in T>): Array<out T> {\n if (isEmpty()) return this\n return this.copyOf().apply { sortWith(comparator) }\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <T, R : Comparable<R>> Array<out T>.sortedBy(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> ByteArray.sortedBy(crossinline selector: (Byte) -> R?): List<Byte> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> ShortArray.sortedBy(crossinline selector: (Short) -> R?): List<Short> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> IntArray.sortedBy(crossinline selector: (Int) -> R?): List<Int> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> LongArray.sortedBy(crossinline selector: (Long) -> R?): List<Long> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> FloatArray.sortedBy(crossinline selector: (Float) -> R?): List<Float> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> DoubleArray.sortedBy(crossinline selector: (Double) -> R?): List<Double> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> BooleanArray.sortedBy(crossinline selector: (Boolean) -> R?): List<Boolean> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <R : Comparable<R>> CharArray.sortedBy(crossinline selector: (Char) -> R?): List<Char> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> Array<out T>.sortedByDescending(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> ByteArray.sortedByDescending(crossinline selector: (Byte) -> R?): List<Byte> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> ShortArray.sortedByDescending(crossinline selector: (Short) -> R?): List<Short> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> IntArray.sortedByDescending(crossinline selector: (Int) -> R?): List<Int> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> LongArray.sortedByDescending(crossinline selector: (Long) -> R?): List<Long> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> FloatArray.sortedByDescending(crossinline selector: (Float) -> R?): List<Float> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> DoubleArray.sortedByDescending(crossinline selector: (Double) -> R?): List<Double> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> BooleanArray.sortedByDescending(crossinline selector: (Boolean) -> R?): List<Boolean> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n */\npublic inline fun <R : Comparable<R>> CharArray.sortedByDescending(crossinline selector: (Char) -> R?): List<Char> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Array<out T>.sortedDescending(): List<T> {\n return sortedWith(reverseOrder())\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun ByteArray.sortedDescending(): List<Byte> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun ShortArray.sortedDescending(): List<Short> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun IntArray.sortedDescending(): List<Int> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun LongArray.sortedDescending(): List<Long> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun FloatArray.sortedDescending(): List<Float> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun DoubleArray.sortedDescending(): List<Double> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n */\npublic fun CharArray.sortedDescending(): List<Char> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T> Array<out T>.sortedWith(comparator: Comparator<in T>): List<T> {\n return sortedArrayWith(comparator).asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun ByteArray.sortedWith(comparator: Comparator<in Byte>): List<Byte> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun ShortArray.sortedWith(comparator: Comparator<in Short>): List<Short> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun IntArray.sortedWith(comparator: Comparator<in Int>): List<Int> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun LongArray.sortedWith(comparator: Comparator<in Long>): List<Long> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun FloatArray.sortedWith(comparator: Comparator<in Float>): List<Float> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun DoubleArray.sortedWith(comparator: Comparator<in Double>): List<Double> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun BooleanArray.sortedWith(comparator: Comparator<in Boolean>): List<Boolean> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n */\npublic fun CharArray.sortedWith(comparator: Comparator<in Char>): List<Char> {\n return toTypedArray().apply { sortWith(comparator) }.asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun <T> Array<out T>.asList(): List<T>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun ByteArray.asList(): List<Byte>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun ShortArray.asList(): List<Short>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun IntArray.asList(): List<Int>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun LongArray.asList(): List<Long>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun FloatArray.asList(): List<Float>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun DoubleArray.asList(): List<Double>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun BooleanArray.asList(): List<Boolean>\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic expect fun CharArray.asList(): List<Char>\n\n/**\n * Returns `true` if the two specified arrays are *deeply* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * If two corresponding elements are nested arrays, they are also compared deeply.\n * If any of arrays contains itself on any nesting level the behavior is undefined.\n * \n * The elements of other types are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic expect infix fun <T> Array<out T>.contentDeepEquals(other: Array<out T>): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *deeply* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The specified arrays are also considered deeply equal if both are `null`.\n * \n * If two corresponding elements are nested arrays, they are also compared deeply.\n * If any of arrays contains itself on any nesting level the behavior is undefined.\n * \n * The elements of other types are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun <T> Array<out T>?.contentDeepEquals(other: Array<out T>?): Boolean\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level the behavior is undefined.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic expect fun <T> Array<out T>.contentDeepHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level the behavior is undefined.\n */\n@SinceKotlin(\"1.4\")\npublic expect fun <T> Array<out T>?.contentDeepHashCode(): Int\n\n/**\n * Returns a string representation of the contents of this array as if it is a [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level that reference\n * is rendered as `\"[...]\"` to prevent recursion.\n * \n * @sample samples.collections.Arrays.ContentOperations.contentDeepToString\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic expect fun <T> Array<out T>.contentDeepToString(): String\n\n/**\n * Returns a string representation of the contents of this array as if it is a [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level that reference\n * is rendered as `\"[...]\"` to prevent recursion.\n * \n * @sample samples.collections.Arrays.ContentOperations.contentDeepToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun <T> Array<out T>?.contentDeepToString(): String\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun <T> Array<out T>.contentEquals(other: Array<out T>): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun ByteArray.contentEquals(other: ByteArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun ShortArray.contentEquals(other: ShortArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun IntArray.contentEquals(other: IntArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun LongArray.contentEquals(other: LongArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun FloatArray.contentEquals(other: FloatArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun DoubleArray.contentEquals(other: DoubleArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun BooleanArray.contentEquals(other: BooleanArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect infix fun CharArray.contentEquals(other: CharArray): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun <T> Array<out T>?.contentEquals(other: Array<out T>?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun ByteArray?.contentEquals(other: ByteArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun ShortArray?.contentEquals(other: ShortArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun IntArray?.contentEquals(other: IntArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun LongArray?.contentEquals(other: LongArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun FloatArray?.contentEquals(other: FloatArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun DoubleArray?.contentEquals(other: DoubleArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun BooleanArray?.contentEquals(other: BooleanArray?): Boolean\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\npublic expect infix fun CharArray?.contentEquals(other: CharArray?): Boolean\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun <T> Array<out T>.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun ByteArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun ShortArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun IntArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun LongArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun FloatArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun DoubleArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun BooleanArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun CharArray.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun <T> Array<out T>?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ByteArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ShortArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun IntArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun LongArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun FloatArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun DoubleArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun BooleanArray?.contentHashCode(): Int\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\npublic expect fun CharArray?.contentHashCode(): Int\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun <T> Array<out T>.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun ByteArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun ShortArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun IntArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun LongArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun FloatArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun DoubleArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun BooleanArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic expect fun CharArray.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun <T> Array<out T>?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ByteArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ShortArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun IntArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun LongArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun FloatArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun DoubleArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun BooleanArray?.contentToString(): String\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\npublic expect fun CharArray?.contentToString(): String\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun <T> Array<out T>.copyInto(destination: Array<T>, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): Array<T>\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun ByteArray.copyInto(destination: ByteArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): ByteArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun ShortArray.copyInto(destination: ShortArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): ShortArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun IntArray.copyInto(destination: IntArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): IntArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun LongArray.copyInto(destination: LongArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): LongArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun FloatArray.copyInto(destination: FloatArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): FloatArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun DoubleArray.copyInto(destination: DoubleArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): DoubleArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun BooleanArray.copyInto(destination: BooleanArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): BooleanArray\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\npublic expect fun CharArray.copyInto(destination: CharArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): CharArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect fun <T> Array<T>.copyOf(): Array<T>\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun ByteArray.copyOf(): ByteArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun ShortArray.copyOf(): ShortArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun IntArray.copyOf(): IntArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun LongArray.copyOf(): LongArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun FloatArray.copyOf(): FloatArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun DoubleArray.copyOf(): DoubleArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun BooleanArray.copyOf(): BooleanArray\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic expect fun CharArray.copyOf(): CharArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun ByteArray.copyOf(newSize: Int): ByteArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun ShortArray.copyOf(newSize: Int): ShortArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun IntArray.copyOf(newSize: Int): IntArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun LongArray.copyOf(newSize: Int): LongArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun FloatArray.copyOf(newSize: Int): FloatArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun DoubleArray.copyOf(newSize: Int): DoubleArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with `false` values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with `false` values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun BooleanArray.copyOf(newSize: Int): BooleanArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with null char (`\\u0000`) values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with null char (`\\u0000`) values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic expect fun CharArray.copyOf(newSize: Int): CharArray\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with `null` values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with `null` values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizingCopyOf\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect fun <T> Array<T>.copyOf(newSize: Int): Array<T?>\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect fun <T> Array<T>.copyOfRange(fromIndex: Int, toIndex: Int): Array<T>\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun <T> Array<T>.fill(element: T, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun ByteArray.fill(element: Byte, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun ShortArray.fill(element: Short, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun IntArray.fill(element: Int, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun LongArray.fill(element: Long, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun FloatArray.fill(element: Float, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun DoubleArray.fill(element: Double, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun BooleanArray.fill(element: Boolean, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\npublic expect fun CharArray.fill(element: Char, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val <T> Array<out T>.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val ByteArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val ShortArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val IntArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val LongArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val FloatArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val DoubleArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val BooleanArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns the range of valid indices for the array.\n */\npublic val CharArray.indices: IntRange\n get() = IntRange(0, lastIndex)\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.isEmpty(): Boolean {\n return size == 0\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if the array is not empty.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.isNotEmpty(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns the last valid index for the array.\n */\npublic val <T> Array<out T>.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val ByteArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val ShortArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val IntArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val LongArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val FloatArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val DoubleArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val BooleanArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns the last valid index for the array.\n */\npublic val CharArray.lastIndex: Int\n get() = size - 1\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect operator fun <T> Array<T>.plus(element: T): Array<T>\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun ByteArray.plus(element: Byte): ByteArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun ShortArray.plus(element: Short): ShortArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun IntArray.plus(element: Int): IntArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun LongArray.plus(element: Long): LongArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun FloatArray.plus(element: Float): FloatArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun DoubleArray.plus(element: Double): DoubleArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun BooleanArray.plus(element: Boolean): BooleanArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\npublic expect operator fun CharArray.plus(element: Char): CharArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect operator fun <T> Array<T>.plus(elements: Collection<T>): Array<T>\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun ByteArray.plus(elements: Collection<Byte>): ByteArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun ShortArray.plus(elements: Collection<Short>): ShortArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun IntArray.plus(elements: Collection<Int>): IntArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun LongArray.plus(elements: Collection<Long>): LongArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun FloatArray.plus(elements: Collection<Float>): FloatArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun DoubleArray.plus(elements: Collection<Double>): DoubleArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun BooleanArray.plus(elements: Collection<Boolean>): BooleanArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic expect operator fun CharArray.plus(elements: Collection<Char>): CharArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect operator fun <T> Array<T>.plus(elements: Array<out T>): Array<T>\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun ByteArray.plus(elements: ByteArray): ByteArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun ShortArray.plus(elements: ShortArray): ShortArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun IntArray.plus(elements: IntArray): IntArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun LongArray.plus(elements: LongArray): LongArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun FloatArray.plus(elements: FloatArray): FloatArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun DoubleArray.plus(elements: DoubleArray): DoubleArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun BooleanArray.plus(elements: BooleanArray): BooleanArray\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\npublic expect operator fun CharArray.plus(elements: CharArray): CharArray\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NO_ACTUAL_FOR_EXPECT\")\npublic expect fun <T> Array<T>.plusElement(element: T): Array<T>\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun IntArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun LongArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun ByteArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun ShortArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun DoubleArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun FloatArray.sort(): Unit\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic expect fun CharArray.sort(): Unit\n\n/**\n * Sorts the array in-place according to the natural order of its elements.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @sample samples.collections.Arrays.Sorting.sortArrayOfComparable\n */\npublic expect fun <T : Comparable<T>> Array<out T>.sort(): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArrayOfComparable\n */\n@SinceKotlin(\"1.4\")\npublic expect fun <T : Comparable<T>> Array<out T>.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ByteArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun ShortArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun IntArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun LongArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun FloatArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun DoubleArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\npublic expect fun CharArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Array<out T>.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sortWith(reverseOrder(), fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic expect fun <T> Array<out T>.sortWith(comparator: Comparator<in T>): Unit\n\n/**\n * Sorts a range in the array in-place with the given [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic expect fun <T> Array<out T>.sortWith(comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size): Unit\n\n/**\n * Returns an array of Boolean containing all of the elements of this generic array.\n */\npublic fun Array<out Boolean>.toBooleanArray(): BooleanArray {\n return BooleanArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Byte containing all of the elements of this generic array.\n */\npublic fun Array<out Byte>.toByteArray(): ByteArray {\n return ByteArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Char containing all of the elements of this generic array.\n */\npublic fun Array<out Char>.toCharArray(): CharArray {\n return CharArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Double containing all of the elements of this generic array.\n */\npublic fun Array<out Double>.toDoubleArray(): DoubleArray {\n return DoubleArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Float containing all of the elements of this generic array.\n */\npublic fun Array<out Float>.toFloatArray(): FloatArray {\n return FloatArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Int containing all of the elements of this generic array.\n */\npublic fun Array<out Int>.toIntArray(): IntArray {\n return IntArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Long containing all of the elements of this generic array.\n */\npublic fun Array<out Long>.toLongArray(): LongArray {\n return LongArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of Short containing all of the elements of this generic array.\n */\npublic fun Array<out Short>.toShortArray(): ShortArray {\n return ShortArray(size) { index -> this[index] }\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun ByteArray.toTypedArray(): Array<Byte>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun ShortArray.toTypedArray(): Array<Short>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun IntArray.toTypedArray(): Array<Int>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun LongArray.toTypedArray(): Array<Long>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun FloatArray.toTypedArray(): Array<Float>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun DoubleArray.toTypedArray(): Array<Double>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun BooleanArray.toTypedArray(): Array<Boolean>\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic expect fun CharArray.toTypedArray(): Array<Char>\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <T, K, V> Array<out T>.associate(transform: (T) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> ByteArray.associate(transform: (Byte) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> ShortArray.associate(transform: (Short) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> IntArray.associate(transform: (Int) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> LongArray.associate(transform: (Long) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> FloatArray.associate(transform: (Float) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> DoubleArray.associate(transform: (Double) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> BooleanArray.associate(transform: (Boolean) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitives\n */\npublic inline fun <K, V> CharArray.associate(transform: (Char) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <T, K> Array<out T>.associateBy(keySelector: (T) -> K): Map<K, T> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, T>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> ByteArray.associateBy(keySelector: (Byte) -> K): Map<K, Byte> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Byte>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> ShortArray.associateBy(keySelector: (Short) -> K): Map<K, Short> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Short>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> IntArray.associateBy(keySelector: (Int) -> K): Map<K, Int> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Int>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> LongArray.associateBy(keySelector: (Long) -> K): Map<K, Long> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Long>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> FloatArray.associateBy(keySelector: (Float) -> K): Map<K, Float> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Float>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> DoubleArray.associateBy(keySelector: (Double) -> K): Map<K, Double> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Double>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Boolean>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the elements from the given array indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesBy\n */\npublic inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Char>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <T, K, V> Array<out T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> ByteArray.associateBy(keySelector: (Byte) -> K, valueTransform: (Byte) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> ShortArray.associateBy(keySelector: (Short) -> K, valueTransform: (Short) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> IntArray.associateBy(keySelector: (Int) -> K, valueTransform: (Int) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> LongArray.associateBy(keySelector: (Long) -> K, valueTransform: (Long) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> FloatArray.associateBy(keySelector: (Float) -> K, valueTransform: (Float) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> DoubleArray.associateBy(keySelector: (Double) -> K, valueTransform: (Double) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> BooleanArray.associateBy(keySelector: (Boolean) -> K, valueTransform: (Boolean) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByWithValueTransform\n */\npublic inline fun <K, V> CharArray.associateBy(keySelector: (Char) -> K, valueTransform: (Char) -> V): Map<K, V> {\n val capacity = mapCapacity(size).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <T, K, M : MutableMap<in K, in T>> Array<out T>.associateByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Byte>> ByteArray.associateByTo(destination: M, keySelector: (Byte) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Short>> ShortArray.associateByTo(destination: M, keySelector: (Short) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Int>> IntArray.associateByTo(destination: M, keySelector: (Int) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Long>> LongArray.associateByTo(destination: M, keySelector: (Long) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Float>> FloatArray.associateByTo(destination: M, keySelector: (Float) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Double>> DoubleArray.associateByTo(destination: M, keySelector: (Double) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Boolean>> BooleanArray.associateByTo(destination: M, keySelector: (Boolean) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given array\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Char>> CharArray.associateByTo(destination: M, keySelector: (Char) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Array<out T>.associateByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> ByteArray.associateByTo(destination: M, keySelector: (Byte) -> K, valueTransform: (Byte) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> ShortArray.associateByTo(destination: M, keySelector: (Short) -> K, valueTransform: (Short) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> IntArray.associateByTo(destination: M, keySelector: (Int) -> K, valueTransform: (Int) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> LongArray.associateByTo(destination: M, keySelector: (Long) -> K, valueTransform: (Long) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> FloatArray.associateByTo(destination: M, keySelector: (Float) -> K, valueTransform: (Float) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> DoubleArray.associateByTo(destination: M, keySelector: (Double) -> K, valueTransform: (Double) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> BooleanArray.associateByTo(destination: M, keySelector: (Boolean) -> K, valueTransform: (Boolean) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given array.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> CharArray.associateByTo(destination: M, keySelector: (Char) -> K, valueTransform: (Char) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Array<out T>.associateTo(destination: M, transform: (T) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> ByteArray.associateTo(destination: M, transform: (Byte) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> ShortArray.associateTo(destination: M, transform: (Short) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> IntArray.associateTo(destination: M, transform: (Int) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> LongArray.associateTo(destination: M, transform: (Long) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> FloatArray.associateTo(destination: M, transform: (Float) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> DoubleArray.associateTo(destination: M, transform: (Double) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> BooleanArray.associateTo(destination: M, transform: (Boolean) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given array.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Arrays.Transformations.associateArrayOfPrimitivesTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> CharArray.associateTo(destination: M, transform: (Char) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <K, V> Array<out K>.associateWith(valueSelector: (K) -> V): Map<K, V> {\n val result = LinkedHashMap<K, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> ByteArray.associateWith(valueSelector: (Byte) -> V): Map<Byte, V> {\n val result = LinkedHashMap<Byte, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> ShortArray.associateWith(valueSelector: (Short) -> V): Map<Short, V> {\n val result = LinkedHashMap<Short, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> IntArray.associateWith(valueSelector: (Int) -> V): Map<Int, V> {\n val result = LinkedHashMap<Int, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> LongArray.associateWith(valueSelector: (Long) -> V): Map<Long, V> {\n val result = LinkedHashMap<Long, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> FloatArray.associateWith(valueSelector: (Float) -> V): Map<Float, V> {\n val result = LinkedHashMap<Float, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> DoubleArray.associateWith(valueSelector: (Double) -> V): Map<Double, V> {\n val result = LinkedHashMap<Double, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> BooleanArray.associateWith(valueSelector: (Boolean) -> V): Map<Boolean, V> {\n val result = LinkedHashMap<Boolean, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V> CharArray.associateWith(valueSelector: (Char) -> V): Map<Char, V> {\n val result = LinkedHashMap<Char, V>(mapCapacity(size.coerceAtMost(128)).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <K, V, M : MutableMap<in K, in V>> Array<out K>.associateWithTo(destination: M, valueSelector: (K) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Byte, in V>> ByteArray.associateWithTo(destination: M, valueSelector: (Byte) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Short, in V>> ShortArray.associateWithTo(destination: M, valueSelector: (Short) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Int, in V>> IntArray.associateWithTo(destination: M, valueSelector: (Int) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Long, in V>> LongArray.associateWithTo(destination: M, valueSelector: (Long) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Float, in V>> FloatArray.associateWithTo(destination: M, valueSelector: (Float) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Double, in V>> DoubleArray.associateWithTo(destination: M, valueSelector: (Double) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Boolean, in V>> BooleanArray.associateWithTo(destination: M, valueSelector: (Boolean) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in Char, in V>> CharArray.associateWithTo(destination: M, valueSelector: (Char) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <T, C : MutableCollection<in T>> Array<out T>.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Byte>> ByteArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Short>> ShortArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Int>> IntArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Long>> LongArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Float>> FloatArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Double>> DoubleArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Boolean>> BooleanArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Char>> CharArray.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun <T> Array<out T>.toHashSet(): HashSet<T> {\n return toCollection(HashSet<T>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun ByteArray.toHashSet(): HashSet<Byte> {\n return toCollection(HashSet<Byte>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun ShortArray.toHashSet(): HashSet<Short> {\n return toCollection(HashSet<Short>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun IntArray.toHashSet(): HashSet<Int> {\n return toCollection(HashSet<Int>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun LongArray.toHashSet(): HashSet<Long> {\n return toCollection(HashSet<Long>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun FloatArray.toHashSet(): HashSet<Float> {\n return toCollection(HashSet<Float>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun DoubleArray.toHashSet(): HashSet<Double> {\n return toCollection(HashSet<Double>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun BooleanArray.toHashSet(): HashSet<Boolean> {\n return toCollection(HashSet<Boolean>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun CharArray.toHashSet(): HashSet<Char> {\n return toCollection(HashSet<Char>(mapCapacity(size.coerceAtMost(128))))\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun <T> Array<out T>.toList(): List<T> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun ByteArray.toList(): List<Byte> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun ShortArray.toList(): List<Short> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun IntArray.toList(): List<Int> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun LongArray.toList(): List<Long> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun FloatArray.toList(): List<Float> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun DoubleArray.toList(): List<Double> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun BooleanArray.toList(): List<Boolean> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun CharArray.toList(): List<Char> {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun <T> Array<out T>.toMutableList(): MutableList<T> {\n return ArrayList(this.asCollection())\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun ByteArray.toMutableList(): MutableList<Byte> {\n val list = ArrayList<Byte>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun ShortArray.toMutableList(): MutableList<Short> {\n val list = ArrayList<Short>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun IntArray.toMutableList(): MutableList<Int> {\n val list = ArrayList<Int>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun LongArray.toMutableList(): MutableList<Long> {\n val list = ArrayList<Long>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun FloatArray.toMutableList(): MutableList<Float> {\n val list = ArrayList<Float>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun DoubleArray.toMutableList(): MutableList<Double> {\n val list = ArrayList<Double>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun BooleanArray.toMutableList(): MutableList<Boolean> {\n val list = ArrayList<Boolean>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this array.\n */\npublic fun CharArray.toMutableList(): MutableList<Char> {\n val list = ArrayList<Char>(size)\n for (item in this) list.add(item)\n return list\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun <T> Array<out T>.toSet(): Set<T> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<T>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun ByteArray.toSet(): Set<Byte> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Byte>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun ShortArray.toSet(): Set<Short> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Short>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun IntArray.toSet(): Set<Int> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Int>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun LongArray.toSet(): Set<Long> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Long>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun FloatArray.toSet(): Set<Float> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Float>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun DoubleArray.toSet(): Set<Double> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Double>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun BooleanArray.toSet(): Set<Boolean> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Boolean>(mapCapacity(size)))\n }\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun CharArray.toSet(): Set<Char> {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Char>(mapCapacity(size.coerceAtMost(128))))\n }\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <T, R> Array<out T>.flatMap(transform: (T) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> ByteArray.flatMap(transform: (Byte) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> ShortArray.flatMap(transform: (Short) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> IntArray.flatMap(transform: (Int) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> LongArray.flatMap(transform: (Long) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> FloatArray.flatMap(transform: (Float) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> DoubleArray.flatMap(transform: (Double) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> BooleanArray.flatMap(transform: (Boolean) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> CharArray.flatMap(transform: (Char) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequence\")\npublic inline fun <T, R> Array<out T>.flatMap(transform: (T) -> Sequence<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.flatMapIndexed(transform: (index: Int, Byte) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.flatMapIndexed(transform: (index: Int, Short) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.flatMapIndexed(transform: (index: Int, Int) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.flatMapIndexed(transform: (index: Int, Long) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.flatMapIndexed(transform: (index: Int, Float) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.flatMapIndexed(transform: (index: Int, Double) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.flatMapIndexed(transform: (index: Int, Boolean) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.flatMapIndexed(transform: (index: Int, Char) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequence\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.flatMapIndexed(transform: (index: Int, T) -> Sequence<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ByteArray.flatMapIndexedTo(destination: C, transform: (index: Int, Byte) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ShortArray.flatMapIndexedTo(destination: C, transform: (index: Int, Short) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> IntArray.flatMapIndexedTo(destination: C, transform: (index: Int, Int) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> LongArray.flatMapIndexedTo(destination: C, transform: (index: Int, Long) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> FloatArray.flatMapIndexedTo(destination: C, transform: (index: Int, Float) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> DoubleArray.flatMapIndexedTo(destination: C, transform: (index: Int, Double) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> BooleanArray.flatMapIndexedTo(destination: C, transform: (index: Int, Boolean) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> CharArray.flatMapIndexedTo(destination: C, transform: (index: Int, Char) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequenceTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Sequence<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.flatMapTo(destination: C, transform: (T) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> ByteArray.flatMapTo(destination: C, transform: (Byte) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> ShortArray.flatMapTo(destination: C, transform: (Short) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> IntArray.flatMapTo(destination: C, transform: (Int) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> LongArray.flatMapTo(destination: C, transform: (Long) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> FloatArray.flatMapTo(destination: C, transform: (Float) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> DoubleArray.flatMapTo(destination: C, transform: (Double) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> BooleanArray.flatMapTo(destination: C, transform: (Boolean) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> CharArray.flatMapTo(destination: C, transform: (Char) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequenceTo\")\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.flatMapTo(destination: C, transform: (T) -> Sequence<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K> Array<out T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {\n return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> ByteArray.groupBy(keySelector: (Byte) -> K): Map<K, List<Byte>> {\n return groupByTo(LinkedHashMap<K, MutableList<Byte>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> ShortArray.groupBy(keySelector: (Short) -> K): Map<K, List<Short>> {\n return groupByTo(LinkedHashMap<K, MutableList<Short>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> IntArray.groupBy(keySelector: (Int) -> K): Map<K, List<Int>> {\n return groupByTo(LinkedHashMap<K, MutableList<Int>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> LongArray.groupBy(keySelector: (Long) -> K): Map<K, List<Long>> {\n return groupByTo(LinkedHashMap<K, MutableList<Long>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> FloatArray.groupBy(keySelector: (Float) -> K): Map<K, List<Float>> {\n return groupByTo(LinkedHashMap<K, MutableList<Float>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> DoubleArray.groupBy(keySelector: (Double) -> K): Map<K, List<Double>> {\n return groupByTo(LinkedHashMap<K, MutableList<Double>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> BooleanArray.groupBy(keySelector: (Boolean) -> K): Map<K, List<Boolean>> {\n return groupByTo(LinkedHashMap<K, MutableList<Boolean>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> CharArray.groupBy(keySelector: (Char) -> K): Map<K, List<Char>> {\n return groupByTo(LinkedHashMap<K, MutableList<Char>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V> Array<out T>.groupBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> ByteArray.groupBy(keySelector: (Byte) -> K, valueTransform: (Byte) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> ShortArray.groupBy(keySelector: (Short) -> K, valueTransform: (Short) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> IntArray.groupBy(keySelector: (Int) -> K, valueTransform: (Int) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> LongArray.groupBy(keySelector: (Long) -> K, valueTransform: (Long) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> FloatArray.groupBy(keySelector: (Float) -> K, valueTransform: (Float) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> DoubleArray.groupBy(keySelector: (Double) -> K, valueTransform: (Double) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> BooleanArray.groupBy(keySelector: (Boolean) -> K, valueTransform: (Boolean) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> CharArray.groupBy(keySelector: (Char) -> K, valueTransform: (Char) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Array<out T>.groupByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<T>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Byte>>> ByteArray.groupByTo(destination: M, keySelector: (Byte) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Byte>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Short>>> ShortArray.groupByTo(destination: M, keySelector: (Short) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Short>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Int>>> IntArray.groupByTo(destination: M, keySelector: (Int) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Int>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Long>>> LongArray.groupByTo(destination: M, keySelector: (Long) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Long>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Float>>> FloatArray.groupByTo(destination: M, keySelector: (Float) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Float>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Double>>> DoubleArray.groupByTo(destination: M, keySelector: (Double) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Double>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Boolean>>> BooleanArray.groupByTo(destination: M, keySelector: (Boolean) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Boolean>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Char>>> CharArray.groupByTo(destination: M, keySelector: (Char) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Char>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Array<out T>.groupByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> ByteArray.groupByTo(destination: M, keySelector: (Byte) -> K, valueTransform: (Byte) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> ShortArray.groupByTo(destination: M, keySelector: (Short) -> K, valueTransform: (Short) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> IntArray.groupByTo(destination: M, keySelector: (Int) -> K, valueTransform: (Int) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> LongArray.groupByTo(destination: M, keySelector: (Long) -> K, valueTransform: (Long) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> FloatArray.groupByTo(destination: M, keySelector: (Float) -> K, valueTransform: (Float) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> DoubleArray.groupByTo(destination: M, keySelector: (Double) -> K, valueTransform: (Double) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> BooleanArray.groupByTo(destination: M, keySelector: (Boolean) -> K, valueTransform: (Boolean) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> CharArray.groupByTo(destination: M, keySelector: (Char) -> K, valueTransform: (Char) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Creates a [Grouping] source from an array to be used later with one of group-and-fold operations\n * using the specified [keySelector] function to extract a key from each element.\n * \n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K> Array<out T>.groupingBy(crossinline keySelector: (T) -> K): Grouping<T, K> {\n return object : Grouping<T, K> {\n override fun sourceIterator(): Iterator<T> = this@groupingBy.iterator()\n override fun keyOf(element: T): K = keySelector(element)\n }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <T, R> Array<out T>.map(transform: (T) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> ByteArray.map(transform: (Byte) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> ShortArray.map(transform: (Short) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> IntArray.map(transform: (Int) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> LongArray.map(transform: (Long) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> FloatArray.map(transform: (Float) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> DoubleArray.map(transform: (Double) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> BooleanArray.map(transform: (Boolean) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <R> CharArray.map(transform: (Char) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R> Array<out T>.mapIndexed(transform: (index: Int, T) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> ByteArray.mapIndexed(transform: (index: Int, Byte) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> ShortArray.mapIndexed(transform: (index: Int, Short) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> IntArray.mapIndexed(transform: (index: Int, Int) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> LongArray.mapIndexed(transform: (index: Int, Long) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> FloatArray.mapIndexed(transform: (index: Int, Float) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> DoubleArray.mapIndexed(transform: (index: Int, Double) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> BooleanArray.mapIndexed(transform: (index: Int, Boolean) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R> CharArray.mapIndexed(transform: (index: Int, Char) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any> Array<out T>.mapIndexedNotNull(transform: (index: Int, T) -> R?): List<R> {\n return mapIndexedNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends only the non-null results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Array<out T>.mapIndexedNotNullTo(destination: C, transform: (index: Int, T) -> R?): C {\n forEachIndexed { index, element -> transform(index, element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.mapIndexedTo(destination: C, transform: (index: Int, T) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> ByteArray.mapIndexedTo(destination: C, transform: (index: Int, Byte) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> ShortArray.mapIndexedTo(destination: C, transform: (index: Int, Short) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> IntArray.mapIndexedTo(destination: C, transform: (index: Int, Int) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> LongArray.mapIndexedTo(destination: C, transform: (index: Int, Long) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> FloatArray.mapIndexedTo(destination: C, transform: (index: Int, Float) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> DoubleArray.mapIndexedTo(destination: C, transform: (index: Int, Double) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> BooleanArray.mapIndexedTo(destination: C, transform: (index: Int, Boolean) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <R, C : MutableCollection<in R>> CharArray.mapIndexedTo(destination: C, transform: (index: Int, Char) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.mapNotNull\n */\npublic inline fun <T, R : Any> Array<out T>.mapNotNull(transform: (T) -> R?): List<R> {\n return mapNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element in the original array\n * and appends only the non-null results to the given [destination].\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Array<out T>.mapNotNullTo(destination: C, transform: (T) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Array<out T>.mapTo(destination: C, transform: (T) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> ByteArray.mapTo(destination: C, transform: (Byte) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> ShortArray.mapTo(destination: C, transform: (Short) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> IntArray.mapTo(destination: C, transform: (Int) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> LongArray.mapTo(destination: C, transform: (Long) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> FloatArray.mapTo(destination: C, transform: (Float) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> DoubleArray.mapTo(destination: C, transform: (Double) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> BooleanArray.mapTo(destination: C, transform: (Boolean) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> CharArray.mapTo(destination: C, transform: (Char) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun <T> Array<out T>.withIndex(): Iterable<IndexedValue<T>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun ByteArray.withIndex(): Iterable<IndexedValue<Byte>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun ShortArray.withIndex(): Iterable<IndexedValue<Short>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun IntArray.withIndex(): Iterable<IndexedValue<Int>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun LongArray.withIndex(): Iterable<IndexedValue<Long>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun FloatArray.withIndex(): Iterable<IndexedValue<Float>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun DoubleArray.withIndex(): Iterable<IndexedValue<Double>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun BooleanArray.withIndex(): Iterable<IndexedValue<Boolean>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun CharArray.withIndex(): Iterable<IndexedValue<Char>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * Among equal elements of the given array, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun <T> Array<out T>.distinct(): List<T> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun ByteArray.distinct(): List<Byte> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun ShortArray.distinct(): List<Short> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun IntArray.distinct(): List<Int> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun LongArray.distinct(): List<Long> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun FloatArray.distinct(): List<Float> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun DoubleArray.distinct(): List<Double> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun BooleanArray.distinct(): List<Boolean> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only distinct elements from the given array.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun CharArray.distinct(): List<Char> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * Among elements of the given array with equal keys, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <T, K> Array<out T>.distinctBy(selector: (T) -> K): List<T> {\n val set = HashSet<K>()\n val list = ArrayList<T>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> ByteArray.distinctBy(selector: (Byte) -> K): List<Byte> {\n val set = HashSet<K>()\n val list = ArrayList<Byte>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> ShortArray.distinctBy(selector: (Short) -> K): List<Short> {\n val set = HashSet<K>()\n val list = ArrayList<Short>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> IntArray.distinctBy(selector: (Int) -> K): List<Int> {\n val set = HashSet<K>()\n val list = ArrayList<Int>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> LongArray.distinctBy(selector: (Long) -> K): List<Long> {\n val set = HashSet<K>()\n val list = ArrayList<Long>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> FloatArray.distinctBy(selector: (Float) -> K): List<Float> {\n val set = HashSet<K>()\n val list = ArrayList<Float>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> DoubleArray.distinctBy(selector: (Double) -> K): List<Double> {\n val set = HashSet<K>()\n val list = ArrayList<Double>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> BooleanArray.distinctBy(selector: (Boolean) -> K): List<Boolean> {\n val set = HashSet<K>()\n val list = ArrayList<Boolean>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a list containing only elements from the given array\n * having distinct keys returned by the given [selector] function.\n * \n * The elements in the resulting list are in the same order as they were in the source array.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <K> CharArray.distinctBy(selector: (Char) -> K): List<Char> {\n val set = HashSet<K>()\n val list = ArrayList<Char>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun <T> Array<out T>.intersect(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun ByteArray.intersect(other: Iterable<Byte>): Set<Byte> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun ShortArray.intersect(other: Iterable<Short>): Set<Short> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun IntArray.intersect(other: Iterable<Int>): Set<Int> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun LongArray.intersect(other: Iterable<Long>): Set<Long> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun FloatArray.intersect(other: Iterable<Float>): Set<Float> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun DoubleArray.intersect(other: Iterable<Double>): Set<Double> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun BooleanArray.intersect(other: Iterable<Boolean>): Set<Boolean> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by both this array and the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun CharArray.intersect(other: Iterable<Char>): Set<Char> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun <T> Array<out T>.subtract(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun ByteArray.subtract(other: Iterable<Byte>): Set<Byte> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun ShortArray.subtract(other: Iterable<Short>): Set<Short> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun IntArray.subtract(other: Iterable<Int>): Set<Int> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun LongArray.subtract(other: Iterable<Long>): Set<Long> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun FloatArray.subtract(other: Iterable<Float>): Set<Float> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun DoubleArray.subtract(other: Iterable<Double>): Set<Double> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun BooleanArray.subtract(other: Iterable<Boolean>): Set<Boolean> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this array and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic infix fun CharArray.subtract(other: Iterable<Char>): Set<Char> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun <T> Array<out T>.toMutableSet(): MutableSet<T> {\n return toCollection(LinkedHashSet<T>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun ByteArray.toMutableSet(): MutableSet<Byte> {\n return toCollection(LinkedHashSet<Byte>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun ShortArray.toMutableSet(): MutableSet<Short> {\n return toCollection(LinkedHashSet<Short>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun IntArray.toMutableSet(): MutableSet<Int> {\n return toCollection(LinkedHashSet<Int>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun LongArray.toMutableSet(): MutableSet<Long> {\n return toCollection(LinkedHashSet<Long>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun FloatArray.toMutableSet(): MutableSet<Float> {\n return toCollection(LinkedHashSet<Float>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun DoubleArray.toMutableSet(): MutableSet<Double> {\n return toCollection(LinkedHashSet<Double>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun BooleanArray.toMutableSet(): MutableSet<Boolean> {\n return toCollection(LinkedHashSet<Boolean>(mapCapacity(size)))\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given array.\n * \n * The returned set preserves the element iteration order of the original array.\n */\npublic fun CharArray.toMutableSet(): MutableSet<Char> {\n return toCollection(LinkedHashSet<Char>(mapCapacity(size.coerceAtMost(128))))\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun <T> Array<out T>.union(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun ByteArray.union(other: Iterable<Byte>): Set<Byte> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun ShortArray.union(other: Iterable<Short>): Set<Short> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun IntArray.union(other: Iterable<Int>): Set<Int> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun LongArray.union(other: Iterable<Long>): Set<Long> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun FloatArray.union(other: Iterable<Float>): Set<Float> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun DoubleArray.union(other: Iterable<Double>): Set<Double> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun BooleanArray.union(other: Iterable<Boolean>): Set<Boolean> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original array.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun CharArray.union(other: Iterable<Char>): Set<Char> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun <T> Array<out T>.all(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun ByteArray.all(predicate: (Byte) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun ShortArray.all(predicate: (Short) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun IntArray.all(predicate: (Int) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun LongArray.all(predicate: (Long) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun FloatArray.all(predicate: (Float) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun DoubleArray.all(predicate: (Double) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun BooleanArray.all(predicate: (Boolean) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun CharArray.all(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun <T> Array<out T>.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun ByteArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun ShortArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun IntArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun LongArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun FloatArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun DoubleArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun BooleanArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun CharArray.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun <T> Array<out T>.any(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun ByteArray.any(predicate: (Byte) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun ShortArray.any(predicate: (Short) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun IntArray.any(predicate: (Int) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun LongArray.any(predicate: (Long) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun FloatArray.any(predicate: (Float) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun DoubleArray.any(predicate: (Double) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun BooleanArray.any(predicate: (Boolean) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun CharArray.any(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements in this array.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun <T> Array<out T>.count(predicate: (T) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun ByteArray.count(predicate: (Byte) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun ShortArray.count(predicate: (Short) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun IntArray.count(predicate: (Int) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun LongArray.count(predicate: (Long) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun FloatArray.count(predicate: (Float) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun DoubleArray.count(predicate: (Double) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun BooleanArray.count(predicate: (Boolean) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun CharArray.count(predicate: (Char) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Array<out T>.fold(initial: R, operation: (acc: R, T) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> ByteArray.fold(initial: R, operation: (acc: R, Byte) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> ShortArray.fold(initial: R, operation: (acc: R, Short) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> IntArray.fold(initial: R, operation: (acc: R, Int) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> LongArray.fold(initial: R, operation: (acc: R, Long) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> FloatArray.fold(initial: R, operation: (acc: R, Float) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> DoubleArray.fold(initial: R, operation: (acc: R, Double) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> BooleanArray.fold(initial: R, operation: (acc: R, Boolean) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <R> CharArray.fold(initial: R, operation: (acc: R, Char) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Array<out T>.foldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> ByteArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Byte) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> ShortArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Short) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> IntArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Int) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> LongArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Long) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> FloatArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Float) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> DoubleArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Double) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> BooleanArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Boolean) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <R> CharArray.foldIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Array<out T>.foldRight(initial: R, operation: (T, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> ByteArray.foldRight(initial: R, operation: (Byte, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> ShortArray.foldRight(initial: R, operation: (Short, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> IntArray.foldRight(initial: R, operation: (Int, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> LongArray.foldRight(initial: R, operation: (Long, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> FloatArray.foldRight(initial: R, operation: (Float, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> DoubleArray.foldRight(initial: R, operation: (Double, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> BooleanArray.foldRight(initial: R, operation: (Boolean, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> CharArray.foldRight(initial: R, operation: (Char, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Array<out T>.foldRightIndexed(initial: R, operation: (index: Int, T, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> ByteArray.foldRightIndexed(initial: R, operation: (index: Int, Byte, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> ShortArray.foldRightIndexed(initial: R, operation: (index: Int, Short, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> IntArray.foldRightIndexed(initial: R, operation: (index: Int, Int, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> LongArray.foldRightIndexed(initial: R, operation: (index: Int, Long, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> FloatArray.foldRightIndexed(initial: R, operation: (index: Int, Float, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> DoubleArray.foldRightIndexed(initial: R, operation: (index: Int, Double, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> BooleanArray.foldRightIndexed(initial: R, operation: (index: Int, Boolean, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> CharArray.foldRightIndexed(initial: R, operation: (index: Int, Char, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun ByteArray.forEach(action: (Byte) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun ShortArray.forEach(action: (Short) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun IntArray.forEach(action: (Int) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun LongArray.forEach(action: (Long) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun FloatArray.forEach(action: (Float) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun DoubleArray.forEach(action: (Double) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun BooleanArray.forEach(action: (Boolean) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\npublic inline fun CharArray.forEach(action: (Char) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun <T> Array<out T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun ByteArray.forEachIndexed(action: (index: Int, Byte) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun ShortArray.forEachIndexed(action: (index: Int, Short) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun IntArray.forEachIndexed(action: (index: Int, Int) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun LongArray.forEachIndexed(action: (index: Int, Long) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun FloatArray.forEachIndexed(action: (index: Int, Float) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun DoubleArray.forEachIndexed(action: (index: Int, Double) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun BooleanArray.forEachIndexed(action: (index: Int, Boolean) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun CharArray.forEachIndexed(action: (index: Int, Char) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Array<out Double>.max(): Double? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Array<out Float>.max(): Float? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Array<out T>.max(): T? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ByteArray.max(): Byte? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ShortArray.max(): Short? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun IntArray.max(): Int? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun LongArray.max(): Long? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.max(): Float? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.max(): Double? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharArray.max(): Char? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Array<out T>.maxBy(selector: (T) -> R): T? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> ByteArray.maxBy(selector: (Byte) -> R): Byte? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> ShortArray.maxBy(selector: (Short) -> R): Short? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> IntArray.maxBy(selector: (Int) -> R): Int? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> LongArray.maxBy(selector: (Long) -> R): Long? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> FloatArray.maxBy(selector: (Float) -> R): Float? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> DoubleArray.maxBy(selector: (Double) -> R): Double? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> BooleanArray.maxBy(selector: (Boolean) -> R): Boolean? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> CharArray.maxBy(selector: (Char) -> R): Char? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Array<out T>.maxByOrNull(selector: (T) -> R): T? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> ByteArray.maxByOrNull(selector: (Byte) -> R): Byte? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> ShortArray.maxByOrNull(selector: (Short) -> R): Short? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> IntArray.maxByOrNull(selector: (Int) -> R): Int? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> LongArray.maxByOrNull(selector: (Long) -> R): Long? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> FloatArray.maxByOrNull(selector: (Float) -> R): Float? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> DoubleArray.maxByOrNull(selector: (Double) -> R): Double? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> BooleanArray.maxByOrNull(selector: (Boolean) -> R): Boolean? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> CharArray.maxByOrNull(selector: (Char) -> R): Char? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.maxOf(selector: (T) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.maxOf(selector: (Byte) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.maxOf(selector: (Short) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.maxOf(selector: (Int) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.maxOf(selector: (Long) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.maxOf(selector: (Float) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.maxOf(selector: (Double) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.maxOf(selector: (Boolean) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.maxOf(selector: (Char) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.maxOf(selector: (T) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.maxOf(selector: (Byte) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.maxOf(selector: (Short) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.maxOf(selector: (Int) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.maxOf(selector: (Long) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.maxOf(selector: (Float) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.maxOf(selector: (Double) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.maxOf(selector: (Boolean) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.maxOf(selector: (Char) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Array<out T>.maxOf(selector: (T) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ByteArray.maxOf(selector: (Byte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ShortArray.maxOf(selector: (Short) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> IntArray.maxOf(selector: (Int) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> LongArray.maxOf(selector: (Long) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> FloatArray.maxOf(selector: (Float) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> DoubleArray.maxOf(selector: (Double) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> BooleanArray.maxOf(selector: (Boolean) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharArray.maxOf(selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.maxOfOrNull(selector: (T) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.maxOfOrNull(selector: (Byte) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.maxOfOrNull(selector: (Short) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.maxOfOrNull(selector: (Int) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.maxOfOrNull(selector: (Long) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.maxOfOrNull(selector: (Float) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.maxOfOrNull(selector: (Double) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.maxOfOrNull(selector: (Boolean) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.maxOfOrNull(selector: (Char) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.maxOfOrNull(selector: (T) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.maxOfOrNull(selector: (Byte) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.maxOfOrNull(selector: (Short) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.maxOfOrNull(selector: (Int) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.maxOfOrNull(selector: (Long) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.maxOfOrNull(selector: (Float) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.maxOfOrNull(selector: (Double) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.maxOfOrNull(selector: (Boolean) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.maxOfOrNull(selector: (Char) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Array<out T>.maxOfOrNull(selector: (T) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ByteArray.maxOfOrNull(selector: (Byte) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ShortArray.maxOfOrNull(selector: (Short) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> IntArray.maxOfOrNull(selector: (Int) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> LongArray.maxOfOrNull(selector: (Long) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> FloatArray.maxOfOrNull(selector: (Float) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> DoubleArray.maxOfOrNull(selector: (Double) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> BooleanArray.maxOfOrNull(selector: (Boolean) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharArray.maxOfOrNull(selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.maxOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.maxOfWith(comparator: Comparator<in R>, selector: (Byte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.maxOfWith(comparator: Comparator<in R>, selector: (Short) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.maxOfWith(comparator: Comparator<in R>, selector: (Int) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.maxOfWith(comparator: Comparator<in R>, selector: (Long) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.maxOfWith(comparator: Comparator<in R>, selector: (Float) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.maxOfWith(comparator: Comparator<in R>, selector: (Double) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.maxOfWith(comparator: Comparator<in R>, selector: (Boolean) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.maxOfWith(comparator: Comparator<in R>, selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.maxOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Byte) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Short) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Int) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Long) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Float) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Double) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Boolean) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Array<out Double>.maxOrNull(): Double? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Array<out Float>.maxOrNull(): Float? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Array<out T>.maxOrNull(): T? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.maxOrNull(): Byte? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.maxOrNull(): Short? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.maxOrNull(): Int? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.maxOrNull(): Long? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.maxOrNull(): Float? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.maxOrNull(): Double? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.maxOrNull(): Char? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Array<out T>.maxWith(comparator: Comparator<in T>): T? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ByteArray.maxWith(comparator: Comparator<in Byte>): Byte? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ShortArray.maxWith(comparator: Comparator<in Short>): Short? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun IntArray.maxWith(comparator: Comparator<in Int>): Int? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun LongArray.maxWith(comparator: Comparator<in Long>): Long? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.maxWith(comparator: Comparator<in Float>): Float? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.maxWith(comparator: Comparator<in Double>): Double? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun BooleanArray.maxWith(comparator: Comparator<in Boolean>): Boolean? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharArray.maxWith(comparator: Comparator<in Char>): Char? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Array<out T>.maxWithOrNull(comparator: Comparator<in T>): T? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.maxWithOrNull(comparator: Comparator<in Byte>): Byte? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.maxWithOrNull(comparator: Comparator<in Short>): Short? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.maxWithOrNull(comparator: Comparator<in Int>): Int? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.maxWithOrNull(comparator: Comparator<in Long>): Long? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.maxWithOrNull(comparator: Comparator<in Float>): Float? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.maxWithOrNull(comparator: Comparator<in Double>): Double? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun BooleanArray.maxWithOrNull(comparator: Comparator<in Boolean>): Boolean? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.maxWithOrNull(comparator: Comparator<in Char>): Char? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Array<out Double>.min(): Double? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Array<out Float>.min(): Float? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Array<out T>.min(): T? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ByteArray.min(): Byte? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ShortArray.min(): Short? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun IntArray.min(): Int? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun LongArray.min(): Long? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.min(): Float? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.min(): Double? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharArray.min(): Char? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Array<out T>.minBy(selector: (T) -> R): T? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> ByteArray.minBy(selector: (Byte) -> R): Byte? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> ShortArray.minBy(selector: (Short) -> R): Short? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> IntArray.minBy(selector: (Int) -> R): Int? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> LongArray.minBy(selector: (Long) -> R): Long? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> FloatArray.minBy(selector: (Float) -> R): Float? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> DoubleArray.minBy(selector: (Double) -> R): Double? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> BooleanArray.minBy(selector: (Boolean) -> R): Boolean? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> CharArray.minBy(selector: (Char) -> R): Char? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Array<out T>.minByOrNull(selector: (T) -> R): T? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> ByteArray.minByOrNull(selector: (Byte) -> R): Byte? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> ShortArray.minByOrNull(selector: (Short) -> R): Short? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> IntArray.minByOrNull(selector: (Int) -> R): Int? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> LongArray.minByOrNull(selector: (Long) -> R): Long? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> FloatArray.minByOrNull(selector: (Float) -> R): Float? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> DoubleArray.minByOrNull(selector: (Double) -> R): Double? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> BooleanArray.minByOrNull(selector: (Boolean) -> R): Boolean? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> CharArray.minByOrNull(selector: (Char) -> R): Char? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.minOf(selector: (T) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.minOf(selector: (Byte) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.minOf(selector: (Short) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.minOf(selector: (Int) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.minOf(selector: (Long) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.minOf(selector: (Float) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.minOf(selector: (Double) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.minOf(selector: (Boolean) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.minOf(selector: (Char) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.minOf(selector: (T) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.minOf(selector: (Byte) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.minOf(selector: (Short) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.minOf(selector: (Int) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.minOf(selector: (Long) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.minOf(selector: (Float) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.minOf(selector: (Double) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.minOf(selector: (Boolean) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.minOf(selector: (Char) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Array<out T>.minOf(selector: (T) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ByteArray.minOf(selector: (Byte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ShortArray.minOf(selector: (Short) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> IntArray.minOf(selector: (Int) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> LongArray.minOf(selector: (Long) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> FloatArray.minOf(selector: (Float) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> DoubleArray.minOf(selector: (Double) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> BooleanArray.minOf(selector: (Boolean) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharArray.minOf(selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.minOfOrNull(selector: (T) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.minOfOrNull(selector: (Byte) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.minOfOrNull(selector: (Short) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.minOfOrNull(selector: (Int) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.minOfOrNull(selector: (Long) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.minOfOrNull(selector: (Float) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.minOfOrNull(selector: (Double) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.minOfOrNull(selector: (Boolean) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.minOfOrNull(selector: (Char) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.minOfOrNull(selector: (T) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.minOfOrNull(selector: (Byte) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.minOfOrNull(selector: (Short) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.minOfOrNull(selector: (Int) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.minOfOrNull(selector: (Long) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.minOfOrNull(selector: (Float) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.minOfOrNull(selector: (Double) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.minOfOrNull(selector: (Boolean) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.minOfOrNull(selector: (Char) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Array<out T>.minOfOrNull(selector: (T) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ByteArray.minOfOrNull(selector: (Byte) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ShortArray.minOfOrNull(selector: (Short) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> IntArray.minOfOrNull(selector: (Int) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> LongArray.minOfOrNull(selector: (Long) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> FloatArray.minOfOrNull(selector: (Float) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> DoubleArray.minOfOrNull(selector: (Double) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> BooleanArray.minOfOrNull(selector: (Boolean) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharArray.minOfOrNull(selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.minOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.minOfWith(comparator: Comparator<in R>, selector: (Byte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.minOfWith(comparator: Comparator<in R>, selector: (Short) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.minOfWith(comparator: Comparator<in R>, selector: (Int) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.minOfWith(comparator: Comparator<in R>, selector: (Long) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.minOfWith(comparator: Comparator<in R>, selector: (Float) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.minOfWith(comparator: Comparator<in R>, selector: (Double) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.minOfWith(comparator: Comparator<in R>, selector: (Boolean) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.minOfWith(comparator: Comparator<in R>, selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Array<out T>.minOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Byte) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Short) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Int) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Long) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Float) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Double) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Boolean) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Array<out Double>.minOrNull(): Double? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Array<out Float>.minOrNull(): Float? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Array<out T>.minOrNull(): T? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.minOrNull(): Byte? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.minOrNull(): Short? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.minOrNull(): Int? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.minOrNull(): Long? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.minOrNull(): Float? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.minOrNull(): Double? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.minOrNull(): Char? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Array<out T>.minWith(comparator: Comparator<in T>): T? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ByteArray.minWith(comparator: Comparator<in Byte>): Byte? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun ShortArray.minWith(comparator: Comparator<in Short>): Short? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun IntArray.minWith(comparator: Comparator<in Int>): Int? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun LongArray.minWith(comparator: Comparator<in Long>): Long? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun FloatArray.minWith(comparator: Comparator<in Float>): Float? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun DoubleArray.minWith(comparator: Comparator<in Double>): Double? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun BooleanArray.minWith(comparator: Comparator<in Boolean>): Boolean? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharArray.minWith(comparator: Comparator<in Char>): Char? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Array<out T>.minWithOrNull(comparator: Comparator<in T>): T? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ByteArray.minWithOrNull(comparator: Comparator<in Byte>): Byte? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun ShortArray.minWithOrNull(comparator: Comparator<in Short>): Short? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun IntArray.minWithOrNull(comparator: Comparator<in Int>): Int? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun LongArray.minWithOrNull(comparator: Comparator<in Long>): Long? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun FloatArray.minWithOrNull(comparator: Comparator<in Float>): Float? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun DoubleArray.minWithOrNull(comparator: Comparator<in Double>): Double? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun BooleanArray.minWithOrNull(comparator: Comparator<in Boolean>): Boolean? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharArray.minWithOrNull(comparator: Comparator<in Char>): Char? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun <T> Array<out T>.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun ByteArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun ShortArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun IntArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun LongArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun FloatArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun DoubleArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun BooleanArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun CharArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun <T> Array<out T>.none(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun ByteArray.none(predicate: (Byte) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun ShortArray.none(predicate: (Short) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun IntArray.none(predicate: (Int) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun LongArray.none(predicate: (Long) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun FloatArray.none(predicate: (Float) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun DoubleArray.none(predicate: (Double) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun BooleanArray.none(predicate: (Boolean) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun CharArray.none(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.onEach(action: (T) -> Unit): Array<out T> {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.onEach(action: (Byte) -> Unit): ByteArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.onEach(action: (Short) -> Unit): ShortArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.onEach(action: (Int) -> Unit): IntArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.onEach(action: (Long) -> Unit): LongArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.onEach(action: (Float) -> Unit): FloatArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.onEach(action: (Double) -> Unit): DoubleArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.onEach(action: (Boolean) -> Unit): BooleanArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.onEach(action: (Char) -> Unit): CharArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.onEachIndexed(action: (index: Int, T) -> Unit): Array<out T> {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.onEachIndexed(action: (index: Int, Byte) -> Unit): ByteArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.onEachIndexed(action: (index: Int, Short) -> Unit): ShortArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.onEachIndexed(action: (index: Int, Int) -> Unit): IntArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.onEachIndexed(action: (index: Int, Long) -> Unit): LongArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.onEachIndexed(action: (index: Int, Float) -> Unit): FloatArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.onEachIndexed(action: (index: Int, Double) -> Unit): DoubleArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.onEachIndexed(action: (index: Int, Boolean) -> Unit): BooleanArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.onEachIndexed(action: (index: Int, Char) -> Unit): CharArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Array<out T>.reduce(operation: (acc: S, T) -> S): S {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator: S = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun ByteArray.reduce(operation: (acc: Byte, Byte) -> Byte): Byte {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun ShortArray.reduce(operation: (acc: Short, Short) -> Short): Short {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun IntArray.reduce(operation: (acc: Int, Int) -> Int): Int {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun LongArray.reduce(operation: (acc: Long, Long) -> Long): Long {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun FloatArray.reduce(operation: (acc: Float, Float) -> Float): Float {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun DoubleArray.reduce(operation: (acc: Double, Double) -> Double): Double {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun BooleanArray.reduce(operation: (acc: Boolean, Boolean) -> Boolean): Boolean {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun CharArray.reduce(operation: (acc: Char, Char) -> Char): Char {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Array<out T>.reduceIndexed(operation: (index: Int, acc: S, T) -> S): S {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator: S = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun ByteArray.reduceIndexed(operation: (index: Int, acc: Byte, Byte) -> Byte): Byte {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun ShortArray.reduceIndexed(operation: (index: Int, acc: Short, Short) -> Short): Short {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun IntArray.reduceIndexed(operation: (index: Int, acc: Int, Int) -> Int): Int {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun LongArray.reduceIndexed(operation: (index: Int, acc: Long, Long) -> Long): Long {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun FloatArray.reduceIndexed(operation: (index: Int, acc: Float, Float) -> Float): Float {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun DoubleArray.reduceIndexed(operation: (index: Int, acc: Double, Double) -> Double): Double {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun BooleanArray.reduceIndexed(operation: (index: Int, acc: Boolean, Boolean) -> Boolean): Boolean {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun CharArray.reduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): Char {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Array<out T>.reduceIndexedOrNull(operation: (index: Int, acc: S, T) -> S): S? {\n if (isEmpty())\n return null\n var accumulator: S = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun ByteArray.reduceIndexedOrNull(operation: (index: Int, acc: Byte, Byte) -> Byte): Byte? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun ShortArray.reduceIndexedOrNull(operation: (index: Int, acc: Short, Short) -> Short): Short? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun IntArray.reduceIndexedOrNull(operation: (index: Int, acc: Int, Int) -> Int): Int? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun LongArray.reduceIndexedOrNull(operation: (index: Int, acc: Long, Long) -> Long): Long? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun FloatArray.reduceIndexedOrNull(operation: (index: Int, acc: Float, Float) -> Float): Float? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun DoubleArray.reduceIndexedOrNull(operation: (index: Int, acc: Double, Double) -> Double): Double? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun BooleanArray.reduceIndexedOrNull(operation: (index: Int, acc: Boolean, Boolean) -> Boolean): Boolean? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharArray.reduceIndexedOrNull(operation: (index: Int, acc: Char, Char) -> Char): Char? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Array<out T>.reduceOrNull(operation: (acc: S, T) -> S): S? {\n if (isEmpty())\n return null\n var accumulator: S = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun ByteArray.reduceOrNull(operation: (acc: Byte, Byte) -> Byte): Byte? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun ShortArray.reduceOrNull(operation: (acc: Short, Short) -> Short): Short? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun IntArray.reduceOrNull(operation: (acc: Int, Int) -> Int): Int? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun LongArray.reduceOrNull(operation: (acc: Long, Long) -> Long): Long? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun FloatArray.reduceOrNull(operation: (acc: Float, Float) -> Float): Float? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun DoubleArray.reduceOrNull(operation: (acc: Double, Double) -> Double): Double? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun BooleanArray.reduceOrNull(operation: (acc: Boolean, Boolean) -> Boolean): Boolean? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun CharArray.reduceOrNull(operation: (acc: Char, Char) -> Char): Char? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> Array<out T>.reduceRight(operation: (T, acc: S) -> S): S {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator: S = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun ByteArray.reduceRight(operation: (Byte, acc: Byte) -> Byte): Byte {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun ShortArray.reduceRight(operation: (Short, acc: Short) -> Short): Short {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun IntArray.reduceRight(operation: (Int, acc: Int) -> Int): Int {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun LongArray.reduceRight(operation: (Long, acc: Long) -> Long): Long {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun FloatArray.reduceRight(operation: (Float, acc: Float) -> Float): Float {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun DoubleArray.reduceRight(operation: (Double, acc: Double) -> Double): Double {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun BooleanArray.reduceRight(operation: (Boolean, acc: Boolean) -> Boolean): Boolean {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun CharArray.reduceRight(operation: (Char, acc: Char) -> Char): Char {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> Array<out T>.reduceRightIndexed(operation: (index: Int, T, acc: S) -> S): S {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator: S = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun ByteArray.reduceRightIndexed(operation: (index: Int, Byte, acc: Byte) -> Byte): Byte {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun ShortArray.reduceRightIndexed(operation: (index: Int, Short, acc: Short) -> Short): Short {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun IntArray.reduceRightIndexed(operation: (index: Int, Int, acc: Int) -> Int): Int {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun LongArray.reduceRightIndexed(operation: (index: Int, Long, acc: Long) -> Long): Long {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun FloatArray.reduceRightIndexed(operation: (index: Int, Float, acc: Float) -> Float): Float {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun DoubleArray.reduceRightIndexed(operation: (index: Int, Double, acc: Double) -> Double): Double {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun BooleanArray.reduceRightIndexed(operation: (index: Int, Boolean, acc: Boolean) -> Boolean): Boolean {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun CharArray.reduceRightIndexed(operation: (index: Int, Char, acc: Char) -> Char): Char {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Array<out T>.reduceRightIndexedOrNull(operation: (index: Int, T, acc: S) -> S): S? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator: S = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun ByteArray.reduceRightIndexedOrNull(operation: (index: Int, Byte, acc: Byte) -> Byte): Byte? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun ShortArray.reduceRightIndexedOrNull(operation: (index: Int, Short, acc: Short) -> Short): Short? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun IntArray.reduceRightIndexedOrNull(operation: (index: Int, Int, acc: Int) -> Int): Int? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun LongArray.reduceRightIndexedOrNull(operation: (index: Int, Long, acc: Long) -> Long): Long? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun FloatArray.reduceRightIndexedOrNull(operation: (index: Int, Float, acc: Float) -> Float): Float? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun DoubleArray.reduceRightIndexedOrNull(operation: (index: Int, Double, acc: Double) -> Double): Double? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun BooleanArray.reduceRightIndexedOrNull(operation: (index: Int, Boolean, acc: Boolean) -> Boolean): Boolean? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharArray.reduceRightIndexedOrNull(operation: (index: Int, Char, acc: Char) -> Char): Char? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Array<out T>.reduceRightOrNull(operation: (T, acc: S) -> S): S? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator: S = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun ByteArray.reduceRightOrNull(operation: (Byte, acc: Byte) -> Byte): Byte? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun ShortArray.reduceRightOrNull(operation: (Short, acc: Short) -> Short): Short? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun IntArray.reduceRightOrNull(operation: (Int, acc: Int) -> Int): Int? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun LongArray.reduceRightOrNull(operation: (Long, acc: Long) -> Long): Long? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun FloatArray.reduceRightOrNull(operation: (Float, acc: Float) -> Float): Float? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun DoubleArray.reduceRightOrNull(operation: (Double, acc: Double) -> Double): Double? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun BooleanArray.reduceRightOrNull(operation: (Boolean, acc: Boolean) -> Boolean): Boolean? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun CharArray.reduceRightOrNull(operation: (Char, acc: Char) -> Char): Char? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Array<out T>.runningFold(initial: R, operation: (acc: R, T) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.runningFold(initial: R, operation: (acc: R, Byte) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.runningFold(initial: R, operation: (acc: R, Short) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.runningFold(initial: R, operation: (acc: R, Int) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.runningFold(initial: R, operation: (acc: R, Long) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.runningFold(initial: R, operation: (acc: R, Float) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.runningFold(initial: R, operation: (acc: R, Double) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.runningFold(initial: R, operation: (acc: R, Boolean) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.runningFold(initial: R, operation: (acc: R, Char) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Array<out T>.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Byte) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Short) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Int) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Long) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Float) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Double) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Boolean) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and the element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Array<out T>.runningReduce(operation: (acc: S, T) -> S): List<S> {\n if (isEmpty()) return emptyList()\n var accumulator: S = this[0]\n val result = ArrayList<S>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.runningReduce(operation: (acc: Byte, Byte) -> Byte): List<Byte> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Byte>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.runningReduce(operation: (acc: Short, Short) -> Short): List<Short> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Short>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.runningReduce(operation: (acc: Int, Int) -> Int): List<Int> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Int>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.runningReduce(operation: (acc: Long, Long) -> Long): List<Long> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Long>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.runningReduce(operation: (acc: Float, Float) -> Float): List<Float> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Float>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.runningReduce(operation: (acc: Double, Double) -> Double): List<Double> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Double>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.runningReduce(operation: (acc: Boolean, Boolean) -> Boolean): List<Boolean> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Boolean>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.runningReduce(operation: (acc: Char, Char) -> Char): List<Char> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Char>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Array<out T>.runningReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n if (isEmpty()) return emptyList()\n var accumulator: S = this[0]\n val result = ArrayList<S>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.runningReduceIndexed(operation: (index: Int, acc: Byte, Byte) -> Byte): List<Byte> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Byte>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.runningReduceIndexed(operation: (index: Int, acc: Short, Short) -> Short): List<Short> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Short>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.runningReduceIndexed(operation: (index: Int, acc: Int, Int) -> Int): List<Int> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Int>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.runningReduceIndexed(operation: (index: Int, acc: Long, Long) -> Long): List<Long> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Long>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.runningReduceIndexed(operation: (index: Int, acc: Float, Float) -> Float): List<Float> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Float>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.runningReduceIndexed(operation: (index: Int, acc: Double, Double) -> Double): List<Double> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Double>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.runningReduceIndexed(operation: (index: Int, acc: Boolean, Boolean) -> Boolean): List<Boolean> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Boolean>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.runningReduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): List<Char> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Char>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Array<out T>.scan(initial: R, operation: (acc: R, T) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.scan(initial: R, operation: (acc: R, Byte) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.scan(initial: R, operation: (acc: R, Short) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.scan(initial: R, operation: (acc: R, Int) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.scan(initial: R, operation: (acc: R, Long) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.scan(initial: R, operation: (acc: R, Float) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.scan(initial: R, operation: (acc: R, Double) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.scan(initial: R, operation: (acc: R, Boolean) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.scan(initial: R, operation: (acc: R, Char) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Array<out T>.scanIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> ByteArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Byte) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> ShortArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Short) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> IntArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Int) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> LongArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Long) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> FloatArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Float) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> DoubleArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Double) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> BooleanArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Boolean) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharArray.scanIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Array<out T>.scanReduce(operation: (acc: S, T) -> S): List<S> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.scanReduce(operation: (acc: Byte, Byte) -> Byte): List<Byte> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.scanReduce(operation: (acc: Short, Short) -> Short): List<Short> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.scanReduce(operation: (acc: Int, Int) -> Int): List<Int> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.scanReduce(operation: (acc: Long, Long) -> Long): List<Long> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.scanReduce(operation: (acc: Float, Float) -> Float): List<Float> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.scanReduce(operation: (acc: Double, Double) -> Double): List<Double> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.scanReduce(operation: (acc: Boolean, Boolean) -> Boolean): List<Boolean> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.scanReduce(operation: (acc: Char, Char) -> Char): List<Char> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Array<out T>.scanReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.scanReduceIndexed(operation: (index: Int, acc: Byte, Byte) -> Byte): List<Byte> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.scanReduceIndexed(operation: (index: Int, acc: Short, Short) -> Short): List<Short> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.scanReduceIndexed(operation: (index: Int, acc: Int, Int) -> Int): List<Int> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.scanReduceIndexed(operation: (index: Int, acc: Long, Long) -> Long): List<Long> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.scanReduceIndexed(operation: (index: Int, acc: Float, Float) -> Float): List<Float> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.scanReduceIndexed(operation: (index: Int, acc: Double, Double) -> Double): List<Double> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.scanReduceIndexed(operation: (index: Int, acc: Boolean, Boolean) -> Boolean): List<Boolean> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.scanReduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): List<Char> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun <T> Array<out T>.sumBy(selector: (T) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun ByteArray.sumBy(selector: (Byte) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun ShortArray.sumBy(selector: (Short) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun IntArray.sumBy(selector: (Int) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun LongArray.sumBy(selector: (Long) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun FloatArray.sumBy(selector: (Float) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun DoubleArray.sumBy(selector: (Double) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun BooleanArray.sumBy(selector: (Boolean) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun CharArray.sumBy(selector: (Char) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun <T> Array<out T>.sumByDouble(selector: (T) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun ByteArray.sumByDouble(selector: (Byte) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun ShortArray.sumByDouble(selector: (Short) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun IntArray.sumByDouble(selector: (Int) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun LongArray.sumByDouble(selector: (Long) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun FloatArray.sumByDouble(selector: (Float) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun DoubleArray.sumByDouble(selector: (Double) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun BooleanArray.sumByDouble(selector: (Boolean) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\npublic inline fun CharArray.sumByDouble(selector: (Char) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.sumOf(selector: (T) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sumOf(selector: (Byte) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sumOf(selector: (Short) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sumOf(selector: (Int) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sumOf(selector: (Long) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sumOf(selector: (Float) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sumOf(selector: (Double) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.sumOf(selector: (Boolean) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sumOf(selector: (Char) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.sumOf(selector: (T) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sumOf(selector: (Byte) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sumOf(selector: (Short) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sumOf(selector: (Int) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sumOf(selector: (Long) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sumOf(selector: (Float) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sumOf(selector: (Double) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.sumOf(selector: (Boolean) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sumOf(selector: (Char) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.sumOf(selector: (T) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sumOf(selector: (Byte) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sumOf(selector: (Short) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sumOf(selector: (Int) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sumOf(selector: (Long) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sumOf(selector: (Float) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sumOf(selector: (Double) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.sumOf(selector: (Boolean) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sumOf(selector: (Char) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.sumOf(selector: (T) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sumOf(selector: (Byte) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sumOf(selector: (Short) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sumOf(selector: (Int) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sumOf(selector: (Long) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sumOf(selector: (Float) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sumOf(selector: (Double) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.sumOf(selector: (Boolean) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sumOf(selector: (Char) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Array<out T>.sumOf(selector: (T) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sumOf(selector: (Byte) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sumOf(selector: (Short) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sumOf(selector: (Int) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sumOf(selector: (Long) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sumOf(selector: (Float) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sumOf(selector: (Double) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun BooleanArray.sumOf(selector: (Boolean) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sumOf(selector: (Char) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n */\npublic fun <T : Any> Array<T?>.requireNoNulls(): Array<T> {\n for (element in this) {\n if (element == null) {\n throw IllegalArgumentException(\"null element found in $this.\")\n }\n }\n @Suppress(\"UNCHECKED_CAST\")\n return this as Array<T>\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun <T> Array<out T>.partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {\n val first = ArrayList<T>()\n val second = ArrayList<T>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun ByteArray.partition(predicate: (Byte) -> Boolean): Pair<List<Byte>, List<Byte>> {\n val first = ArrayList<Byte>()\n val second = ArrayList<Byte>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun ShortArray.partition(predicate: (Short) -> Boolean): Pair<List<Short>, List<Short>> {\n val first = ArrayList<Short>()\n val second = ArrayList<Short>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun IntArray.partition(predicate: (Int) -> Boolean): Pair<List<Int>, List<Int>> {\n val first = ArrayList<Int>()\n val second = ArrayList<Int>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun LongArray.partition(predicate: (Long) -> Boolean): Pair<List<Long>, List<Long>> {\n val first = ArrayList<Long>()\n val second = ArrayList<Long>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun FloatArray.partition(predicate: (Float) -> Boolean): Pair<List<Float>, List<Float>> {\n val first = ArrayList<Float>()\n val second = ArrayList<Float>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun DoubleArray.partition(predicate: (Double) -> Boolean): Pair<List<Double>, List<Double>> {\n val first = ArrayList<Double>()\n val second = ArrayList<Double>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun BooleanArray.partition(predicate: (Boolean) -> Boolean): Pair<List<Boolean>, List<Boolean>> {\n val first = ArrayList<Boolean>()\n val second = ArrayList<Boolean>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original array into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Arrays.Transformations.partitionArrayOfPrimitives\n */\npublic inline fun CharArray.partition(predicate: (Char) -> Boolean): Pair<List<Char>, List<Char>> {\n val first = ArrayList<Char>()\n val second = ArrayList<Char>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Array<out T>.zip(other: Array<out R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> ByteArray.zip(other: Array<out R>): List<Pair<Byte, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> ShortArray.zip(other: Array<out R>): List<Pair<Short, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> IntArray.zip(other: Array<out R>): List<Pair<Int, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> LongArray.zip(other: Array<out R>): List<Pair<Long, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> FloatArray.zip(other: Array<out R>): List<Pair<Float, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> DoubleArray.zip(other: Array<out R>): List<Pair<Double, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> BooleanArray.zip(other: Array<out R>): List<Pair<Boolean, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> CharArray.zip(other: Array<out R>): List<Pair<Char, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Array<out T>.zip(other: Array<out R>, transform: (a: T, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> ByteArray.zip(other: Array<out R>, transform: (a: Byte, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> ShortArray.zip(other: Array<out R>, transform: (a: Short, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> IntArray.zip(other: Array<out R>, transform: (a: Int, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> LongArray.zip(other: Array<out R>, transform: (a: Long, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> FloatArray.zip(other: Array<out R>, transform: (a: Float, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> DoubleArray.zip(other: Array<out R>, transform: (a: Double, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> BooleanArray.zip(other: Array<out R>, transform: (a: Boolean, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> CharArray.zip(other: Array<out R>, transform: (a: Char, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Array<out T>.zip(other: Iterable<R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> ByteArray.zip(other: Iterable<R>): List<Pair<Byte, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> ShortArray.zip(other: Iterable<R>): List<Pair<Short, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> IntArray.zip(other: Iterable<R>): List<Pair<Int, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> LongArray.zip(other: Iterable<R>): List<Pair<Long, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> FloatArray.zip(other: Iterable<R>): List<Pair<Float, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> DoubleArray.zip(other: Iterable<R>): List<Pair<Double, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> BooleanArray.zip(other: Iterable<R>): List<Pair<Boolean, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <R> CharArray.zip(other: Iterable<R>): List<Pair<Char, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Array<out T>.zip(other: Iterable<R>, transform: (a: T, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> ByteArray.zip(other: Iterable<R>, transform: (a: Byte, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> ShortArray.zip(other: Iterable<R>, transform: (a: Short, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> IntArray.zip(other: Iterable<R>, transform: (a: Int, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> LongArray.zip(other: Iterable<R>, transform: (a: Long, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> FloatArray.zip(other: Iterable<R>, transform: (a: Float, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> DoubleArray.zip(other: Iterable<R>, transform: (a: Double, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> BooleanArray.zip(other: Iterable<R>, transform: (a: Boolean, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <R, V> CharArray.zip(other: Iterable<R>, transform: (a: Char, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun ByteArray.zip(other: ByteArray): List<Pair<Byte, Byte>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun ShortArray.zip(other: ShortArray): List<Pair<Short, Short>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun IntArray.zip(other: IntArray): List<Pair<Int, Int>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun LongArray.zip(other: LongArray): List<Pair<Long, Long>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun FloatArray.zip(other: FloatArray): List<Pair<Float, Float>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun DoubleArray.zip(other: DoubleArray): List<Pair<Double, Double>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun BooleanArray.zip(other: BooleanArray): List<Pair<Boolean, Boolean>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun CharArray.zip(other: CharArray): List<Pair<Char, Char>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> ByteArray.zip(other: ByteArray, transform: (a: Byte, b: Byte) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> ShortArray.zip(other: ShortArray, transform: (a: Short, b: Short) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> IntArray.zip(other: IntArray, transform: (a: Int, b: Int) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> LongArray.zip(other: LongArray, transform: (a: Long, b: Long) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> FloatArray.zip(other: FloatArray, transform: (a: Float, b: Float) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> DoubleArray.zip(other: DoubleArray, transform: (a: Double, b: Double) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> BooleanArray.zip(other: BooleanArray, transform: (a: Boolean, b: Boolean) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <V> CharArray.zip(other: CharArray, transform: (a: Char, b: Char) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <T, A : Appendable> Array<out T>.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n buffer.appendElement(element, transform)\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> ByteArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Byte) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> ShortArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Short) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> IntArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Int) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> LongArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Long) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> FloatArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Float) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> DoubleArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Double) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> BooleanArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Boolean) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element.toString())\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <A : Appendable> CharArray.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Char) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n if (transform != null)\n buffer.append(transform(element))\n else\n buffer.append(element)\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun <T> Array<out T>.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun ByteArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Byte) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun ShortArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Short) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun IntArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Int) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun LongArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Long) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun FloatArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Float) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun DoubleArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Double) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun BooleanArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Boolean) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun CharArray.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((Char) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun <T> Array<out T>.asIterable(): Iterable<T> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun ByteArray.asIterable(): Iterable<Byte> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun ShortArray.asIterable(): Iterable<Short> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun IntArray.asIterable(): Iterable<Int> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun LongArray.asIterable(): Iterable<Long> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun FloatArray.asIterable(): Iterable<Float> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun DoubleArray.asIterable(): Iterable<Double> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun BooleanArray.asIterable(): Iterable<Boolean> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original array returning its elements when being iterated.\n */\npublic fun CharArray.asIterable(): Iterable<Char> {\n if (isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun <T> Array<out T>.asSequence(): Sequence<T> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun ByteArray.asSequence(): Sequence<Byte> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun ShortArray.asSequence(): Sequence<Short> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun IntArray.asSequence(): Sequence<Int> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun LongArray.asSequence(): Sequence<Long> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun FloatArray.asSequence(): Sequence<Float> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun DoubleArray.asSequence(): Sequence<Double> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun BooleanArray.asSequence(): Sequence<Boolean> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original array returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromArray\n */\npublic fun CharArray.asSequence(): Sequence<Char> {\n if (isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfByte\")\npublic fun Array<out Byte>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfShort\")\npublic fun Array<out Short>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfInt\")\npublic fun Array<out Int>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfLong\")\npublic fun Array<out Long>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfFloat\")\npublic fun Array<out Float>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\n@kotlin.jvm.JvmName(\"averageOfDouble\")\npublic fun Array<out Double>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun ByteArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun ShortArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun IntArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun LongArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun FloatArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the array.\n */\npublic fun DoubleArray.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n ++count\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfByte\")\npublic fun Array<out Byte>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfShort\")\npublic fun Array<out Short>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfInt\")\npublic fun Array<out Int>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfLong\")\npublic fun Array<out Long>.sum(): Long {\n var sum: Long = 0L\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfFloat\")\npublic fun Array<out Float>.sum(): Float {\n var sum: Float = 0.0f\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfDouble\")\npublic fun Array<out Double>.sum(): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun ByteArray.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun ShortArray.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun IntArray.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun LongArray.sum(): Long {\n var sum: Long = 0L\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun FloatArray.sum(): Float {\n var sum: Float = 0.0f\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\npublic fun DoubleArray.sum(): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"RangesKt\")\n\npackage kotlin.ranges\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\n\n/**\n * Returns a random element from this range.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun IntRange.random(): Int {\n return random(Random)\n}\n\n/**\n * Returns a random element from this range.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun LongRange.random(): Long {\n return random(Random)\n}\n\n/**\n * Returns a random element from this range.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun CharRange.random(): Char {\n return random(Random)\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun IntRange.random(random: Random): Int {\n try {\n return random.nextInt(this)\n } catch(e: IllegalArgumentException) {\n throw NoSuchElementException(e.message)\n }\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun LongRange.random(random: Random): Long {\n try {\n return random.nextLong(this)\n } catch(e: IllegalArgumentException) {\n throw NoSuchElementException(e.message)\n }\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness.\n * \n * @throws IllegalArgumentException if this range is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun CharRange.random(random: Random): Char {\n try {\n return random.nextInt(first.toInt(), last.toInt() + 1).toChar()\n } catch(e: IllegalArgumentException) {\n throw NoSuchElementException(e.message)\n }\n}\n\n/**\n * Returns a random element from this range, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun IntRange.randomOrNull(): Int? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this range, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun LongRange.randomOrNull(): Long? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this range, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun CharRange.randomOrNull(): Char? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun IntRange.randomOrNull(random: Random): Int? {\n if (isEmpty())\n return null\n return random.nextInt(this)\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun LongRange.randomOrNull(random: Random): Long? {\n if (isEmpty())\n return null\n return random.nextLong(this)\n}\n\n/**\n * Returns a random element from this range using the specified source of randomness, or `null` if this range is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun CharRange.randomOrNull(random: Random): Char? {\n if (isEmpty())\n return null\n return random.nextInt(first.toInt(), last.toInt() + 1).toChar()\n}\n\n/**\n * Returns `true` if this range contains the specified [element].\n * \n * Always returns `false` if the [element] is `null`.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline operator fun IntRange.contains(element: Int?): Boolean {\n return element != null && contains(element)\n}\n\n/**\n * Returns `true` if this range contains the specified [element].\n * \n * Always returns `false` if the [element] is `null`.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline operator fun LongRange.contains(element: Long?): Boolean {\n return element != null && contains(element)\n}\n\n/**\n * Returns `true` if this range contains the specified [element].\n * \n * Always returns `false` if the [element] is `null`.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline operator fun CharRange.contains(element: Char?): Boolean {\n return element != null && contains(element)\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"intRangeContains\")\npublic operator fun ClosedRange<Int>.contains(value: Byte): Boolean {\n return contains(value.toInt())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"longRangeContains\")\npublic operator fun ClosedRange<Long>.contains(value: Byte): Boolean {\n return contains(value.toLong())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"shortRangeContains\")\npublic operator fun ClosedRange<Short>.contains(value: Byte): Boolean {\n return contains(value.toShort())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"doubleRangeContains\")\npublic operator fun ClosedRange<Double>.contains(value: Byte): Boolean {\n return contains(value.toDouble())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"floatRangeContains\")\npublic operator fun ClosedRange<Float>.contains(value: Byte): Boolean {\n return contains(value.toFloat())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"intRangeContains\")\npublic operator fun ClosedRange<Int>.contains(value: Double): Boolean {\n return value.toIntExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"longRangeContains\")\npublic operator fun ClosedRange<Long>.contains(value: Double): Boolean {\n return value.toLongExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"byteRangeContains\")\npublic operator fun ClosedRange<Byte>.contains(value: Double): Boolean {\n return value.toByteExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"shortRangeContains\")\npublic operator fun ClosedRange<Short>.contains(value: Double): Boolean {\n return value.toShortExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"floatRangeContains\")\npublic operator fun ClosedRange<Float>.contains(value: Double): Boolean {\n return contains(value.toFloat())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"intRangeContains\")\npublic operator fun ClosedRange<Int>.contains(value: Float): Boolean {\n return value.toIntExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"longRangeContains\")\npublic operator fun ClosedRange<Long>.contains(value: Float): Boolean {\n return value.toLongExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"byteRangeContains\")\npublic operator fun ClosedRange<Byte>.contains(value: Float): Boolean {\n return value.toByteExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"shortRangeContains\")\npublic operator fun ClosedRange<Short>.contains(value: Float): Boolean {\n return value.toShortExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"doubleRangeContains\")\npublic operator fun ClosedRange<Double>.contains(value: Float): Boolean {\n return contains(value.toDouble())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"longRangeContains\")\npublic operator fun ClosedRange<Long>.contains(value: Int): Boolean {\n return contains(value.toLong())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"byteRangeContains\")\npublic operator fun ClosedRange<Byte>.contains(value: Int): Boolean {\n return value.toByteExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"shortRangeContains\")\npublic operator fun ClosedRange<Short>.contains(value: Int): Boolean {\n return value.toShortExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"doubleRangeContains\")\npublic operator fun ClosedRange<Double>.contains(value: Int): Boolean {\n return contains(value.toDouble())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"floatRangeContains\")\npublic operator fun ClosedRange<Float>.contains(value: Int): Boolean {\n return contains(value.toFloat())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"intRangeContains\")\npublic operator fun ClosedRange<Int>.contains(value: Long): Boolean {\n return value.toIntExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"byteRangeContains\")\npublic operator fun ClosedRange<Byte>.contains(value: Long): Boolean {\n return value.toByteExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"shortRangeContains\")\npublic operator fun ClosedRange<Short>.contains(value: Long): Boolean {\n return value.toShortExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"doubleRangeContains\")\npublic operator fun ClosedRange<Double>.contains(value: Long): Boolean {\n return contains(value.toDouble())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"floatRangeContains\")\npublic operator fun ClosedRange<Float>.contains(value: Long): Boolean {\n return contains(value.toFloat())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"intRangeContains\")\npublic operator fun ClosedRange<Int>.contains(value: Short): Boolean {\n return contains(value.toInt())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"longRangeContains\")\npublic operator fun ClosedRange<Long>.contains(value: Short): Boolean {\n return contains(value.toLong())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@kotlin.jvm.JvmName(\"byteRangeContains\")\npublic operator fun ClosedRange<Byte>.contains(value: Short): Boolean {\n return value.toByteExactOrNull().let { if (it != null) contains(it) else false }\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"doubleRangeContains\")\npublic operator fun ClosedRange<Double>.contains(value: Short): Boolean {\n return contains(value.toDouble())\n}\n\n/**\n * Checks if the specified [value] belongs to this range.\n */\n@Deprecated(\"This `contains` operation mixing integer and floating point arguments has ambiguous semantics and is going to be removed.\")\n@DeprecatedSinceKotlin(warningSince = \"1.3\", errorSince = \"1.4\")\n@kotlin.jvm.JvmName(\"floatRangeContains\")\npublic operator fun ClosedRange<Float>.contains(value: Short): Boolean {\n return contains(value.toFloat())\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Int.downTo(to: Byte): IntProgression {\n return IntProgression.fromClosedRange(this, to.toInt(), -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Long.downTo(to: Byte): LongProgression {\n return LongProgression.fromClosedRange(this, to.toLong(), -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Byte.downTo(to: Byte): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to.toInt(), -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Short.downTo(to: Byte): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to.toInt(), -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Char.downTo(to: Char): CharProgression {\n return CharProgression.fromClosedRange(this, to, -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Int.downTo(to: Int): IntProgression {\n return IntProgression.fromClosedRange(this, to, -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Long.downTo(to: Int): LongProgression {\n return LongProgression.fromClosedRange(this, to.toLong(), -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Byte.downTo(to: Int): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to, -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Short.downTo(to: Int): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to, -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Int.downTo(to: Long): LongProgression {\n return LongProgression.fromClosedRange(this.toLong(), to, -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Long.downTo(to: Long): LongProgression {\n return LongProgression.fromClosedRange(this, to, -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Byte.downTo(to: Long): LongProgression {\n return LongProgression.fromClosedRange(this.toLong(), to, -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Short.downTo(to: Long): LongProgression {\n return LongProgression.fromClosedRange(this.toLong(), to, -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Int.downTo(to: Short): IntProgression {\n return IntProgression.fromClosedRange(this, to.toInt(), -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Long.downTo(to: Short): LongProgression {\n return LongProgression.fromClosedRange(this, to.toLong(), -1L)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Byte.downTo(to: Short): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to.toInt(), -1)\n}\n\n/**\n * Returns a progression from this value down to the specified [to] value with the step -1.\n * \n * The [to] value should be less than or equal to `this` value.\n * If the [to] value is greater than `this` value the returned progression is empty.\n */\npublic infix fun Short.downTo(to: Short): IntProgression {\n return IntProgression.fromClosedRange(this.toInt(), to.toInt(), -1)\n}\n\n/**\n * Returns a progression that goes over the same range in the opposite direction with the same step.\n */\npublic fun IntProgression.reversed(): IntProgression {\n return IntProgression.fromClosedRange(last, first, -step)\n}\n\n/**\n * Returns a progression that goes over the same range in the opposite direction with the same step.\n */\npublic fun LongProgression.reversed(): LongProgression {\n return LongProgression.fromClosedRange(last, first, -step)\n}\n\n/**\n * Returns a progression that goes over the same range in the opposite direction with the same step.\n */\npublic fun CharProgression.reversed(): CharProgression {\n return CharProgression.fromClosedRange(last, first, -step)\n}\n\n/**\n * Returns a progression that goes over the same range with the given step.\n */\npublic infix fun IntProgression.step(step: Int): IntProgression {\n checkStepIsPositive(step > 0, step)\n return IntProgression.fromClosedRange(first, last, if (this.step > 0) step else -step)\n}\n\n/**\n * Returns a progression that goes over the same range with the given step.\n */\npublic infix fun LongProgression.step(step: Long): LongProgression {\n checkStepIsPositive(step > 0, step)\n return LongProgression.fromClosedRange(first, last, if (this.step > 0) step else -step)\n}\n\n/**\n * Returns a progression that goes over the same range with the given step.\n */\npublic infix fun CharProgression.step(step: Int): CharProgression {\n checkStepIsPositive(step > 0, step)\n return CharProgression.fromClosedRange(first, last, if (this.step > 0) step else -step)\n}\n\ninternal fun Int.toByteExactOrNull(): Byte? {\n return if (this in Byte.MIN_VALUE.toInt()..Byte.MAX_VALUE.toInt()) this.toByte() else null\n}\n\ninternal fun Long.toByteExactOrNull(): Byte? {\n return if (this in Byte.MIN_VALUE.toLong()..Byte.MAX_VALUE.toLong()) this.toByte() else null\n}\n\ninternal fun Short.toByteExactOrNull(): Byte? {\n return if (this in Byte.MIN_VALUE.toShort()..Byte.MAX_VALUE.toShort()) this.toByte() else null\n}\n\ninternal fun Double.toByteExactOrNull(): Byte? {\n return if (this in Byte.MIN_VALUE.toDouble()..Byte.MAX_VALUE.toDouble()) this.toInt().toByte() else null\n}\n\ninternal fun Float.toByteExactOrNull(): Byte? {\n return if (this in Byte.MIN_VALUE.toFloat()..Byte.MAX_VALUE.toFloat()) this.toInt().toByte() else null\n}\n\ninternal fun Long.toIntExactOrNull(): Int? {\n return if (this in Int.MIN_VALUE.toLong()..Int.MAX_VALUE.toLong()) this.toInt() else null\n}\n\ninternal fun Double.toIntExactOrNull(): Int? {\n return if (this in Int.MIN_VALUE.toDouble()..Int.MAX_VALUE.toDouble()) this.toInt() else null\n}\n\ninternal fun Float.toIntExactOrNull(): Int? {\n return if (this in Int.MIN_VALUE.toFloat()..Int.MAX_VALUE.toFloat()) this.toInt() else null\n}\n\ninternal fun Double.toLongExactOrNull(): Long? {\n return if (this in Long.MIN_VALUE.toDouble()..Long.MAX_VALUE.toDouble()) this.toLong() else null\n}\n\ninternal fun Float.toLongExactOrNull(): Long? {\n return if (this in Long.MIN_VALUE.toFloat()..Long.MAX_VALUE.toFloat()) this.toLong() else null\n}\n\ninternal fun Int.toShortExactOrNull(): Short? {\n return if (this in Short.MIN_VALUE.toInt()..Short.MAX_VALUE.toInt()) this.toShort() else null\n}\n\ninternal fun Long.toShortExactOrNull(): Short? {\n return if (this in Short.MIN_VALUE.toLong()..Short.MAX_VALUE.toLong()) this.toShort() else null\n}\n\ninternal fun Double.toShortExactOrNull(): Short? {\n return if (this in Short.MIN_VALUE.toDouble()..Short.MAX_VALUE.toDouble()) this.toInt().toShort() else null\n}\n\ninternal fun Float.toShortExactOrNull(): Short? {\n return if (this in Short.MIN_VALUE.toFloat()..Short.MAX_VALUE.toFloat()) this.toInt().toShort() else null\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Int.until(to: Byte): IntRange {\n return this .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Long.until(to: Byte): LongRange {\n return this .. (to.toLong() - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Byte.until(to: Byte): IntRange {\n return this.toInt() .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Short.until(to: Byte): IntRange {\n return this.toInt() .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Char.until(to: Char): CharRange {\n if (to <= '\\u0000') return CharRange.EMPTY\n return this .. (to - 1).toChar()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Int.until(to: Int): IntRange {\n if (to <= Int.MIN_VALUE) return IntRange.EMPTY\n return this .. (to - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Long.until(to: Int): LongRange {\n return this .. (to.toLong() - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Byte.until(to: Int): IntRange {\n if (to <= Int.MIN_VALUE) return IntRange.EMPTY\n return this.toInt() .. (to - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Short.until(to: Int): IntRange {\n if (to <= Int.MIN_VALUE) return IntRange.EMPTY\n return this.toInt() .. (to - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Int.until(to: Long): LongRange {\n if (to <= Long.MIN_VALUE) return LongRange.EMPTY\n return this.toLong() .. (to - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Long.until(to: Long): LongRange {\n if (to <= Long.MIN_VALUE) return LongRange.EMPTY\n return this .. (to - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Byte.until(to: Long): LongRange {\n if (to <= Long.MIN_VALUE) return LongRange.EMPTY\n return this.toLong() .. (to - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Short.until(to: Long): LongRange {\n if (to <= Long.MIN_VALUE) return LongRange.EMPTY\n return this.toLong() .. (to - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Int.until(to: Short): IntRange {\n return this .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Long.until(to: Short): LongRange {\n return this .. (to.toLong() - 1).toLong()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Byte.until(to: Short): IntRange {\n return this.toInt() .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Returns a range from this value up to but excluding the specified [to] value.\n * \n * If the [to] value is less than or equal to `this` value, then the returned range is empty.\n */\npublic infix fun Short.until(to: Short): IntRange {\n return this.toInt() .. (to.toInt() - 1).toInt()\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeastComparable\n */\npublic fun <T : Comparable<T>> T.coerceAtLeast(minimumValue: T): T {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Byte.coerceAtLeast(minimumValue: Byte): Byte {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Short.coerceAtLeast(minimumValue: Short): Short {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Int.coerceAtLeast(minimumValue: Int): Int {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Long.coerceAtLeast(minimumValue: Long): Long {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Float.coerceAtLeast(minimumValue: Float): Float {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not less than the specified [minimumValue].\n * \n * @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtLeast\n */\npublic fun Double.coerceAtLeast(minimumValue: Double): Double {\n return if (this < minimumValue) minimumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMostComparable\n */\npublic fun <T : Comparable<T>> T.coerceAtMost(maximumValue: T): T {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Byte.coerceAtMost(maximumValue: Byte): Byte {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Short.coerceAtMost(maximumValue: Short): Short {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Int.coerceAtMost(maximumValue: Int): Int {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Long.coerceAtMost(maximumValue: Long): Long {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Float.coerceAtMost(maximumValue: Float): Float {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value is not greater than the specified [maximumValue].\n * \n * @return this value if it's less than or equal to the [maximumValue] or the [maximumValue] otherwise.\n * \n * @sample samples.comparisons.ComparableOps.coerceAtMost\n */\npublic fun Double.coerceAtMost(maximumValue: Double): Double {\n return if (this > maximumValue) maximumValue else this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceInComparable\n */\npublic fun <T : Comparable<T>> T.coerceIn(minimumValue: T?, maximumValue: T?): T {\n if (minimumValue !== null && maximumValue !== null) {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n }\n else {\n if (minimumValue !== null && this < minimumValue) return minimumValue\n if (maximumValue !== null && this > maximumValue) return maximumValue\n }\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Byte.coerceIn(minimumValue: Byte, maximumValue: Byte): Byte {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Short.coerceIn(minimumValue: Short, maximumValue: Short): Short {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Int.coerceIn(minimumValue: Int, maximumValue: Int): Int {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Long.coerceIn(minimumValue: Long, maximumValue: Long): Long {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Float.coerceIn(minimumValue: Float, maximumValue: Float): Float {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified range [minimumValue]..[maximumValue].\n * \n * @return this value if it's in the range, or [minimumValue] if this value is less than [minimumValue], or [maximumValue] if this value is greater than [maximumValue].\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Double.coerceIn(minimumValue: Double, maximumValue: Double): Double {\n if (minimumValue > maximumValue) throw IllegalArgumentException(\"Cannot coerce value to an empty range: maximum $maximumValue is less than minimum $minimumValue.\")\n if (this < minimumValue) return minimumValue\n if (this > maximumValue) return maximumValue\n return this\n}\n\n/**\n * Ensures that this value lies in the specified [range].\n * \n * @return this value if it's in the [range], or `range.start` if this value is less than `range.start`, or `range.endInclusive` if this value is greater than `range.endInclusive`.\n * \n * @sample samples.comparisons.ComparableOps.coerceInFloatingPointRange\n */\n@SinceKotlin(\"1.1\")\npublic fun <T : Comparable<T>> T.coerceIn(range: ClosedFloatingPointRange<T>): T {\n if (range.isEmpty()) throw IllegalArgumentException(\"Cannot coerce value to an empty range: $range.\")\n return when {\n // this < start equiv to this <= start && !(this >= start)\n range.lessThanOrEquals(this, range.start) && !range.lessThanOrEquals(range.start, this) -> range.start\n // this > end equiv to this >= end && !(this <= end)\n range.lessThanOrEquals(range.endInclusive, this) && !range.lessThanOrEquals(this, range.endInclusive) -> range.endInclusive\n else -> this\n }\n}\n\n/**\n * Ensures that this value lies in the specified [range].\n * \n * @return this value if it's in the [range], or `range.start` if this value is less than `range.start`, or `range.endInclusive` if this value is greater than `range.endInclusive`.\n * \n * @sample samples.comparisons.ComparableOps.coerceInComparable\n */\npublic fun <T : Comparable<T>> T.coerceIn(range: ClosedRange<T>): T {\n if (range is ClosedFloatingPointRange) {\n return this.coerceIn<T>(range)\n }\n if (range.isEmpty()) throw IllegalArgumentException(\"Cannot coerce value to an empty range: $range.\")\n return when {\n this < range.start -> range.start\n this > range.endInclusive -> range.endInclusive\n else -> this\n }\n}\n\n/**\n * Ensures that this value lies in the specified [range].\n * \n * @return this value if it's in the [range], or `range.start` if this value is less than `range.start`, or `range.endInclusive` if this value is greater than `range.endInclusive`.\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Int.coerceIn(range: ClosedRange<Int>): Int {\n if (range is ClosedFloatingPointRange) {\n return this.coerceIn<Int>(range)\n }\n if (range.isEmpty()) throw IllegalArgumentException(\"Cannot coerce value to an empty range: $range.\")\n return when {\n this < range.start -> range.start\n this > range.endInclusive -> range.endInclusive\n else -> this\n }\n}\n\n/**\n * Ensures that this value lies in the specified [range].\n * \n * @return this value if it's in the [range], or `range.start` if this value is less than `range.start`, or `range.endInclusive` if this value is greater than `range.endInclusive`.\n * \n * @sample samples.comparisons.ComparableOps.coerceIn\n */\npublic fun Long.coerceIn(range: ClosedRange<Long>): Long {\n if (range is ClosedFloatingPointRange) {\n return this.coerceIn<Long>(range)\n }\n if (range.isEmpty()) throw IllegalArgumentException(\"Cannot coerce value to an empty range: $range.\")\n return when {\n this < range.start -> range.start\n this > range.endInclusive -> range.endInclusive\n else -> this\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin\n\nimport kotlin.experimental.*\n\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline class UByte @PublishedApi internal constructor(@PublishedApi internal val data: Byte) : Comparable<UByte> {\n\n companion object {\n /**\n * A constant holding the minimum value an instance of UByte can have.\n */\n public const val MIN_VALUE: UByte = UByte(0)\n\n /**\n * A constant holding the maximum value an instance of UByte can have.\n */\n public const val MAX_VALUE: UByte = UByte(-1)\n\n /**\n * The number of bytes used to represent an instance of UByte in a binary form.\n */\n public const val SIZE_BYTES: Int = 1\n\n /**\n * The number of bits used to represent an instance of UByte in a binary form.\n */\n public const val SIZE_BITS: Int = 8\n }\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n @Suppress(\"OVERRIDE_BY_INLINE\")\n public override inline operator fun compareTo(other: UByte): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UShort): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UInt): Int = this.toUInt().compareTo(other)\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: ULong): Int = this.toULong().compareTo(other)\n\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UByte): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UShort): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UInt): UInt = this.toUInt().plus(other)\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: ULong): ULong = this.toULong().plus(other)\n\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UByte): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UShort): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UInt): UInt = this.toUInt().minus(other)\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: ULong): ULong = this.toULong().minus(other)\n\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UByte): UInt = this.toUInt().times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UShort): UInt = this.toUInt().times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UInt): UInt = this.toUInt().times(other)\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: ULong): ULong = this.toULong().times(other)\n\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UByte): UInt = this.toUInt().div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UShort): UInt = this.toUInt().div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UInt): UInt = this.toUInt().div(other)\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: ULong): ULong = this.toULong().div(other)\n\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UByte): UInt = this.toUInt().rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UShort): UInt = this.toUInt().rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UInt): UInt = this.toUInt().rem(other)\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: ULong): ULong = this.toULong().rem(other)\n\n /** Increments this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun inc(): UByte = UByte(data.inc())\n /** Decrements this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun dec(): UByte = UByte(data.dec())\n\n /** Creates a range from this value to the specified [other] value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rangeTo(other: UByte): UIntRange = UIntRange(this.toUInt(), other.toUInt())\n\n /** Performs a bitwise AND operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun and(other: UByte): UByte = UByte(this.data and other.data)\n /** Performs a bitwise OR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun or(other: UByte): UByte = UByte(this.data or other.data)\n /** Performs a bitwise XOR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun xor(other: UByte): UByte = UByte(this.data xor other.data)\n /** Inverts the bits in this value. */\n @kotlin.internal.InlineOnly\n public inline fun inv(): UByte = UByte(data.inv())\n\n /**\n * Converts this [UByte] value to [Byte].\n *\n * If this value is less than or equals to [Byte.MAX_VALUE], the resulting `Byte` value represents\n * the same numerical value as this `UByte`. Otherwise the result is negative.\n *\n * The resulting `Byte` value has the same binary representation as this `UByte` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toByte(): Byte = data\n /**\n * Converts this [UByte] value to [Short].\n *\n * The resulting `Short` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `Short` value are the same as the bits of this `UByte` value,\n * whereas the most significant 8 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toShort(): Short = data.toShort() and 0xFF\n /**\n * Converts this [UByte] value to [Int].\n *\n * The resulting `Int` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `Int` value are the same as the bits of this `UByte` value,\n * whereas the most significant 24 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toInt(): Int = data.toInt() and 0xFF\n /**\n * Converts this [UByte] value to [Long].\n *\n * The resulting `Long` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `Long` value are the same as the bits of this `UByte` value,\n * whereas the most significant 56 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toLong(): Long = data.toLong() and 0xFF\n\n /** Returns this value. */\n @kotlin.internal.InlineOnly\n public inline fun toUByte(): UByte = this\n /**\n * Converts this [UByte] value to [UShort].\n *\n * The resulting `UShort` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `UShort` value are the same as the bits of this `UByte` value,\n * whereas the most significant 8 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUShort(): UShort = UShort(data.toShort() and 0xFF)\n /**\n * Converts this [UByte] value to [UInt].\n *\n * The resulting `UInt` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `UInt` value are the same as the bits of this `UByte` value,\n * whereas the most significant 24 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUInt(): UInt = UInt(data.toInt() and 0xFF)\n /**\n * Converts this [UByte] value to [ULong].\n *\n * The resulting `ULong` value represents the same numerical value as this `UByte`.\n *\n * The least significant 8 bits of the resulting `ULong` value are the same as the bits of this `UByte` value,\n * whereas the most significant 56 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toULong(): ULong = ULong(data.toLong() and 0xFF)\n\n /**\n * Converts this [UByte] value to [Float].\n *\n * The resulting `Float` value represents the same numerical value as this `UByte`.\n */\n @kotlin.internal.InlineOnly\n public inline fun toFloat(): Float = this.toInt().toFloat()\n /**\n * Converts this [UByte] value to [Double].\n *\n * The resulting `Double` value represents the same numerical value as this `UByte`.\n */\n @kotlin.internal.InlineOnly\n public inline fun toDouble(): Double = this.toInt().toDouble()\n\n public override fun toString(): String = toInt().toString()\n\n}\n\n/**\n * Converts this [Byte] value to [UByte].\n *\n * If this value is positive, the resulting `UByte` value represents the same numerical value as this `Byte`.\n *\n * The resulting `UByte` value has the same binary representation as this `Byte` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Byte.toUByte(): UByte = UByte(this)\n/**\n * Converts this [Short] value to [UByte].\n *\n * If this value is positive and less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `Short`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `Short` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Short.toUByte(): UByte = UByte(this.toByte())\n/**\n * Converts this [Int] value to [UByte].\n *\n * If this value is positive and less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `Int`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `Int` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Int.toUByte(): UByte = UByte(this.toByte())\n/**\n * Converts this [Long] value to [UByte].\n *\n * If this value is positive and less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `Long`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `Long` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Long.toUByte(): UByte = UByte(this.toByte())\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin\n\nimport kotlin.experimental.*\n\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline class UInt @PublishedApi internal constructor(@PublishedApi internal val data: Int) : Comparable<UInt> {\n\n companion object {\n /**\n * A constant holding the minimum value an instance of UInt can have.\n */\n public const val MIN_VALUE: UInt = UInt(0)\n\n /**\n * A constant holding the maximum value an instance of UInt can have.\n */\n public const val MAX_VALUE: UInt = UInt(-1)\n\n /**\n * The number of bytes used to represent an instance of UInt in a binary form.\n */\n public const val SIZE_BYTES: Int = 4\n\n /**\n * The number of bits used to represent an instance of UInt in a binary form.\n */\n public const val SIZE_BITS: Int = 32\n }\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UByte): Int = this.compareTo(other.toUInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UShort): Int = this.compareTo(other.toUInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n @Suppress(\"OVERRIDE_BY_INLINE\")\n public override inline operator fun compareTo(other: UInt): Int = uintCompare(this.data, other.data)\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: ULong): Int = this.toULong().compareTo(other)\n\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UByte): UInt = this.plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UShort): UInt = this.plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UInt): UInt = UInt(this.data.plus(other.data))\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: ULong): ULong = this.toULong().plus(other)\n\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UByte): UInt = this.minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UShort): UInt = this.minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UInt): UInt = UInt(this.data.minus(other.data))\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: ULong): ULong = this.toULong().minus(other)\n\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UByte): UInt = this.times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UShort): UInt = this.times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UInt): UInt = UInt(this.data.times(other.data))\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: ULong): ULong = this.toULong().times(other)\n\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UByte): UInt = this.div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UShort): UInt = this.div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UInt): UInt = uintDivide(this, other)\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: ULong): ULong = this.toULong().div(other)\n\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UByte): UInt = this.rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UShort): UInt = this.rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UInt): UInt = uintRemainder(this, other)\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: ULong): ULong = this.toULong().rem(other)\n\n /** Increments this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun inc(): UInt = UInt(data.inc())\n /** Decrements this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun dec(): UInt = UInt(data.dec())\n\n /** Creates a range from this value to the specified [other] value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rangeTo(other: UInt): UIntRange = UIntRange(this, other)\n\n /**\n * Shifts this value left by the [bitCount] number of bits.\n *\n * Note that only the five lowest-order bits of the [bitCount] are used as the shift distance.\n * The shift distance actually used is therefore always in the range `0..31`.\n */\n @kotlin.internal.InlineOnly\n public inline infix fun shl(bitCount: Int): UInt = UInt(data shl bitCount)\n\n /**\n * Shifts this value right by the [bitCount] number of bits, filling the leftmost bits with zeros.\n *\n * Note that only the five lowest-order bits of the [bitCount] are used as the shift distance.\n * The shift distance actually used is therefore always in the range `0..31`.\n */\n @kotlin.internal.InlineOnly\n public inline infix fun shr(bitCount: Int): UInt = UInt(data ushr bitCount)\n\n /** Performs a bitwise AND operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun and(other: UInt): UInt = UInt(this.data and other.data)\n /** Performs a bitwise OR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun or(other: UInt): UInt = UInt(this.data or other.data)\n /** Performs a bitwise XOR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun xor(other: UInt): UInt = UInt(this.data xor other.data)\n /** Inverts the bits in this value. */\n @kotlin.internal.InlineOnly\n public inline fun inv(): UInt = UInt(data.inv())\n\n /**\n * Converts this [UInt] value to [Byte].\n *\n * If this value is less than or equals to [Byte.MAX_VALUE], the resulting `Byte` value represents\n * the same numerical value as this `UInt`.\n *\n * The resulting `Byte` value is represented by the least significant 8 bits of this `UInt` value.\n * Note that the resulting `Byte` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toByte(): Byte = data.toByte()\n /**\n * Converts this [UInt] value to [Short].\n *\n * If this value is less than or equals to [Short.MAX_VALUE], the resulting `Short` value represents\n * the same numerical value as this `UInt`.\n *\n * The resulting `Short` value is represented by the least significant 16 bits of this `UInt` value.\n * Note that the resulting `Short` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toShort(): Short = data.toShort()\n /**\n * Converts this [UInt] value to [Int].\n *\n * If this value is less than or equals to [Int.MAX_VALUE], the resulting `Int` value represents\n * the same numerical value as this `UInt`. Otherwise the result is negative.\n *\n * The resulting `Int` value has the same binary representation as this `UInt` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toInt(): Int = data\n /**\n * Converts this [UInt] value to [Long].\n *\n * The resulting `Long` value represents the same numerical value as this `UInt`.\n *\n * The least significant 32 bits of the resulting `Long` value are the same as the bits of this `UInt` value,\n * whereas the most significant 32 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toLong(): Long = data.toLong() and 0xFFFF_FFFF\n\n /**\n * Converts this [UInt] value to [UByte].\n *\n * If this value is less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `UInt`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `UInt` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUByte(): UByte = data.toUByte()\n /**\n * Converts this [UInt] value to [UShort].\n *\n * If this value is less than or equals to [UShort.MAX_VALUE], the resulting `UShort` value represents\n * the same numerical value as this `UInt`.\n *\n * The resulting `UShort` value is represented by the least significant 16 bits of this `UInt` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUShort(): UShort = data.toUShort()\n /** Returns this value. */\n @kotlin.internal.InlineOnly\n public inline fun toUInt(): UInt = this\n /**\n * Converts this [UInt] value to [ULong].\n *\n * The resulting `ULong` value represents the same numerical value as this `UInt`.\n *\n * The least significant 32 bits of the resulting `ULong` value are the same as the bits of this `UInt` value,\n * whereas the most significant 32 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toULong(): ULong = ULong(data.toLong() and 0xFFFF_FFFF)\n\n /**\n * Converts this [UInt] value to [Float].\n *\n * The resulting value is the closest `Float` to this `UInt` value.\n * In case when this `UInt` value is exactly between two `Float`s,\n * the one with zero at least significant bit of mantissa is selected.\n */\n @kotlin.internal.InlineOnly\n public inline fun toFloat(): Float = this.toDouble().toFloat()\n /**\n * Converts this [UInt] value to [Double].\n *\n * The resulting `Double` value represents the same numerical value as this `UInt`.\n */\n @kotlin.internal.InlineOnly\n public inline fun toDouble(): Double = uintToDouble(data)\n\n public override fun toString(): String = toLong().toString()\n\n}\n\n/**\n * Converts this [Byte] value to [UInt].\n *\n * If this value is positive, the resulting `UInt` value represents the same numerical value as this `Byte`.\n *\n * The least significant 8 bits of the resulting `UInt` value are the same as the bits of this `Byte` value,\n * whereas the most significant 24 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Byte.toUInt(): UInt = UInt(this.toInt())\n/**\n * Converts this [Short] value to [UInt].\n *\n * If this value is positive, the resulting `UInt` value represents the same numerical value as this `Short`.\n *\n * The least significant 16 bits of the resulting `UInt` value are the same as the bits of this `Short` value,\n * whereas the most significant 16 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Short.toUInt(): UInt = UInt(this.toInt())\n/**\n * Converts this [Int] value to [UInt].\n *\n * If this value is positive, the resulting `UInt` value represents the same numerical value as this `Int`.\n *\n * The resulting `UInt` value has the same binary representation as this `Int` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Int.toUInt(): UInt = UInt(this)\n/**\n * Converts this [Long] value to [UInt].\n *\n * If this value is positive and less than or equals to [UInt.MAX_VALUE], the resulting `UInt` value represents\n * the same numerical value as this `Long`.\n *\n * The resulting `UInt` value is represented by the least significant 32 bits of this `Long` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Long.toUInt(): UInt = UInt(this.toInt())\n\n/**\n * Converts this [Float] value to [UInt].\n *\n * The fractional part, if any, is rounded down towards zero.\n * Returns zero if this `Float` value is negative or `NaN`, [UInt.MAX_VALUE] if it's bigger than `UInt.MAX_VALUE`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Float.toUInt(): UInt = doubleToUInt(this.toDouble())\n/**\n * Converts this [Double] value to [UInt].\n *\n * The fractional part, if any, is rounded down towards zero.\n * Returns zero if this `Double` value is negative or `NaN`, [UInt.MAX_VALUE] if it's bigger than `UInt.MAX_VALUE`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Double.toUInt(): UInt = doubleToUInt(this)\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin\n\nimport kotlin.experimental.*\n\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline class UShort @PublishedApi internal constructor(@PublishedApi internal val data: Short) : Comparable<UShort> {\n\n companion object {\n /**\n * A constant holding the minimum value an instance of UShort can have.\n */\n public const val MIN_VALUE: UShort = UShort(0)\n\n /**\n * A constant holding the maximum value an instance of UShort can have.\n */\n public const val MAX_VALUE: UShort = UShort(-1)\n\n /**\n * The number of bytes used to represent an instance of UShort in a binary form.\n */\n public const val SIZE_BYTES: Int = 2\n\n /**\n * The number of bits used to represent an instance of UShort in a binary form.\n */\n public const val SIZE_BITS: Int = 16\n }\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UByte): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n @Suppress(\"OVERRIDE_BY_INLINE\")\n public override inline operator fun compareTo(other: UShort): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UInt): Int = this.toUInt().compareTo(other)\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: ULong): Int = this.toULong().compareTo(other)\n\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UByte): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UShort): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UInt): UInt = this.toUInt().plus(other)\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: ULong): ULong = this.toULong().plus(other)\n\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UByte): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UShort): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UInt): UInt = this.toUInt().minus(other)\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: ULong): ULong = this.toULong().minus(other)\n\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UByte): UInt = this.toUInt().times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UShort): UInt = this.toUInt().times(other.toUInt())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UInt): UInt = this.toUInt().times(other)\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: ULong): ULong = this.toULong().times(other)\n\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UByte): UInt = this.toUInt().div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UShort): UInt = this.toUInt().div(other.toUInt())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UInt): UInt = this.toUInt().div(other)\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: ULong): ULong = this.toULong().div(other)\n\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UByte): UInt = this.toUInt().rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UShort): UInt = this.toUInt().rem(other.toUInt())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UInt): UInt = this.toUInt().rem(other)\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: ULong): ULong = this.toULong().rem(other)\n\n /** Increments this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun inc(): UShort = UShort(data.inc())\n /** Decrements this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun dec(): UShort = UShort(data.dec())\n\n /** Creates a range from this value to the specified [other] value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rangeTo(other: UShort): UIntRange = UIntRange(this.toUInt(), other.toUInt())\n\n /** Performs a bitwise AND operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun and(other: UShort): UShort = UShort(this.data and other.data)\n /** Performs a bitwise OR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun or(other: UShort): UShort = UShort(this.data or other.data)\n /** Performs a bitwise XOR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun xor(other: UShort): UShort = UShort(this.data xor other.data)\n /** Inverts the bits in this value. */\n @kotlin.internal.InlineOnly\n public inline fun inv(): UShort = UShort(data.inv())\n\n /**\n * Converts this [UShort] value to [Byte].\n *\n * If this value is less than or equals to [Byte.MAX_VALUE], the resulting `Byte` value represents\n * the same numerical value as this `UShort`.\n *\n * The resulting `Byte` value is represented by the least significant 8 bits of this `UShort` value.\n * Note that the resulting `Byte` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toByte(): Byte = data.toByte()\n /**\n * Converts this [UShort] value to [Short].\n *\n * If this value is less than or equals to [Short.MAX_VALUE], the resulting `Short` value represents\n * the same numerical value as this `UShort`. Otherwise the result is negative.\n *\n * The resulting `Short` value has the same binary representation as this `UShort` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toShort(): Short = data\n /**\n * Converts this [UShort] value to [Int].\n *\n * The resulting `Int` value represents the same numerical value as this `UShort`.\n *\n * The least significant 16 bits of the resulting `Int` value are the same as the bits of this `UShort` value,\n * whereas the most significant 16 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toInt(): Int = data.toInt() and 0xFFFF\n /**\n * Converts this [UShort] value to [Long].\n *\n * The resulting `Long` value represents the same numerical value as this `UShort`.\n *\n * The least significant 16 bits of the resulting `Long` value are the same as the bits of this `UShort` value,\n * whereas the most significant 48 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toLong(): Long = data.toLong() and 0xFFFF\n\n /**\n * Converts this [UShort] value to [UByte].\n *\n * If this value is less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `UShort`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `UShort` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUByte(): UByte = data.toUByte()\n /** Returns this value. */\n @kotlin.internal.InlineOnly\n public inline fun toUShort(): UShort = this\n /**\n * Converts this [UShort] value to [UInt].\n *\n * The resulting `UInt` value represents the same numerical value as this `UShort`.\n *\n * The least significant 16 bits of the resulting `UInt` value are the same as the bits of this `UShort` value,\n * whereas the most significant 16 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUInt(): UInt = UInt(data.toInt() and 0xFFFF)\n /**\n * Converts this [UShort] value to [ULong].\n *\n * The resulting `ULong` value represents the same numerical value as this `UShort`.\n *\n * The least significant 16 bits of the resulting `ULong` value are the same as the bits of this `UShort` value,\n * whereas the most significant 48 bits are filled with zeros.\n */\n @kotlin.internal.InlineOnly\n public inline fun toULong(): ULong = ULong(data.toLong() and 0xFFFF)\n\n /**\n * Converts this [UShort] value to [Float].\n *\n * The resulting `Float` value represents the same numerical value as this `UShort`.\n */\n @kotlin.internal.InlineOnly\n public inline fun toFloat(): Float = this.toInt().toFloat()\n /**\n * Converts this [UShort] value to [Double].\n *\n * The resulting `Double` value represents the same numerical value as this `UShort`.\n */\n @kotlin.internal.InlineOnly\n public inline fun toDouble(): Double = this.toInt().toDouble()\n\n public override fun toString(): String = toInt().toString()\n\n}\n\n/**\n * Converts this [Byte] value to [UShort].\n *\n * If this value is positive, the resulting `UShort` value represents the same numerical value as this `Byte`.\n *\n * The least significant 8 bits of the resulting `UShort` value are the same as the bits of this `Byte` value,\n * whereas the most significant 8 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Byte.toUShort(): UShort = UShort(this.toShort())\n/**\n * Converts this [Short] value to [UShort].\n *\n * If this value is positive, the resulting `UShort` value represents the same numerical value as this `Short`.\n *\n * The resulting `UShort` value has the same binary representation as this `Short` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Short.toUShort(): UShort = UShort(this)\n/**\n * Converts this [Int] value to [UShort].\n *\n * If this value is positive and less than or equals to [UShort.MAX_VALUE], the resulting `UShort` value represents\n * the same numerical value as this `Int`.\n *\n * The resulting `UShort` value is represented by the least significant 16 bits of this `Int` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Int.toUShort(): UShort = UShort(this.toShort())\n/**\n * Converts this [Long] value to [UShort].\n *\n * If this value is positive and less than or equals to [UShort.MAX_VALUE], the resulting `UShort` value represents\n * the same numerical value as this `Long`.\n *\n * The resulting `UShort` value is represented by the least significant 16 bits of this `Long` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Long.toUShort(): UShort = UShort(this.toShort())\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.ranges\n\n/**\n * A range of values of type `Char`.\n */\npublic class CharRange(start: Char, endInclusive: Char) : CharProgression(start, endInclusive, 1), ClosedRange<Char> {\n override val start: Char get() = first\n override val endInclusive: Char get() = last\n\n override fun contains(value: Char): Boolean = first <= value && value <= last\n\n override fun isEmpty(): Boolean = first > last\n\n override fun equals(other: Any?): Boolean =\n other is CharRange && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * first.toInt() + last.toInt())\n\n override fun toString(): String = \"$first..$last\"\n\n companion object {\n /** An empty range of values of type Char. */\n public val EMPTY: CharRange = CharRange(1.toChar(), 0.toChar())\n }\n}\n\n/**\n * A range of values of type `Int`.\n */\npublic class IntRange(start: Int, endInclusive: Int) : IntProgression(start, endInclusive, 1), ClosedRange<Int> {\n override val start: Int get() = first\n override val endInclusive: Int get() = last\n\n override fun contains(value: Int): Boolean = first <= value && value <= last\n\n override fun isEmpty(): Boolean = first > last\n\n override fun equals(other: Any?): Boolean =\n other is IntRange && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * first + last)\n\n override fun toString(): String = \"$first..$last\"\n\n companion object {\n /** An empty range of values of type Int. */\n public val EMPTY: IntRange = IntRange(1, 0)\n }\n}\n\n/**\n * A range of values of type `Long`.\n */\npublic class LongRange(start: Long, endInclusive: Long) : LongProgression(start, endInclusive, 1), ClosedRange<Long> {\n override val start: Long get() = first\n override val endInclusive: Long get() = last\n\n override fun contains(value: Long): Boolean = first <= value && value <= last\n\n override fun isEmpty(): Boolean = first > last\n\n override fun equals(other: Any?): Boolean =\n other is LongRange && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (first xor (first ushr 32)) + (last xor (last ushr 32))).toInt()\n\n override fun toString(): String = \"$first..$last\"\n\n companion object {\n /** An empty range of values of type Long. */\n public val EMPTY: LongRange = LongRange(1, 0)\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n@file:OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n\npackage kotlin.collections\n\nimport kotlin.contracts.*\nimport kotlin.random.Random\n\ninternal object EmptyIterator : ListIterator<Nothing> {\n override fun hasNext(): Boolean = false\n override fun hasPrevious(): Boolean = false\n override fun nextIndex(): Int = 0\n override fun previousIndex(): Int = -1\n override fun next(): Nothing = throw NoSuchElementException()\n override fun previous(): Nothing = throw NoSuchElementException()\n}\n\ninternal object EmptyList : List<Nothing>, Serializable, RandomAccess {\n private const val serialVersionUID: Long = -7390468764508069838L\n\n override fun equals(other: Any?): Boolean = other is List<*> && other.isEmpty()\n override fun hashCode(): Int = 1\n override fun toString(): String = \"[]\"\n\n override val size: Int get() = 0\n override fun isEmpty(): Boolean = true\n override fun contains(element: Nothing): Boolean = false\n override fun containsAll(elements: Collection<Nothing>): Boolean = elements.isEmpty()\n\n override fun get(index: Int): Nothing = throw IndexOutOfBoundsException(\"Empty list doesn't contain element at index $index.\")\n override fun indexOf(element: Nothing): Int = -1\n override fun lastIndexOf(element: Nothing): Int = -1\n\n override fun iterator(): Iterator<Nothing> = EmptyIterator\n override fun listIterator(): ListIterator<Nothing> = EmptyIterator\n override fun listIterator(index: Int): ListIterator<Nothing> {\n if (index != 0) throw IndexOutOfBoundsException(\"Index: $index\")\n return EmptyIterator\n }\n\n override fun subList(fromIndex: Int, toIndex: Int): List<Nothing> {\n if (fromIndex == 0 && toIndex == 0) return this\n throw IndexOutOfBoundsException(\"fromIndex: $fromIndex, toIndex: $toIndex\")\n }\n\n private fun readResolve(): Any = EmptyList\n}\n\ninternal fun <T> Array<out T>.asCollection(): Collection<T> = ArrayAsCollection(this, isVarargs = false)\n\nprivate class ArrayAsCollection<T>(val values: Array<out T>, val isVarargs: Boolean) : Collection<T> {\n override val size: Int get() = values.size\n override fun isEmpty(): Boolean = values.isEmpty()\n override fun contains(element: T): Boolean = values.contains(element)\n override fun containsAll(elements: Collection<T>): Boolean = elements.all { contains(it) }\n override fun iterator(): Iterator<T> = values.iterator()\n // override hidden toArray implementation to prevent copying of values array\n public fun toArray(): Array<out Any?> = values.copyToArrayOfAny(isVarargs)\n}\n\n/**\n * Returns an empty read-only list. The returned list is serializable (JVM).\n * @sample samples.collections.Collections.Lists.emptyReadOnlyList\n */\npublic fun <T> emptyList(): List<T> = EmptyList\n\n/**\n * Returns a new read-only list of given elements. The returned list is serializable (JVM).\n * @sample samples.collections.Collections.Lists.readOnlyList\n */\npublic fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()\n\n/**\n * Returns an empty read-only list. The returned list is serializable (JVM).\n * @sample samples.collections.Collections.Lists.emptyReadOnlyList\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> listOf(): List<T> = emptyList()\n\n/**\n * Returns an empty new [MutableList].\n * @sample samples.collections.Collections.Lists.emptyMutableList\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> mutableListOf(): MutableList<T> = ArrayList()\n\n/**\n * Returns an empty new [ArrayList].\n * @sample samples.collections.Collections.Lists.emptyArrayList\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> arrayListOf(): ArrayList<T> = ArrayList()\n\n/**\n * Returns a new [MutableList] with the given elements.\n * @sample samples.collections.Collections.Lists.mutableList\n */\npublic fun <T> mutableListOf(vararg elements: T): MutableList<T> =\n if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))\n\n/**\n * Returns a new [ArrayList] with the given elements.\n * @sample samples.collections.Collections.Lists.arrayList\n */\npublic fun <T> arrayListOf(vararg elements: T): ArrayList<T> =\n if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))\n\n/**\n * Returns a new read-only list either of single given element, if it is not null, or empty list if the element is null. The returned list is serializable (JVM).\n * @sample samples.collections.Collections.Lists.listOfNotNull\n */\npublic fun <T : Any> listOfNotNull(element: T?): List<T> = if (element != null) listOf(element) else emptyList()\n\n/**\n * Returns a new read-only list only of those given elements, that are not null. The returned list is serializable (JVM).\n * @sample samples.collections.Collections.Lists.listOfNotNull\n */\npublic fun <T : Any> listOfNotNull(vararg elements: T?): List<T> = elements.filterNotNull()\n\n/**\n * Creates a new read-only list with the specified [size], where each element is calculated by calling the specified\n * [init] function.\n *\n * The function [init] is called for each list element sequentially starting from the first one.\n * It should return the value for a list element given its index.\n *\n * @sample samples.collections.Collections.Lists.readOnlyListFromInitializer\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> List(size: Int, init: (index: Int) -> T): List<T> = MutableList(size, init)\n\n/**\n * Creates a new mutable list with the specified [size], where each element is calculated by calling the specified\n * [init] function.\n *\n * The function [init] is called for each list element sequentially starting from the first one.\n * It should return the value for a list element given its index.\n *\n * @sample samples.collections.Collections.Lists.mutableListFromInitializer\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> MutableList(size: Int, init: (index: Int) -> T): MutableList<T> {\n val list = ArrayList<T>(size)\n repeat(size) { index -> list.add(init(index)) }\n return list\n}\n\n/**\n * Builds a new read-only [List] by populating a [MutableList] using the given [builderAction]\n * and returning a read-only list with the same elements.\n *\n * The list passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * @sample samples.collections.Builders.Lists.buildListSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <E> buildList(@BuilderInference builderAction: MutableList<E>.() -> Unit): List<E> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildListInternal(builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <E> buildListInternal(builderAction: MutableList<E>.() -> Unit): List<E>\n\n/**\n * Builds a new read-only [List] by populating a [MutableList] using the given [builderAction]\n * and returning a read-only list with the same elements.\n *\n * The list passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * [capacity] is used to hint the expected number of elements added in the [builderAction].\n *\n * @throws IllegalArgumentException if the given [capacity] is negative.\n *\n * @sample samples.collections.Builders.Lists.buildListSampleWithCapacity\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <E> buildList(capacity: Int, @BuilderInference builderAction: MutableList<E>.() -> Unit): List<E> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildListInternal(capacity, builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <E> buildListInternal(capacity: Int, builderAction: MutableList<E>.() -> Unit): List<E>\n\n/**\n * Returns an [IntRange] of the valid indices for this collection.\n * @sample samples.collections.Collections.Collections.indicesOfCollection\n */\npublic val Collection<*>.indices: IntRange\n get() = 0..size - 1\n\n/**\n * Returns the index of the last item in the list or -1 if the list is empty.\n *\n * @sample samples.collections.Collections.Lists.lastIndexOfList\n */\npublic val <T> List<T>.lastIndex: Int\n get() = this.size - 1\n\n/**\n * Returns `true` if the collection is not empty.\n * @sample samples.collections.Collections.Collections.collectionIsNotEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.isNotEmpty(): Boolean = !isEmpty()\n\n/**\n * Returns `true` if this nullable collection is either null or empty.\n * @sample samples.collections.Collections.Collections.collectionIsNullOrEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>?.isNullOrEmpty(): Boolean {\n contract {\n returns(false) implies (this@isNullOrEmpty != null)\n }\n\n return this == null || this.isEmpty()\n}\n\n/**\n * Returns this Collection if it's not `null` and the empty list otherwise.\n * @sample samples.collections.Collections.Collections.collectionOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>?.orEmpty(): Collection<T> = this ?: emptyList()\n\n/**\n * Returns this List if it's not `null` and the empty list otherwise.\n * @sample samples.collections.Collections.Lists.listOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>?.orEmpty(): List<T> = this ?: emptyList()\n\n/**\n * Returns this collection if it's not empty\n * or the result of calling [defaultValue] function if the collection is empty.\n *\n * @sample samples.collections.Collections.Collections.collectionIfEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : Collection<*>, C : R =\n if (isEmpty()) defaultValue() else this\n\n\n/**\n * Checks if all elements in the specified collection are contained in this collection.\n *\n * Allows to overcome type-safety restriction of `containsAll` that requires to pass a collection of type `Collection<E>`.\n * @sample samples.collections.Collections.Collections.collectionContainsAll\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> Collection<T>.containsAll(elements: Collection<T>): Boolean = this.containsAll(elements)\n\n\n/**\n * Returns a new list with the elements of this list randomly shuffled\n * using the specified [random] instance as the source of randomness.\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> Iterable<T>.shuffled(random: Random): List<T> = toMutableList().apply { shuffle(random) }\n\n\ninternal fun <T> List<T>.optimizeReadOnlyList() = when (size) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this\n}\n\n/**\n * Searches this list or its range for the provided [element] using the binary search algorithm.\n * The list is expected to be sorted into ascending order according to the Comparable natural ordering of its elements,\n * otherwise the result is undefined.\n *\n * If the list contains multiple elements equal to the specified [element], there is no guarantee which one will be found.\n *\n * `null` value is considered to be less than any non-null value.\n *\n * @return the index of the element, if it is contained in the list within the specified range;\n * otherwise, the inverted insertion point `(-insertion point - 1)`.\n * The insertion point is defined as the index at which the element should be inserted,\n * so that the list (or the specified subrange of list) still remains sorted.\n * @sample samples.collections.Collections.Lists.binarySearchOnComparable\n * @sample samples.collections.Collections.Lists.binarySearchWithBoundaries\n */\npublic fun <T : Comparable<T>> List<T?>.binarySearch(element: T?, fromIndex: Int = 0, toIndex: Int = size): Int {\n rangeCheck(size, fromIndex, toIndex)\n\n var low = fromIndex\n var high = toIndex - 1\n\n while (low <= high) {\n val mid = (low + high).ushr(1) // safe from overflows\n val midVal = get(mid)\n val cmp = compareValues(midVal, element)\n\n if (cmp < 0)\n low = mid + 1\n else if (cmp > 0)\n high = mid - 1\n else\n return mid // key found\n }\n return -(low + 1) // key not found\n}\n\n/**\n * Searches this list or its range for the provided [element] using the binary search algorithm.\n * The list is expected to be sorted into ascending order according to the specified [comparator],\n * otherwise the result is undefined.\n *\n * If the list contains multiple elements equal to the specified [element], there is no guarantee which one will be found.\n *\n * `null` value is considered to be less than any non-null value.\n *\n * @return the index of the element, if it is contained in the list within the specified range;\n * otherwise, the inverted insertion point `(-insertion point - 1)`.\n * The insertion point is defined as the index at which the element should be inserted,\n * so that the list (or the specified subrange of list) still remains sorted according to the specified [comparator].\n * @sample samples.collections.Collections.Lists.binarySearchWithComparator\n */\npublic fun <T> List<T>.binarySearch(element: T, comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size): Int {\n rangeCheck(size, fromIndex, toIndex)\n\n var low = fromIndex\n var high = toIndex - 1\n\n while (low <= high) {\n val mid = (low + high).ushr(1) // safe from overflows\n val midVal = get(mid)\n val cmp = comparator.compare(midVal, element)\n\n if (cmp < 0)\n low = mid + 1\n else if (cmp > 0)\n high = mid - 1\n else\n return mid // key found\n }\n return -(low + 1) // key not found\n}\n\n/**\n * Searches this list or its range for an element having the key returned by the specified [selector] function\n * equal to the provided [key] value using the binary search algorithm.\n * The list is expected to be sorted into ascending order according to the Comparable natural ordering of keys of its elements.\n * otherwise the result is undefined.\n *\n * If the list contains multiple elements with the specified [key], there is no guarantee which one will be found.\n *\n * `null` value is considered to be less than any non-null value.\n *\n * @return the index of the element with the specified [key], if it is contained in the list within the specified range;\n * otherwise, the inverted insertion point `(-insertion point - 1)`.\n * The insertion point is defined as the index at which the element should be inserted,\n * so that the list (or the specified subrange of list) still remains sorted.\n * @sample samples.collections.Collections.Lists.binarySearchByKey\n */\npublic inline fun <T, K : Comparable<K>> List<T>.binarySearchBy(\n key: K?,\n fromIndex: Int = 0,\n toIndex: Int = size,\n crossinline selector: (T) -> K?\n): Int =\n binarySearch(fromIndex, toIndex) { compareValues(selector(it), key) }\n\n// do not introduce this overload --- too rare\n//public fun <T, K> List<T>.binarySearchBy(key: K, comparator: Comparator<K>, fromIndex: Int = 0, toIndex: Int = size(), selector: (T) -> K): Int =\n// binarySearch(fromIndex, toIndex) { comparator.compare(selector(it), key) }\n\n\n/**\n * Searches this list or its range for an element for which the given [comparison] function returns zero using the binary search algorithm.\n *\n * The list is expected to be sorted so that the signs of the [comparison] function's return values ascend on the list elements,\n * i.e. negative values come before zero and zeroes come before positive values.\n * Otherwise, the result is undefined.\n *\n * If the list contains multiple elements for which [comparison] returns zero, there is no guarantee which one will be found.\n *\n * @param comparison function that returns zero when called on the list element being searched.\n * On the elements coming before the target element, the function must return negative values;\n * on the elements coming after the target element, the function must return positive values.\n *\n * @return the index of the found element, if it is contained in the list within the specified range;\n * otherwise, the inverted insertion point `(-insertion point - 1)`.\n * The insertion point is defined as the index at which the element should be inserted,\n * so that the list (or the specified subrange of list) still remains sorted.\n * @sample samples.collections.Collections.Lists.binarySearchWithComparisonFunction\n */\npublic fun <T> List<T>.binarySearch(fromIndex: Int = 0, toIndex: Int = size, comparison: (T) -> Int): Int {\n rangeCheck(size, fromIndex, toIndex)\n\n var low = fromIndex\n var high = toIndex - 1\n\n while (low <= high) {\n val mid = (low + high).ushr(1) // safe from overflows\n val midVal = get(mid)\n val cmp = comparison(midVal)\n\n if (cmp < 0)\n low = mid + 1\n else if (cmp > 0)\n high = mid - 1\n else\n return mid // key found\n }\n return -(low + 1) // key not found\n}\n\n/**\n * Checks that `from` and `to` are in\n * the range of [0..size] and throws an appropriate exception, if they aren't.\n */\nprivate fun rangeCheck(size: Int, fromIndex: Int, toIndex: Int) {\n when {\n fromIndex > toIndex -> throw IllegalArgumentException(\"fromIndex ($fromIndex) is greater than toIndex ($toIndex).\")\n fromIndex < 0 -> throw IndexOutOfBoundsException(\"fromIndex ($fromIndex) is less than zero.\")\n toIndex > size -> throw IndexOutOfBoundsException(\"toIndex ($toIndex) is greater than size ($size).\")\n }\n}\n\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal expect fun checkIndexOverflow(index: Int): Int\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal expect fun checkCountOverflow(count: Int): Int\n\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun throwIndexOverflow() { throw ArithmeticException(\"Index overflow has happened.\") }\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun throwCountOverflow() { throw ArithmeticException(\"Count overflow has happened.\") }\n\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"MapsKt\")\n@file:OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n\npackage kotlin.collections\n\nimport kotlin.contracts.*\n\nprivate object EmptyMap : Map<Any?, Nothing>, Serializable {\n private const val serialVersionUID: Long = 8246714829545688274\n\n override fun equals(other: Any?): Boolean = other is Map<*, *> && other.isEmpty()\n override fun hashCode(): Int = 0\n override fun toString(): String = \"{}\"\n\n override val size: Int get() = 0\n override fun isEmpty(): Boolean = true\n\n override fun containsKey(key: Any?): Boolean = false\n override fun containsValue(value: Nothing): Boolean = false\n override fun get(key: Any?): Nothing? = null\n override val entries: Set<Map.Entry<Any?, Nothing>> get() = EmptySet\n override val keys: Set<Any?> get() = EmptySet\n override val values: Collection<Nothing> get() = EmptyList\n\n private fun readResolve(): Any = EmptyMap\n}\n\n/**\n * Returns an empty read-only map of specified type.\n *\n * The returned map is serializable (JVM).\n * @sample samples.collections.Maps.Instantiation.emptyReadOnlyMap\n */\npublic fun <K, V> emptyMap(): Map<K, V> = @Suppress(\"UNCHECKED_CAST\") (EmptyMap as Map<K, V>)\n\n/**\n * Returns a new read-only map with the specified contents, given as a list of pairs\n * where the first value is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * The returned map is serializable (JVM).\n *\n * @sample samples.collections.Maps.Instantiation.mapFromPairs\n */\npublic fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> =\n if (pairs.size > 0) pairs.toMap(LinkedHashMap(mapCapacity(pairs.size))) else emptyMap()\n\n/**\n * Returns an empty read-only map.\n *\n * The returned map is serializable (JVM).\n * @sample samples.collections.Maps.Instantiation.emptyReadOnlyMap\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> mapOf(): Map<K, V> = emptyMap()\n\n/**\n * Returns an empty new [MutableMap].\n *\n * The returned map preserves the entry iteration order.\n * @sample samples.collections.Maps.Instantiation.emptyMutableMap\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> mutableMapOf(): MutableMap<K, V> = LinkedHashMap()\n\n/**\n * Returns a new [MutableMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * @sample samples.collections.Maps.Instantiation.mutableMapFromPairs\n * @sample samples.collections.Maps.Instantiation.emptyMutableMap\n */\npublic fun <K, V> mutableMapOf(vararg pairs: Pair<K, V>): MutableMap<K, V> =\n LinkedHashMap<K, V>(mapCapacity(pairs.size)).apply { putAll(pairs) }\n\n/**\n * Returns an empty new [HashMap].\n *\n * @sample samples.collections.Maps.Instantiation.emptyHashMap\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> hashMapOf(): HashMap<K, V> = HashMap<K, V>()\n\n/**\n * Returns a new [HashMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * @sample samples.collections.Maps.Instantiation.hashMapFromPairs\n */\npublic fun <K, V> hashMapOf(vararg pairs: Pair<K, V>): HashMap<K, V> = HashMap<K, V>(mapCapacity(pairs.size)).apply { putAll(pairs) }\n\n/**\n * Returns an empty new [LinkedHashMap].\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> linkedMapOf(): LinkedHashMap<K, V> = LinkedHashMap<K, V>()\n\n/**\n * Returns a new [LinkedHashMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * @sample samples.collections.Maps.Instantiation.linkedMapFromPairs\n */\npublic fun <K, V> linkedMapOf(vararg pairs: Pair<K, V>): LinkedHashMap<K, V> = pairs.toMap(LinkedHashMap(mapCapacity(pairs.size)))\n\n/**\n * Builds a new read-only [Map] by populating a [MutableMap] using the given [builderAction]\n * and returning a read-only map with the same key-value pairs.\n *\n * The map passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * Entries of the map are iterated in the order they were added by the [builderAction].\n *\n * @sample samples.collections.Builders.Maps.buildMapSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> buildMap(@BuilderInference builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildMapInternal(builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <K, V> buildMapInternal(builderAction: MutableMap<K, V>.() -> Unit): Map<K, V>\n\n/**\n * Builds a new read-only [Map] by populating a [MutableMap] using the given [builderAction]\n * and returning a read-only map with the same key-value pairs.\n *\n * The map passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * [capacity] is used to hint the expected number of pairs added in the [builderAction].\n *\n * Entries of the map are iterated in the order they were added by the [builderAction].\n *\n * @throws IllegalArgumentException if the given [capacity] is negative.\n *\n * @sample samples.collections.Builders.Maps.buildMapSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> buildMap(capacity: Int, @BuilderInference builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildMapInternal(capacity, builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <K, V> buildMapInternal(capacity: Int, builderAction: MutableMap<K, V>.() -> Unit): Map<K, V>\n\n/**\n * Calculate the initial capacity of a map.\n */\n@PublishedApi\ninternal expect fun mapCapacity(expectedSize: Int): Int\n\n/**\n * Returns `true` if this map is not empty.\n * @sample samples.collections.Maps.Usage.mapIsNotEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.isNotEmpty(): Boolean = !isEmpty()\n\n/**\n * Returns `true` if this nullable map is either null or empty.\n * @sample samples.collections.Maps.Usage.mapIsNullOrEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>?.isNullOrEmpty(): Boolean {\n contract {\n returns(false) implies (this@isNullOrEmpty != null)\n }\n\n return this == null || isEmpty()\n}\n\n/**\n * Returns the [Map] if its not `null`, or the empty [Map] otherwise.\n *\n * @sample samples.collections.Maps.Usage.mapOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<K, V>?.orEmpty(): Map<K, V> = this ?: emptyMap()\n\n/**\n * Returns this map if it's not empty\n * or the result of calling [defaultValue] function if the map is empty.\n *\n * @sample samples.collections.Maps.Usage.mapIfEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <M, R> M.ifEmpty(defaultValue: () -> R): R where M : Map<*, *>, M : R =\n if (isEmpty()) defaultValue() else this\n\n/**\n * Checks if the map contains the given key.\n *\n * This method allows to use the `x in map` syntax for checking whether an object is contained in the map.\n *\n * @sample samples.collections.Maps.Usage.containsKey\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <@kotlin.internal.OnlyInputTypes K, V> Map<out K, V>.contains(key: K): Boolean = containsKey(key)\n\n/**\n * Returns the value corresponding to the given [key], or `null` if such a key is not present in the map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <@kotlin.internal.OnlyInputTypes K, V> Map<out K, V>.get(key: K): V? =\n @Suppress(\"UNCHECKED_CAST\") (this as Map<K, V>).get(key)\n\n/**\n * Allows to use the index operator for storing values in a mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.set(key: K, value: V): Unit {\n put(key, value)\n}\n\n/**\n * Returns `true` if the map contains the specified [key].\n *\n * Allows to overcome type-safety restriction of `containsKey` that requires to pass a key of type `K`.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes K> Map<out K, *>.containsKey(key: K): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as Map<K, *>).containsKey(key)\n\n/**\n * Returns `true` if the map maps one or more keys to the specified [value].\n *\n * Allows to overcome type-safety restriction of `containsValue` that requires to pass a value of type `V`.\n *\n * @sample samples.collections.Maps.Usage.containsValue\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\n@kotlin.internal.InlineOnly\npublic inline fun <K, @kotlin.internal.OnlyInputTypes V> Map<K, V>.containsValue(value: V): Boolean = this.containsValue(value)\n\n\n/**\n * Removes the specified key and its corresponding value from this map.\n *\n * @return the previous value associated with the key, or `null` if the key was not present in the map.\n\n * Allows to overcome type-safety restriction of `remove` that requires to pass a key of type `K`.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes K, V> MutableMap<out K, V>.remove(key: K): V? =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableMap<K, V>).remove(key)\n\n/**\n * Returns the key component of the map entry.\n *\n * This method allows to use destructuring declarations when working with maps, for example:\n * ```\n * for ((key, value) in map) {\n * // do something with the key and the value\n * }\n * ```\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map.Entry<K, V>.component1(): K = key\n\n/**\n * Returns the value component of the map entry.\n *\n * This method allows to use destructuring declarations when working with maps, for example:\n * ```\n * for ((key, value) in map) {\n * // do something with the key and the value\n * }\n * ```\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map.Entry<K, V>.component2(): V = value\n\n/**\n * Converts entry to [Pair] with key being first component and value being second.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map.Entry<K, V>.toPair(): Pair<K, V> = Pair(key, value)\n\n/**\n * Returns the value for the given key, or the result of the [defaultValue] function if there was no entry for the given key.\n *\n * @sample samples.collections.Maps.Usage.getOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V = get(key) ?: defaultValue()\n\n\ninternal inline fun <K, V> Map<K, V>.getOrElseNullable(key: K, defaultValue: () -> V): V {\n val value = get(key)\n if (value == null && !containsKey(key)) {\n return defaultValue()\n } else {\n @Suppress(\"UNCHECKED_CAST\")\n return value as V\n }\n}\n\n/**\n * Returns the value for the given [key] or throws an exception if there is no such key in the map.\n *\n * If the map was created by [withDefault], resorts to its `defaultValue` provider function\n * instead of throwing an exception.\n *\n * @throws NoSuchElementException when the map doesn't contain a value for the specified key and\n * no implicit default value was provided for that map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)\n\n/**\n * Returns the value for the given key. If the key is not found in the map, calls the [defaultValue] function,\n * puts its result into the map under the given key and returns it.\n *\n * Note that the operation is not guaranteed to be atomic if the map is being modified concurrently.\n *\n * @sample samples.collections.Maps.Usage.getOrPut\n */\npublic inline fun <K, V> MutableMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {\n val value = get(key)\n return if (value == null) {\n val answer = defaultValue()\n put(key, answer)\n answer\n } else {\n value\n }\n}\n\n/**\n * Returns an [Iterator] over the entries in the [Map].\n *\n * @sample samples.collections.Maps.Usage.forOverEntries\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map<out K, V>.iterator(): Iterator<Map.Entry<K, V>> = entries.iterator()\n\n/**\n * Returns a [MutableIterator] over the mutable entries in the [MutableMap].\n *\n */\n@kotlin.jvm.JvmName(\"mutableIterator\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.iterator(): MutableIterator<MutableMap.MutableEntry<K, V>> = entries.iterator()\n\n/**\n * Populates the given [destination] map with entries having the keys of this map and the values obtained\n * by applying the [transform] function to each entry in this [Map].\n */\npublic inline fun <K, V, R, M : MutableMap<in K, in R>> Map<out K, V>.mapValuesTo(destination: M, transform: (Map.Entry<K, V>) -> R): M {\n return entries.associateByTo(destination, { it.key }, transform)\n}\n\n/**\n * Populates the given [destination] map with entries having the keys obtained\n * by applying the [transform] function to each entry in this [Map] and the values of this map.\n *\n * In case if any two entries are mapped to the equal keys, the value of the latter one will overwrite\n * the value associated with the former one.\n */\npublic inline fun <K, V, R, M : MutableMap<in R, in V>> Map<out K, V>.mapKeysTo(destination: M, transform: (Map.Entry<K, V>) -> R): M {\n return entries.associateByTo(destination, transform, { it.value })\n}\n\n/**\n * Puts all the given [pairs] into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Array<out Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Puts all the elements of the given collection into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Iterable<Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Puts all the elements of the given sequence into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Sequence<Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Returns a new map with entries having the keys of this map and the values obtained by applying the [transform]\n * function to each entry in this [Map].\n *\n * The returned map preserves the entry iteration order of the original map.\n *\n * @sample samples.collections.Maps.Transformations.mapValues\n */\npublic inline fun <K, V, R> Map<out K, V>.mapValues(transform: (Map.Entry<K, V>) -> R): Map<K, R> {\n return mapValuesTo(LinkedHashMap<K, R>(mapCapacity(size)), transform) // .optimizeReadOnlyMap()\n}\n\n/**\n * Returns a new Map with entries having the keys obtained by applying the [transform] function to each entry in this\n * [Map] and the values of this map.\n *\n * In case if any two entries are mapped to the equal keys, the value of the latter one will overwrite\n * the value associated with the former one.\n *\n * The returned map preserves the entry iteration order of the original map.\n *\n * @sample samples.collections.Maps.Transformations.mapKeys\n */\npublic inline fun <K, V, R> Map<out K, V>.mapKeys(transform: (Map.Entry<K, V>) -> R): Map<R, V> {\n return mapKeysTo(LinkedHashMap<R, V>(mapCapacity(size)), transform) // .optimizeReadOnlyMap()\n}\n\n/**\n * Returns a map containing all key-value pairs with keys matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterKeys\n */\npublic inline fun <K, V> Map<out K, V>.filterKeys(predicate: (K) -> Boolean): Map<K, V> {\n val result = LinkedHashMap<K, V>()\n for (entry in this) {\n if (predicate(entry.key)) {\n result.put(entry.key, entry.value)\n }\n }\n return result\n}\n\n/**\n * Returns a map containing all key-value pairs with values matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterValues\n */\npublic inline fun <K, V> Map<out K, V>.filterValues(predicate: (V) -> Boolean): Map<K, V> {\n val result = LinkedHashMap<K, V>()\n for (entry in this) {\n if (predicate(entry.value)) {\n result.put(entry.key, entry.value)\n }\n }\n return result\n}\n\n\n/**\n * Appends all entries matching the given [predicate] into the mutable map given as [destination] parameter.\n *\n * @return the destination map.\n * @sample samples.collections.Maps.Filtering.filterTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.filterTo(destination: M, predicate: (Map.Entry<K, V>) -> Boolean): M {\n for (element in this) {\n if (predicate(element)) {\n destination.put(element.key, element.value)\n }\n }\n return destination\n}\n\n/**\n * Returns a new map containing all key-value pairs matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filter\n */\npublic inline fun <K, V> Map<out K, V>.filter(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V> {\n return filterTo(LinkedHashMap<K, V>(), predicate)\n}\n\n/**\n * Appends all entries not matching the given [predicate] into the given [destination].\n *\n * @return the destination map.\n * @sample samples.collections.Maps.Filtering.filterNotTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.filterNotTo(destination: M, predicate: (Map.Entry<K, V>) -> Boolean): M {\n for (element in this) {\n if (!predicate(element)) {\n destination.put(element.key, element.value)\n }\n }\n return destination\n}\n\n/**\n * Returns a new map containing all key-value pairs not matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterNot\n */\npublic inline fun <K, V> Map<out K, V>.filterNot(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V> {\n return filterNotTo(LinkedHashMap<K, V>(), predicate)\n}\n\n/**\n * Returns a new map containing all key-value pairs from the given collection of pairs.\n *\n * The returned map preserves the entry iteration order of the original collection.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Iterable<Pair<K, V>>.toMap(): Map<K, V> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptyMap()\n 1 -> mapOf(if (this is List) this[0] else iterator().next())\n else -> toMap(LinkedHashMap<K, V>(mapCapacity(size)))\n }\n }\n return toMap(LinkedHashMap<K, V>()).optimizeReadOnlyMap()\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given collection of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Iterable<Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new map containing all key-value pairs from the given array of pairs.\n *\n * The returned map preserves the entry iteration order of the original array.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Array<out Pair<K, V>>.toMap(): Map<K, V> = when (size) {\n 0 -> emptyMap()\n 1 -> mapOf(this[0])\n else -> toMap(LinkedHashMap<K, V>(mapCapacity(size)))\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given array of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Array<out Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new map containing all key-value pairs from the given sequence of pairs.\n *\n * The returned map preserves the entry iteration order of the original sequence.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Sequence<Pair<K, V>>.toMap(): Map<K, V> = toMap(LinkedHashMap<K, V>()).optimizeReadOnlyMap()\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given sequence of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Sequence<Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new read-only map containing all key-value pairs from the original map.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<out K, V>.toMap(): Map<K, V> = when (size) {\n 0 -> emptyMap()\n 1 -> toSingletonMap()\n else -> toMutableMap()\n}\n\n/**\n * Returns a new mutable map containing all key-value pairs from the original map.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<out K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this)\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Creates a new read-only map by replacing or adding an entry to this map from a given key-value [pair].\n *\n * The returned map preserves the entry iteration order of the original map.\n * The [pair] is iterated in the end if it has a unique key.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V> =\n if (this.isEmpty()) mapOf(pair) else LinkedHashMap(this).apply { put(pair.first, pair.second) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given collection of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] collection.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Iterable<Pair<K, V>>): Map<K, V> =\n if (this.isEmpty()) pairs.toMap() else LinkedHashMap(this).apply { putAll(pairs) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given array of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] array.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Array<out Pair<K, V>>): Map<K, V> =\n if (this.isEmpty()) pairs.toMap() else LinkedHashMap(this).apply { putAll(pairs) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given sequence of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] sequence.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Sequence<Pair<K, V>>): Map<K, V> =\n LinkedHashMap(this).apply { putAll(pairs) }.optimizeReadOnlyMap()\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from another [map].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those entries of another [map] that are missing in this map are iterated in the end in the order of that [map].\n */\npublic operator fun <K, V> Map<out K, V>.plus(map: Map<out K, V>): Map<K, V> =\n LinkedHashMap(this).apply { putAll(map) }\n\n\n/**\n * Appends or replaces the given [pair] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pair: Pair<K, V>) {\n put(pair.first, pair.second)\n}\n\n/**\n * Appends or replaces all pairs from the given collection of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Iterable<Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all pairs from the given array of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Array<out Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all pairs from the given sequence of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Sequence<Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all entries from the given [map] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(map: Map<K, V>) {\n putAll(map)\n}\n\n/**\n * Returns a map containing all entries of the original map except the entry with the given [key].\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(key: K): Map<K, V> =\n this.toMutableMap().apply { minusAssign(key) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] collection.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Iterable<K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] array.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Array<out K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] sequence.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Sequence<K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Removes the entry with the given [key] from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(key: K) {\n remove(key)\n}\n\n/**\n * Removes all entries the keys of which are contained in the given [keys] collection from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Iterable<K>) {\n this.keys.removeAll(keys)\n}\n\n/**\n * Removes all entries the keys of which are contained in the given [keys] array from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Array<out K>) {\n this.keys.removeAll(keys)\n}\n\n/**\n * Removes all entries from the keys of which are contained in the given [keys] sequence from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Sequence<K>) {\n this.keys.removeAll(keys)\n}\n\n\n// do not expose for now @PublishedApi\ninternal fun <K, V> Map<K, V>.optimizeReadOnlyMap() = when (size) {\n 0 -> emptyMap()\n 1 -> toSingletonMapOrSelf()\n else -> this\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"SetsKt\")\n@file:OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n\npackage kotlin.collections\n\nimport kotlin.contracts.*\n\ninternal object EmptySet : Set<Nothing>, Serializable {\n private const val serialVersionUID: Long = 3406603774387020532\n\n override fun equals(other: Any?): Boolean = other is Set<*> && other.isEmpty()\n override fun hashCode(): Int = 0\n override fun toString(): String = \"[]\"\n\n override val size: Int get() = 0\n override fun isEmpty(): Boolean = true\n override fun contains(element: Nothing): Boolean = false\n override fun containsAll(elements: Collection<Nothing>): Boolean = elements.isEmpty()\n\n override fun iterator(): Iterator<Nothing> = EmptyIterator\n\n private fun readResolve(): Any = EmptySet\n}\n\n\n/**\n * Returns an empty read-only set. The returned set is serializable (JVM).\n * @sample samples.collections.Collections.Sets.emptyReadOnlySet\n */\npublic fun <T> emptySet(): Set<T> = EmptySet\n\n/**\n * Returns a new read-only set with the given elements.\n * Elements of the set are iterated in the order they were specified.\n * The returned set is serializable (JVM).\n * @sample samples.collections.Collections.Sets.readOnlySet\n */\npublic fun <T> setOf(vararg elements: T): Set<T> = if (elements.size > 0) elements.toSet() else emptySet()\n\n/**\n * Returns an empty read-only set. The returned set is serializable (JVM).\n * @sample samples.collections.Collections.Sets.emptyReadOnlySet\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> setOf(): Set<T> = emptySet()\n\n/**\n * Returns an empty new [MutableSet].\n *\n * The returned set preserves the element iteration order.\n * @sample samples.collections.Collections.Sets.emptyMutableSet\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> mutableSetOf(): MutableSet<T> = LinkedHashSet()\n\n/**\n * Returns a new [MutableSet] with the given elements.\n * Elements of the set are iterated in the order they were specified.\n * @sample samples.collections.Collections.Sets.mutableSet\n */\npublic fun <T> mutableSetOf(vararg elements: T): MutableSet<T> = elements.toCollection(LinkedHashSet(mapCapacity(elements.size)))\n\n/** Returns an empty new [HashSet]. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> hashSetOf(): HashSet<T> = HashSet()\n\n/** Returns a new [HashSet] with the given elements. */\npublic fun <T> hashSetOf(vararg elements: T): HashSet<T> = elements.toCollection(HashSet(mapCapacity(elements.size)))\n\n/**\n * Returns an empty new [LinkedHashSet].\n * @sample samples.collections.Collections.Sets.emptyLinkedHashSet\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> linkedSetOf(): LinkedHashSet<T> = LinkedHashSet()\n\n/**\n * Returns a new [LinkedHashSet] with the given elements.\n * Elements of the set are iterated in the order they were specified.\n * @sample samples.collections.Collections.Sets.linkedHashSet\n */\npublic fun <T> linkedSetOf(vararg elements: T): LinkedHashSet<T> = elements.toCollection(LinkedHashSet(mapCapacity(elements.size)))\n\n/**\n * Returns a new read-only set either with single given element, if it is not null, or empty set if the element is null.\n * The returned set is serializable (JVM).\n * @sample samples.collections.Collections.Sets.setOfNotNull\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Any> setOfNotNull(element: T?): Set<T> = if (element != null) setOf(element) else emptySet()\n\n/**\n * Returns a new read-only set only with those given elements, that are not null.\n * Elements of the set are iterated in the order they were specified.\n * The returned set is serializable (JVM).\n * @sample samples.collections.Collections.Sets.setOfNotNull\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Any> setOfNotNull(vararg elements: T?): Set<T> {\n return elements.filterNotNullTo(LinkedHashSet())\n}\n\n/**\n * Builds a new read-only [Set] by populating a [MutableSet] using the given [builderAction]\n * and returning a read-only set with the same elements.\n *\n * The set passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * Elements of the set are iterated in the order they were added by the [builderAction].\n *\n * @sample samples.collections.Builders.Sets.buildSetSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <E> buildSet(@BuilderInference builderAction: MutableSet<E>.() -> Unit): Set<E> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildSetInternal(builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <E> buildSetInternal(builderAction: MutableSet<E>.() -> Unit): Set<E>\n\n/**\n * Builds a new read-only [Set] by populating a [MutableSet] using the given [builderAction]\n * and returning a read-only set with the same elements.\n *\n * The set passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * [capacity] is used to hint the expected number of elements added in the [builderAction].\n *\n * Elements of the set are iterated in the order they were added by the [builderAction].\n *\n * @throws IllegalArgumentException if the given [capacity] is negative.\n *\n * @sample samples.collections.Builders.Sets.buildSetSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <E> buildSet(capacity: Int, @BuilderInference builderAction: MutableSet<E>.() -> Unit): Set<E> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildSetInternal(capacity, builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <E> buildSetInternal(capacity: Int, builderAction: MutableSet<E>.() -> Unit): Set<E>\n\n\n/** Returns this Set if it's not `null` and the empty set otherwise. */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Set<T>?.orEmpty(): Set<T> = this ?: emptySet()\n\ninternal fun <T> Set<T>.optimizeReadOnlySet() = when (size) {\n 0 -> emptySet()\n 1 -> setOf(iterator().next())\n else -> this\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n@file:Suppress(\"PLATFORM_CLASS_MAPPED_TO_KOTLIN\")\n\npackage kotlin.text\n\n/**\n * Parses the string as a signed [Byte] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toByteOrNull(): Byte? = toByteOrNull(radix = 10)\n\n/**\n * Parses the string as a signed [Byte] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toByteOrNull(radix: Int): Byte? {\n val int = this.toIntOrNull(radix) ?: return null\n if (int < Byte.MIN_VALUE || int > Byte.MAX_VALUE) return null\n return int.toByte()\n}\n\n/**\n * Parses the string as a [Short] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toShortOrNull(): Short? = toShortOrNull(radix = 10)\n\n/**\n * Parses the string as a [Short] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toShortOrNull(radix: Int): Short? {\n val int = this.toIntOrNull(radix) ?: return null\n if (int < Short.MIN_VALUE || int > Short.MAX_VALUE) return null\n return int.toShort()\n}\n\n/**\n * Parses the string as an [Int] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toIntOrNull(): Int? = toIntOrNull(radix = 10)\n\n/**\n * Parses the string as an [Int] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toIntOrNull(radix: Int): Int? {\n checkRadix(radix)\n\n val length = this.length\n if (length == 0) return null\n\n val start: Int\n val isNegative: Boolean\n val limit: Int\n\n val firstChar = this[0]\n if (firstChar < '0') { // Possible leading sign\n if (length == 1) return null // non-digit (possible sign) only, no digits after\n\n start = 1\n\n if (firstChar == '-') {\n isNegative = true\n limit = Int.MIN_VALUE\n } else if (firstChar == '+') {\n isNegative = false\n limit = -Int.MAX_VALUE\n } else\n return null\n } else {\n start = 0\n isNegative = false\n limit = -Int.MAX_VALUE\n }\n\n\n val limitForMaxRadix = (-Int.MAX_VALUE) / 36\n\n var limitBeforeMul = limitForMaxRadix\n var result = 0\n for (i in start until length) {\n val digit = digitOf(this[i], radix)\n\n if (digit < 0) return null\n if (result < limitBeforeMul) {\n if (limitBeforeMul == limitForMaxRadix) {\n limitBeforeMul = limit / radix\n\n if (result < limitBeforeMul) {\n return null\n }\n } else {\n return null\n }\n }\n\n result *= radix\n\n if (result < limit + digit) return null\n\n result -= digit\n }\n\n return if (isNegative) result else -result\n}\n\n/**\n * Parses the string as a [Long] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toLongOrNull(): Long? = toLongOrNull(radix = 10)\n\n/**\n * Parses the string as a [Long] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.1\")\npublic fun String.toLongOrNull(radix: Int): Long? {\n checkRadix(radix)\n\n val length = this.length\n if (length == 0) return null\n\n val start: Int\n val isNegative: Boolean\n val limit: Long\n\n val firstChar = this[0]\n if (firstChar < '0') { // Possible leading sign\n if (length == 1) return null // non-digit (possible sign) only, no digits after\n\n start = 1\n\n if (firstChar == '-') {\n isNegative = true\n limit = Long.MIN_VALUE\n } else if (firstChar == '+') {\n isNegative = false\n limit = -Long.MAX_VALUE\n } else\n return null\n } else {\n start = 0\n isNegative = false\n limit = -Long.MAX_VALUE\n }\n\n\n val limitForMaxRadix = (-Long.MAX_VALUE) / 36\n\n var limitBeforeMul = limitForMaxRadix\n var result = 0L\n for (i in start until length) {\n val digit = digitOf(this[i], radix)\n\n if (digit < 0) return null\n if (result < limitBeforeMul) {\n if (limitBeforeMul == limitForMaxRadix) {\n limitBeforeMul = limit / radix\n\n if (result < limitBeforeMul) {\n return null\n }\n } else {\n return null\n }\n }\n\n result *= radix\n\n if (result < limit + digit) return null\n\n result -= digit\n }\n\n return if (isNegative) result else -result\n}\n\n\ninternal fun numberFormatError(input: String): Nothing = throw NumberFormatException(\"Invalid number format: '$input'\")\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n@file:kotlin.jvm.JvmName(\"UnsignedKt\")\n@file:OptIn(ExperimentalUnsignedTypes::class)\npackage kotlin\n\n@PublishedApi\ninternal fun uintCompare(v1: Int, v2: Int): Int = (v1 xor Int.MIN_VALUE).compareTo(v2 xor Int.MIN_VALUE)\n@PublishedApi\ninternal fun ulongCompare(v1: Long, v2: Long): Int = (v1 xor Long.MIN_VALUE).compareTo(v2 xor Long.MIN_VALUE)\n\n@PublishedApi\ninternal fun uintDivide(v1: UInt, v2: UInt): UInt = (v1.toLong() / v2.toLong()).toUInt()\n@PublishedApi\ninternal fun uintRemainder(v1: UInt, v2: UInt): UInt = (v1.toLong() % v2.toLong()).toUInt()\n\n// Division and remainder are based on Guava's UnsignedLongs implementation\n// Copyright 2011 The Guava Authors\n\n@PublishedApi\ninternal fun ulongDivide(v1: ULong, v2: ULong): ULong {\n val dividend = v1.toLong()\n val divisor = v2.toLong()\n if (divisor < 0) { // i.e., divisor >= 2^63:\n return if (v1 < v2) ULong(0) else ULong(1)\n }\n\n // Optimization - use signed division if both dividend and divisor < 2^63\n if (dividend >= 0) {\n return ULong(dividend / divisor)\n }\n\n // Otherwise, approximate the quotient, check, and correct if necessary.\n val quotient = ((dividend ushr 1) / divisor) shl 1\n val rem = dividend - quotient * divisor\n return ULong(quotient + if (ULong(rem) >= ULong(divisor)) 1 else 0)\n\n}\n\n@PublishedApi\ninternal fun ulongRemainder(v1: ULong, v2: ULong): ULong {\n val dividend = v1.toLong()\n val divisor = v2.toLong()\n if (divisor < 0) { // i.e., divisor >= 2^63:\n return if (v1 < v2) {\n v1 // dividend < divisor\n } else {\n v1 - v2 // dividend >= divisor\n }\n }\n\n // Optimization - use signed modulus if both dividend and divisor < 2^63\n if (dividend >= 0) {\n return ULong(dividend % divisor)\n }\n\n // Otherwise, approximate the quotient, check, and correct if necessary.\n val quotient = ((dividend ushr 1) / divisor) shl 1\n val rem = dividend - quotient * divisor\n return ULong(rem - if (ULong(rem) >= ULong(divisor)) divisor else 0)\n}\n\n@PublishedApi\ninternal fun doubleToUInt(v: Double): UInt = when {\n v.isNaN() -> 0u\n v <= UInt.MIN_VALUE.toDouble() -> UInt.MIN_VALUE\n v >= UInt.MAX_VALUE.toDouble() -> UInt.MAX_VALUE\n v <= Int.MAX_VALUE -> v.toInt().toUInt()\n else -> (v - Int.MAX_VALUE).toInt().toUInt() + Int.MAX_VALUE.toUInt() // Int.MAX_VALUE < v < UInt.MAX_VALUE\n}\n\n@PublishedApi\ninternal fun doubleToULong(v: Double): ULong = when {\n v.isNaN() -> 0u\n v <= ULong.MIN_VALUE.toDouble() -> ULong.MIN_VALUE\n v >= ULong.MAX_VALUE.toDouble() -> ULong.MAX_VALUE\n v < Long.MAX_VALUE -> v.toLong().toULong()\n\n // Real values from Long.MAX_VALUE to (Long.MAX_VALUE + 1) are not representable in Double, so don't handle them.\n else -> (v - 9223372036854775808.0).toLong().toULong() + 9223372036854775808uL // Long.MAX_VALUE + 1 < v < ULong.MAX_VALUE\n}\n\n\n@PublishedApi\ninternal fun uintToDouble(v: Int): Double = (v and Int.MAX_VALUE).toDouble() + (v ushr 31 shl 30).toDouble() * 2\n\n@PublishedApi\ninternal fun ulongToDouble(v: Long): Double = (v ushr 11).toDouble() * 2048 + (v and 2047)\n\n\ninternal fun ulongToString(v: Long): String = ulongToString(v, 10)\n\ninternal fun ulongToString(v: Long, base: Int): String {\n if (v >= 0) return v.toString(base)\n\n var quotient = ((v ushr 1) / base) shl 1\n var rem = v - quotient * base\n if (rem >= base) {\n rem -= base\n quotient += 1\n }\n return quotient.toString(base) + rem.toString(base)\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"SequencesKt\")\n\npackage kotlin.sequences\n\nimport kotlin.random.Random\n\n/**\n * Given an [iterator] function constructs a [Sequence] that returns values through the [Iterator]\n * provided by that function.\n * The values are evaluated lazily, and the sequence is potentially infinite.\n *\n * @sample samples.collections.Sequences.Building.sequenceFromIterator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence(crossinline iterator: () -> Iterator<T>): Sequence<T> = object : Sequence<T> {\n override fun iterator(): Iterator<T> = iterator()\n}\n\n/**\n * Creates a sequence that returns all elements from this iterator. The sequence is constrained to be iterated only once.\n *\n * @sample samples.collections.Sequences.Building.sequenceFromIterator\n */\npublic fun <T> Iterator<T>.asSequence(): Sequence<T> = Sequence { this }.constrainOnce()\n\n/**\n * Creates a sequence that returns the specified values.\n *\n * @sample samples.collections.Sequences.Building.sequenceOfValues\n */\npublic fun <T> sequenceOf(vararg elements: T): Sequence<T> = if (elements.isEmpty()) emptySequence() else elements.asSequence()\n\n/**\n * Returns an empty sequence.\n */\npublic fun <T> emptySequence(): Sequence<T> = EmptySequence\n\nprivate object EmptySequence : Sequence<Nothing>, DropTakeSequence<Nothing> {\n override fun iterator(): Iterator<Nothing> = EmptyIterator\n override fun drop(n: Int) = EmptySequence\n override fun take(n: Int) = EmptySequence\n}\n\n/**\n * Returns this sequence if it's not `null` and the empty sequence otherwise.\n * @sample samples.collections.Sequences.Usage.sequenceOrEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>?.orEmpty(): Sequence<T> = this ?: emptySequence()\n\n\n/**\n * Returns a sequence that iterates through the elements either of this sequence\n * or, if this sequence turns out to be empty, of the sequence returned by [defaultValue] function.\n *\n * @sample samples.collections.Sequences.Usage.sequenceIfEmpty\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> Sequence<T>.ifEmpty(defaultValue: () -> Sequence<T>): Sequence<T> = sequence {\n val iterator = this@ifEmpty.iterator()\n if (iterator.hasNext()) {\n yieldAll(iterator)\n } else {\n yieldAll(defaultValue())\n }\n}\n\n/**\n * Returns a sequence of all elements from all sequences in this sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n *\n * @sample samples.collections.Sequences.Transformations.flattenSequenceOfSequences\n */\npublic fun <T> Sequence<Sequence<T>>.flatten(): Sequence<T> = flatten { it.iterator() }\n\n/**\n * Returns a sequence of all elements from all iterables in this sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n *\n * @sample samples.collections.Sequences.Transformations.flattenSequenceOfLists\n */\n@kotlin.jvm.JvmName(\"flattenSequenceOfIterable\")\npublic fun <T> Sequence<Iterable<T>>.flatten(): Sequence<T> = flatten { it.iterator() }\n\nprivate fun <T, R> Sequence<T>.flatten(iterator: (T) -> Iterator<R>): Sequence<R> {\n if (this is TransformingSequence<*, *>) {\n return (this as TransformingSequence<*, T>).flatten(iterator)\n }\n return FlatteningSequence(this, { it }, iterator)\n}\n\n/**\n * Returns a pair of lists, where\n * *first* list is built from the first values of each pair from this sequence,\n * *second* list is built from the second values of each pair from this sequence.\n *\n * The operation is _terminal_.\n *\n * @sample samples.collections.Sequences.Transformations.unzip\n */\npublic fun <T, R> Sequence<Pair<T, R>>.unzip(): Pair<List<T>, List<R>> {\n val listT = ArrayList<T>()\n val listR = ArrayList<R>()\n for (pair in this) {\n listT.add(pair.first)\n listR.add(pair.second)\n }\n return listT to listR\n}\n\n/**\n * Returns a sequence that yields elements of this sequence randomly shuffled.\n *\n * Note that every iteration of the sequence returns elements in a different order.\n *\n * The operation is _intermediate_ and _stateful_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Sequence<T>.shuffled(): Sequence<T> = shuffled(Random)\n\n/**\n * Returns a sequence that yields elements of this sequence randomly shuffled\n * using the specified [random] instance as the source of randomness.\n *\n * Note that every iteration of the sequence returns elements in a different order.\n *\n * The operation is _intermediate_ and _stateful_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Sequence<T>.shuffled(random: Random): Sequence<T> = sequence<T> {\n val buffer = toMutableList()\n while (buffer.isNotEmpty()) {\n val j = random.nextInt(buffer.size)\n val last = @OptIn(ExperimentalStdlibApi::class) buffer.removeLast()\n val value = if (j < buffer.size) buffer.set(j, last) else last\n yield(value)\n }\n}\n\n\n/**\n * A sequence that returns the values from the underlying [sequence] that either match or do not match\n * the specified [predicate].\n *\n * @param sendWhen If `true`, values for which the predicate returns `true` are returned. Otherwise,\n * values for which the predicate returns `false` are returned\n */\ninternal class FilteringSequence<T>(\n private val sequence: Sequence<T>,\n private val sendWhen: Boolean = true,\n private val predicate: (T) -> Boolean\n) : Sequence<T> {\n\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n val iterator = sequence.iterator()\n var nextState: Int = -1 // -1 for unknown, 0 for done, 1 for continue\n var nextItem: T? = null\n\n private fun calcNext() {\n while (iterator.hasNext()) {\n val item = iterator.next()\n if (predicate(item) == sendWhen) {\n nextItem = item\n nextState = 1\n return\n }\n }\n nextState = 0\n }\n\n override fun next(): T {\n if (nextState == -1)\n calcNext()\n if (nextState == 0)\n throw NoSuchElementException()\n val result = nextItem\n nextItem = null\n nextState = -1\n @Suppress(\"UNCHECKED_CAST\")\n return result as T\n }\n\n override fun hasNext(): Boolean {\n if (nextState == -1)\n calcNext()\n return nextState == 1\n }\n }\n}\n\n/**\n * A sequence which returns the results of applying the given [transformer] function to the values\n * in the underlying [sequence].\n */\n\ninternal class TransformingSequence<T, R>\nconstructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {\n override fun iterator(): Iterator<R> = object : Iterator<R> {\n val iterator = sequence.iterator()\n override fun next(): R {\n return transformer(iterator.next())\n }\n\n override fun hasNext(): Boolean {\n return iterator.hasNext()\n }\n }\n\n internal fun <E> flatten(iterator: (R) -> Iterator<E>): Sequence<E> {\n return FlatteningSequence<T, R, E>(sequence, transformer, iterator)\n }\n}\n\n/**\n * A sequence which returns the results of applying the given [transformer] function to the values\n * in the underlying [sequence], where the transformer function takes the index of the value in the underlying\n * sequence along with the value itself.\n */\ninternal class TransformingIndexedSequence<T, R>\nconstructor(private val sequence: Sequence<T>, private val transformer: (Int, T) -> R) : Sequence<R> {\n override fun iterator(): Iterator<R> = object : Iterator<R> {\n val iterator = sequence.iterator()\n var index = 0\n override fun next(): R {\n return transformer(checkIndexOverflow(index++), iterator.next())\n }\n\n override fun hasNext(): Boolean {\n return iterator.hasNext()\n }\n }\n}\n\n/**\n * A sequence which combines values from the underlying [sequence] with their indices and returns them as\n * [IndexedValue] objects.\n */\ninternal class IndexingSequence<T>\nconstructor(private val sequence: Sequence<T>) : Sequence<IndexedValue<T>> {\n override fun iterator(): Iterator<IndexedValue<T>> = object : Iterator<IndexedValue<T>> {\n val iterator = sequence.iterator()\n var index = 0\n override fun next(): IndexedValue<T> {\n return IndexedValue(checkIndexOverflow(index++), iterator.next())\n }\n\n override fun hasNext(): Boolean {\n return iterator.hasNext()\n }\n }\n}\n\n/**\n * A sequence which takes the values from two parallel underlying sequences, passes them to the given\n * [transform] function and returns the values returned by that function. The sequence stops returning\n * values as soon as one of the underlying sequences stops returning values.\n */\ninternal class MergingSequence<T1, T2, V>\nconstructor(\n private val sequence1: Sequence<T1>,\n private val sequence2: Sequence<T2>,\n private val transform: (T1, T2) -> V\n) : Sequence<V> {\n override fun iterator(): Iterator<V> = object : Iterator<V> {\n val iterator1 = sequence1.iterator()\n val iterator2 = sequence2.iterator()\n override fun next(): V {\n return transform(iterator1.next(), iterator2.next())\n }\n\n override fun hasNext(): Boolean {\n return iterator1.hasNext() && iterator2.hasNext()\n }\n }\n}\n\ninternal class FlatteningSequence<T, R, E>\nconstructor(\n private val sequence: Sequence<T>,\n private val transformer: (T) -> R,\n private val iterator: (R) -> Iterator<E>\n) : Sequence<E> {\n override fun iterator(): Iterator<E> = object : Iterator<E> {\n val iterator = sequence.iterator()\n var itemIterator: Iterator<E>? = null\n\n override fun next(): E {\n if (!ensureItemIterator())\n throw NoSuchElementException()\n return itemIterator!!.next()\n }\n\n override fun hasNext(): Boolean {\n return ensureItemIterator()\n }\n\n private fun ensureItemIterator(): Boolean {\n if (itemIterator?.hasNext() == false)\n itemIterator = null\n\n while (itemIterator == null) {\n if (!iterator.hasNext()) {\n return false\n } else {\n val element = iterator.next()\n val nextItemIterator = iterator(transformer(element))\n if (nextItemIterator.hasNext()) {\n itemIterator = nextItemIterator\n return true\n }\n }\n }\n return true\n }\n }\n}\n\ninternal fun <T, C, R> flatMapIndexed(source: Sequence<T>, transform: (Int, T) -> C, iterator: (C) -> Iterator<R>): Sequence<R> =\n sequence {\n var index = 0\n for (element in source) {\n val result = transform(checkIndexOverflow(index++), element)\n yieldAll(iterator(result))\n }\n }\n\n/**\n * A sequence that supports drop(n) and take(n) operations\n */\ninternal interface DropTakeSequence<T> : Sequence<T> {\n fun drop(n: Int): Sequence<T>\n fun take(n: Int): Sequence<T>\n}\n\n/**\n * A sequence that skips [startIndex] values from the underlying [sequence]\n * and stops returning values right before [endIndex], i.e. stops at `endIndex - 1`\n */\ninternal class SubSequence<T>(\n private val sequence: Sequence<T>,\n private val startIndex: Int,\n private val endIndex: Int\n) : Sequence<T>, DropTakeSequence<T> {\n\n init {\n require(startIndex >= 0) { \"startIndex should be non-negative, but is $startIndex\" }\n require(endIndex >= 0) { \"endIndex should be non-negative, but is $endIndex\" }\n require(endIndex >= startIndex) { \"endIndex should be not less than startIndex, but was $endIndex < $startIndex\" }\n }\n\n private val count: Int get() = endIndex - startIndex\n\n override fun drop(n: Int): Sequence<T> = if (n >= count) emptySequence() else SubSequence(sequence, startIndex + n, endIndex)\n override fun take(n: Int): Sequence<T> = if (n >= count) this else SubSequence(sequence, startIndex, startIndex + n)\n\n override fun iterator() = object : Iterator<T> {\n\n val iterator = sequence.iterator()\n var position = 0\n\n // Shouldn't be called from constructor to avoid premature iteration\n private fun drop() {\n while (position < startIndex && iterator.hasNext()) {\n iterator.next()\n position++\n }\n }\n\n override fun hasNext(): Boolean {\n drop()\n return (position < endIndex) && iterator.hasNext()\n }\n\n override fun next(): T {\n drop()\n if (position >= endIndex)\n throw NoSuchElementException()\n position++\n return iterator.next()\n }\n }\n}\n\n/**\n * A sequence that returns at most [count] values from the underlying [sequence], and stops returning values\n * as soon as that count is reached.\n */\ninternal class TakeSequence<T>(\n private val sequence: Sequence<T>,\n private val count: Int\n) : Sequence<T>, DropTakeSequence<T> {\n\n init {\n require(count >= 0) { \"count must be non-negative, but was $count.\" }\n }\n\n override fun drop(n: Int): Sequence<T> = if (n >= count) emptySequence() else SubSequence(sequence, n, count)\n override fun take(n: Int): Sequence<T> = if (n >= count) this else TakeSequence(sequence, n)\n\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n var left = count\n val iterator = sequence.iterator()\n\n override fun next(): T {\n if (left == 0)\n throw NoSuchElementException()\n left--\n return iterator.next()\n }\n\n override fun hasNext(): Boolean {\n return left > 0 && iterator.hasNext()\n }\n }\n}\n\n/**\n * A sequence that returns values from the underlying [sequence] while the [predicate] function returns\n * `true`, and stops returning values once the function returns `false` for the next element.\n */\ninternal class TakeWhileSequence<T>\nconstructor(\n private val sequence: Sequence<T>,\n private val predicate: (T) -> Boolean\n) : Sequence<T> {\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n val iterator = sequence.iterator()\n var nextState: Int = -1 // -1 for unknown, 0 for done, 1 for continue\n var nextItem: T? = null\n\n private fun calcNext() {\n if (iterator.hasNext()) {\n val item = iterator.next()\n if (predicate(item)) {\n nextState = 1\n nextItem = item\n return\n }\n }\n nextState = 0\n }\n\n override fun next(): T {\n if (nextState == -1)\n calcNext() // will change nextState\n if (nextState == 0)\n throw NoSuchElementException()\n @Suppress(\"UNCHECKED_CAST\")\n val result = nextItem as T\n\n // Clean next to avoid keeping reference on yielded instance\n nextItem = null\n nextState = -1\n return result\n }\n\n override fun hasNext(): Boolean {\n if (nextState == -1)\n calcNext() // will change nextState\n return nextState == 1\n }\n }\n}\n\n/**\n * A sequence that skips the specified number of values from the underlying [sequence] and returns\n * all values after that.\n */\ninternal class DropSequence<T>(\n private val sequence: Sequence<T>,\n private val count: Int\n) : Sequence<T>, DropTakeSequence<T> {\n init {\n require(count >= 0) { \"count must be non-negative, but was $count.\" }\n }\n\n override fun drop(n: Int): Sequence<T> = (count + n).let { n1 -> if (n1 < 0) DropSequence(this, n) else DropSequence(sequence, n1) }\n override fun take(n: Int): Sequence<T> = (count + n).let { n1 -> if (n1 < 0) TakeSequence(this, n) else SubSequence(sequence, count, n1) }\n\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n val iterator = sequence.iterator()\n var left = count\n\n // Shouldn't be called from constructor to avoid premature iteration\n private fun drop() {\n while (left > 0 && iterator.hasNext()) {\n iterator.next()\n left--\n }\n }\n\n override fun next(): T {\n drop()\n return iterator.next()\n }\n\n override fun hasNext(): Boolean {\n drop()\n return iterator.hasNext()\n }\n }\n}\n\n/**\n * A sequence that skips the values from the underlying [sequence] while the given [predicate] returns `true` and returns\n * all values after that.\n */\ninternal class DropWhileSequence<T>\nconstructor(\n private val sequence: Sequence<T>,\n private val predicate: (T) -> Boolean\n) : Sequence<T> {\n\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n val iterator = sequence.iterator()\n var dropState: Int = -1 // -1 for not dropping, 1 for nextItem, 0 for normal iteration\n var nextItem: T? = null\n\n private fun drop() {\n while (iterator.hasNext()) {\n val item = iterator.next()\n if (!predicate(item)) {\n nextItem = item\n dropState = 1\n return\n }\n }\n dropState = 0\n }\n\n override fun next(): T {\n if (dropState == -1)\n drop()\n\n if (dropState == 1) {\n @Suppress(\"UNCHECKED_CAST\")\n val result = nextItem as T\n nextItem = null\n dropState = 0\n return result\n }\n return iterator.next()\n }\n\n override fun hasNext(): Boolean {\n if (dropState == -1)\n drop()\n return dropState == 1 || iterator.hasNext()\n }\n }\n}\n\ninternal class DistinctSequence<T, K>(private val source: Sequence<T>, private val keySelector: (T) -> K) : Sequence<T> {\n override fun iterator(): Iterator<T> = DistinctIterator(source.iterator(), keySelector)\n}\n\nprivate class DistinctIterator<T, K>(private val source: Iterator<T>, private val keySelector: (T) -> K) : AbstractIterator<T>() {\n private val observed = HashSet<K>()\n\n override fun computeNext() {\n while (source.hasNext()) {\n val next = source.next()\n val key = keySelector(next)\n\n if (observed.add(key)) {\n setNext(next)\n return\n }\n }\n\n done()\n }\n}\n\n\nprivate class GeneratorSequence<T : Any>(private val getInitialValue: () -> T?, private val getNextValue: (T) -> T?) : Sequence<T> {\n override fun iterator(): Iterator<T> = object : Iterator<T> {\n var nextItem: T? = null\n var nextState: Int = -2 // -2 for initial unknown, -1 for next unknown, 0 for done, 1 for continue\n\n private fun calcNext() {\n nextItem = if (nextState == -2) getInitialValue() else getNextValue(nextItem!!)\n nextState = if (nextItem == null) 0 else 1\n }\n\n override fun next(): T {\n if (nextState < 0)\n calcNext()\n\n if (nextState == 0)\n throw NoSuchElementException()\n val result = nextItem as T\n // Do not clean nextItem (to avoid keeping reference on yielded instance) -- need to keep state for getNextValue\n nextState = -1\n return result\n }\n\n override fun hasNext(): Boolean {\n if (nextState < 0)\n calcNext()\n return nextState == 1\n }\n }\n}\n\n/**\n * Returns a wrapper sequence that provides values of this sequence, but ensures it can be iterated only one time.\n *\n * The operation is _intermediate_ and _stateless_.\n *\n * [IllegalStateException] is thrown on iterating the returned sequence from the second time.\n *\n */\npublic fun <T> Sequence<T>.constrainOnce(): Sequence<T> {\n // as? does not work in js\n //return this as? ConstrainedOnceSequence<T> ?: ConstrainedOnceSequence(this)\n return if (this is ConstrainedOnceSequence<T>) this else ConstrainedOnceSequence(this)\n}\n\n\n/**\n * Returns a sequence which invokes the function to calculate the next value on each iteration until the function returns `null`.\n *\n * The returned sequence is constrained to be iterated only once.\n *\n * @see constrainOnce\n * @see kotlin.sequences.sequence\n *\n * @sample samples.collections.Sequences.Building.generateSequence\n */\npublic fun <T : Any> generateSequence(nextFunction: () -> T?): Sequence<T> {\n return GeneratorSequence(nextFunction, { nextFunction() }).constrainOnce()\n}\n\n/**\n * Returns a sequence defined by the starting value [seed] and the function [nextFunction],\n * which is invoked to calculate the next value based on the previous one on each iteration.\n *\n * The sequence produces values until it encounters first `null` value.\n * If [seed] is `null`, an empty sequence is produced.\n *\n * The sequence can be iterated multiple times, each time starting with [seed].\n *\n * @see kotlin.sequences.sequence\n *\n * @sample samples.collections.Sequences.Building.generateSequenceWithSeed\n */\n@kotlin.internal.LowPriorityInOverloadResolution\npublic fun <T : Any> generateSequence(seed: T?, nextFunction: (T) -> T?): Sequence<T> =\n if (seed == null)\n EmptySequence\n else\n GeneratorSequence({ seed }, nextFunction)\n\n/**\n * Returns a sequence defined by the function [seedFunction], which is invoked to produce the starting value,\n * and the [nextFunction], which is invoked to calculate the next value based on the previous one on each iteration.\n *\n * The sequence produces values until it encounters first `null` value.\n * If [seedFunction] returns `null`, an empty sequence is produced.\n *\n * The sequence can be iterated multiple times.\n *\n * @see kotlin.sequences.sequence\n *\n * @sample samples.collections.Sequences.Building.generateSequenceWithLazySeed\n */\npublic fun <T : Any> generateSequence(seedFunction: () -> T?, nextFunction: (T) -> T?): Sequence<T> =\n GeneratorSequence(seedFunction, nextFunction)\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns 1st *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 1.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component1(): T {\n return get(0)\n}\n\n/**\n * Returns 2nd *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 2.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component2(): T {\n return get(1)\n}\n\n/**\n * Returns 3rd *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 3.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component3(): T {\n return get(2)\n}\n\n/**\n * Returns 4th *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 4.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component4(): T {\n return get(3)\n}\n\n/**\n * Returns 5th *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 5.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component5(): T {\n return get(4)\n}\n\n/**\n * Returns `true` if [element] is found in the collection.\n */\npublic operator fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.contains(element: T): Boolean {\n if (this is Collection)\n return contains(element)\n return indexOf(element) >= 0\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic fun <T> Iterable<T>.elementAt(index: Int): T {\n if (this is List)\n return get(index)\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"Collection doesn't contain element at index $index.\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAt(index: Int): T {\n return get(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\npublic fun <T> Iterable<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n if (this is List)\n return this.getOrElse(index, defaultValue)\n if (index < 0)\n return defaultValue(index)\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\npublic fun <T> Iterable<T>.elementAtOrNull(index: Int): T? {\n if (this is List)\n return this.getOrNull(index)\n if (index < 0)\n return null\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAtOrNull(index: Int): T? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the collection is empty.\n */\npublic fun <T> Iterable<T>.first(): T {\n when (this) {\n is List -> return this.first()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n return iterator.next()\n }\n }\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the list is empty.\n */\npublic fun <T> List<T>.first(): T {\n if (isEmpty())\n throw NoSuchElementException(\"List is empty.\")\n return this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun <T> Iterable<T>.first(predicate: (T) -> Boolean): T {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element, or `null` if the collection is empty.\n */\npublic fun <T> Iterable<T>.firstOrNull(): T? {\n when (this) {\n is List -> {\n if (isEmpty())\n return null\n else\n return this[0]\n }\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n return iterator.next()\n }\n }\n}\n\n/**\n * Returns the first element, or `null` if the list is empty.\n */\npublic fun <T> List<T>.firstOrNull(): T? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun <T> Iterable<T>.firstOrNull(predicate: (T) -> Boolean): T? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this list.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.getOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun <T> List<T>.getOrNull(index: Int): T? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns first index of [element], or -1 if the collection does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.indexOf(element: T): Int {\n if (this is List) return this.indexOf(element)\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the list does not contain element.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\npublic fun <@kotlin.internal.OnlyInputTypes T> List<T>.indexOf(element: T): Int {\n return indexOf(element)\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the collection does not contain such element.\n */\npublic inline fun <T> Iterable<T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the list does not contain such element.\n */\npublic inline fun <T> List<T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n var index = 0\n for (item in this) {\n if (predicate(item))\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the collection does not contain such element.\n */\npublic inline fun <T> Iterable<T>.indexOfLast(predicate: (T) -> Boolean): Int {\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the list does not contain such element.\n */\npublic inline fun <T> List<T>.indexOfLast(predicate: (T) -> Boolean): Int {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n if (predicate(iterator.previous())) {\n return iterator.nextIndex()\n }\n }\n return -1\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the collection is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Iterable<T>.last(): T {\n when (this) {\n is List -> return this.last()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n }\n }\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the list is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> List<T>.last(): T {\n if (isEmpty())\n throw NoSuchElementException(\"List is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Iterable<T>.last(predicate: (T) -> Boolean): T {\n var last: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n last = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return last as T\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> List<T>.last(predicate: (T) -> Boolean): T {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n val element = iterator.previous()\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"List contains no element matching the predicate.\")\n}\n\n/**\n * Returns last index of [element], or -1 if the collection does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.lastIndexOf(element: T): Int {\n if (this is List) return this.lastIndexOf(element)\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns last index of [element], or -1 if the list does not contain element.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\npublic fun <@kotlin.internal.OnlyInputTypes T> List<T>.lastIndexOf(element: T): Int {\n return lastIndexOf(element)\n}\n\n/**\n * Returns the last element, or `null` if the collection is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Iterable<T>.lastOrNull(): T? {\n when (this) {\n is List -> return if (isEmpty()) null else this[size - 1]\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n }\n }\n}\n\n/**\n * Returns the last element, or `null` if the list is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> List<T>.lastOrNull(): T? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Iterable<T>.lastOrNull(predicate: (T) -> Boolean): T? {\n var last: T? = null\n for (element in this) {\n if (predicate(element)) {\n last = element\n }\n }\n return last\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> List<T>.lastOrNull(predicate: (T) -> Boolean): T? {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n val element = iterator.previous()\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns a random element from this collection.\n * \n * @throws NoSuchElementException if this collection is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.random(): T {\n return random(Random)\n}\n\n/**\n * Returns a random element from this collection using the specified source of randomness.\n * \n * @throws NoSuchElementException if this collection is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> Collection<T>.random(random: Random): T {\n if (isEmpty())\n throw NoSuchElementException(\"Collection is empty.\")\n return elementAt(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this collection, or `null` if this collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.randomOrNull(): T? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this collection using the specified source of randomness, or `null` if this collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> Collection<T>.randomOrNull(random: Random): T? {\n if (isEmpty())\n return null\n return elementAt(random.nextInt(size))\n}\n\n/**\n * Returns the single element, or throws an exception if the collection is empty or has more than one element.\n */\npublic fun <T> Iterable<T>.single(): T {\n when (this) {\n is List -> return this.single()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n val single = iterator.next()\n if (iterator.hasNext())\n throw IllegalArgumentException(\"Collection has more than one element.\")\n return single\n }\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the list is empty or has more than one element.\n */\npublic fun <T> List<T>.single(): T {\n return when (size) {\n 0 -> throw NoSuchElementException(\"List is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"List has more than one element.\")\n }\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun <T> Iterable<T>.single(predicate: (T) -> Boolean): T {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Collection contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as T\n}\n\n/**\n * Returns single element, or `null` if the collection is empty or has more than one element.\n */\npublic fun <T> Iterable<T>.singleOrNull(): T? {\n when (this) {\n is List -> return if (size == 1) this[0] else null\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n val single = iterator.next()\n if (iterator.hasNext())\n return null\n return single\n }\n }\n}\n\n/**\n * Returns single element, or `null` if the list is empty or has more than one element.\n */\npublic fun <T> List<T>.singleOrNull(): T? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun <T> Iterable<T>.singleOrNull(predicate: (T) -> Boolean): T? {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Iterable<T>.drop(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return toList()\n val list: ArrayList<T>\n if (this is Collection<*>) {\n val resultSize = size - n\n if (resultSize <= 0)\n return emptyList()\n if (resultSize == 1)\n return listOf(last())\n list = ArrayList<T>(resultSize)\n if (this is List<T>) {\n if (this is RandomAccess) {\n for (index in n until size)\n list.add(this[index])\n } else {\n for (item in listIterator(n))\n list.add(item)\n }\n return list\n }\n }\n else {\n list = ArrayList<T>()\n }\n var count = 0\n for (item in this) {\n if (count >= n) list.add(item) else ++count\n }\n return list.optimizeReadOnlyList()\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> List<T>.dropLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> List<T>.dropLastWhile(predicate: (T) -> Boolean): List<T> {\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n if (!predicate(iterator.previous())) {\n return take(iterator.nextIndex() + 1)\n }\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> Iterable<T>.dropWhile(predicate: (T) -> Boolean): List<T> {\n var yielding = false\n val list = ArrayList<T>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {\n return filterTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun <T> Iterable<T>.filterIndexed(predicate: (index: Int, T) -> Boolean): List<T> {\n return filterIndexedTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterIndexedTo(destination: C, predicate: (index: Int, T) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Returns a list containing all elements that are instances of specified type parameter R.\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstance\n */\npublic inline fun <reified R> Iterable<*>.filterIsInstance(): List<@kotlin.internal.NoInfer R> {\n return filterIsInstanceTo(ArrayList<R>())\n}\n\n/**\n * Appends all elements that are instances of specified type parameter R to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstanceTo\n */\npublic inline fun <reified R, C : MutableCollection<in R>> Iterable<*>.filterIsInstanceTo(destination: C): C {\n for (element in this) if (element is R) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Iterable<T>.filterNot(predicate: (T) -> Boolean): List<T> {\n return filterNotTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing all elements that are not `null`.\n * \n * @sample samples.collections.Collections.Filtering.filterNotNull\n */\npublic fun <T : Any> Iterable<T?>.filterNotNull(): List<T> {\n return filterNotNullTo(ArrayList<T>())\n}\n\n/**\n * Appends all elements that are not `null` to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterNotNullTo\n */\npublic fun <C : MutableCollection<in T>, T : Any> Iterable<T?>.filterNotNullTo(destination: C): C {\n for (element in this) if (element != null) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterNotTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun <T> List<T>.slice(indices: IntRange): List<T> {\n if (indices.isEmpty()) return listOf()\n return this.subList(indices.start, indices.endInclusive + 1).toList()\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun <T> List<T>.slice(indices: Iterable<Int>): List<T> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<T>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Iterable<T>.take(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (this is Collection<T>) {\n if (n >= size) return toList()\n if (n == 1) return listOf(first())\n }\n var count = 0\n val list = ArrayList<T>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list.optimizeReadOnlyList()\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> List<T>.takeLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(last())\n val list = ArrayList<T>(n)\n if (this is RandomAccess) {\n for (index in size - n until size)\n list.add(this[index])\n } else {\n for (item in listIterator(size - n))\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> List<T>.takeLastWhile(predicate: (T) -> Boolean): List<T> {\n if (isEmpty())\n return emptyList()\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n if (!predicate(iterator.previous())) {\n iterator.next()\n val expectedSize = size - iterator.nextIndex()\n if (expectedSize == 0) return emptyList()\n return ArrayList<T>(expectedSize).apply {\n while (iterator.hasNext())\n add(iterator.next())\n }\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> Iterable<T>.takeWhile(predicate: (T) -> Boolean): List<T> {\n val list = ArrayList<T>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Reverses elements in the list in-place.\n */\npublic expect fun <T> MutableList<T>.reverse(): Unit\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun <T> Iterable<T>.reversed(): List<T> {\n if (this is Collection && size <= 1) return toList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Randomly shuffles elements in this list in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> MutableList<T>.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n this[j] = this.set(i, this[j])\n }\n}\n\n/**\n * Sorts elements in the list in-place according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> MutableList<T>.sortBy(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareBy(selector))\n}\n\n/**\n * Sorts elements in the list in-place descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> MutableList<T>.sortByDescending(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareByDescending(selector))\n}\n\n/**\n * Sorts elements in the list in-place descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> MutableList<T>.sortDescending(): Unit {\n sortWith(reverseOrder())\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Iterable<T>.sorted(): List<T> {\n if (this is Collection) {\n if (size <= 1) return this.toList()\n @Suppress(\"UNCHECKED_CAST\")\n return (toTypedArray<Comparable<T>>() as Array<T>).apply { sort() }.asList()\n }\n return toMutableList().apply { sort() }\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <T, R : Comparable<R>> Iterable<T>.sortedBy(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> Iterable<T>.sortedByDescending(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Iterable<T>.sortedDescending(): List<T> {\n return sortedWith(reverseOrder())\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T> {\n if (this is Collection) {\n if (size <= 1) return this.toList()\n @Suppress(\"UNCHECKED_CAST\")\n return (toTypedArray<Any?>() as Array<T>).apply { sortWith(comparator) }.asList()\n }\n return toMutableList().apply { sortWith(comparator) }\n}\n\n/**\n * Returns an array of Boolean containing all of the elements of this collection.\n */\npublic fun Collection<Boolean>.toBooleanArray(): BooleanArray {\n val result = BooleanArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Byte containing all of the elements of this collection.\n */\npublic fun Collection<Byte>.toByteArray(): ByteArray {\n val result = ByteArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Char containing all of the elements of this collection.\n */\npublic fun Collection<Char>.toCharArray(): CharArray {\n val result = CharArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Double containing all of the elements of this collection.\n */\npublic fun Collection<Double>.toDoubleArray(): DoubleArray {\n val result = DoubleArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Float containing all of the elements of this collection.\n */\npublic fun Collection<Float>.toFloatArray(): FloatArray {\n val result = FloatArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Int containing all of the elements of this collection.\n */\npublic fun Collection<Int>.toIntArray(): IntArray {\n val result = IntArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Long containing all of the elements of this collection.\n */\npublic fun Collection<Long>.toLongArray(): LongArray {\n val result = LongArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Short containing all of the elements of this collection.\n */\npublic fun Collection<Short>.toShortArray(): ShortArray {\n val result = ShortArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given collection.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associate\n */\npublic inline fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing the elements from the given collection indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateBy\n */\npublic inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, T>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given collection.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateByWithValueTransform\n */\npublic inline fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given collection\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateByTo\n */\npublic inline fun <T, K, M : MutableMap<in K, in T>> Iterable<T>.associateByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given collection.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateByToWithValueTransform\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given collection.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateTo\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateTo(destination: M, transform: (T) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Returns a [Map] where keys are elements from the given collection and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V> Iterable<K>.associateWith(valueSelector: (K) -> V): Map<K, V> {\n val result = LinkedHashMap<K, V>(mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given collection,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V, M : MutableMap<in K, in V>> Iterable<K>.associateWithTo(destination: M, valueSelector: (K) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <T, C : MutableCollection<in T>> Iterable<T>.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun <T> Iterable<T>.toHashSet(): HashSet<T> {\n return toCollection(HashSet<T>(mapCapacity(collectionSizeOrDefault(12))))\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun <T> Iterable<T>.toList(): List<T> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(if (this is List) get(0) else iterator().next())\n else -> this.toMutableList()\n }\n }\n return this.toMutableList().optimizeReadOnlyList()\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this collection.\n */\npublic fun <T> Iterable<T>.toMutableList(): MutableList<T> {\n if (this is Collection<T>)\n return this.toMutableList()\n return toCollection(ArrayList<T>())\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this collection.\n */\npublic fun <T> Collection<T>.toMutableList(): MutableList<T> {\n return ArrayList(this)\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic fun <T> Iterable<T>.toSet(): Set<T> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(if (this is List) this[0] else iterator().next())\n else -> toCollection(LinkedHashSet<T>(mapCapacity(size)))\n }\n }\n return toCollection(LinkedHashSet<T>()).optimizeReadOnlySet()\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequence\")\npublic inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Sequence<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequence\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Sequence<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequenceTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Sequence<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original collection, to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapTo(destination: C, transform: (T) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequenceTo\")\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapTo(destination: C, transform: (T) -> Sequence<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups elements of the original collection by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original collection.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K> Iterable<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {\n return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original collection\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original collection.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V> Iterable<T>.groupBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups elements of the original collection by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<T>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original collection\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Creates a [Grouping] source from a collection to be used later with one of group-and-fold operations\n * using the specified [keySelector] function to extract a key from each element.\n * \n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K> Iterable<T>.groupingBy(crossinline keySelector: (T) -> K): Grouping<T, K> {\n return object : Grouping<T, K> {\n override fun sourceIterator(): Iterator<T> = this@groupingBy.iterator()\n override fun keyOf(element: T): K = keySelector(element)\n }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {\n return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original collection.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R> Iterable<T>.mapIndexed(transform: (index: Int, T) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element and its index in the original collection.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any> Iterable<T>.mapIndexedNotNull(transform: (index: Int, T) -> R?): List<R> {\n return mapIndexedNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original collection\n * and appends only the non-null results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Iterable<T>.mapIndexedNotNullTo(destination: C, transform: (index: Int, T) -> R?): C {\n forEachIndexed { index, element -> transform(index, element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original collection\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapIndexedTo(destination: C, transform: (index: Int, T) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(checkIndexOverflow(index++), item))\n return destination\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.mapNotNull\n */\npublic inline fun <T, R : Any> Iterable<T>.mapNotNull(transform: (T) -> R?): List<R> {\n return mapNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element in the original collection\n * and appends only the non-null results to the given [destination].\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Iterable<T>.mapNotNullTo(destination: C, transform: (T) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original collection\n * and appends the results to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapTo(destination: C, transform: (T) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original collection\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun <T> Iterable<T>.withIndex(): Iterable<IndexedValue<T>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a list containing only distinct elements from the given collection.\n * \n * Among equal elements of the given collection, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source collection.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun <T> Iterable<T>.distinct(): List<T> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only elements from the given collection\n * having distinct keys returned by the given [selector] function.\n * \n * Among elements of the given collection with equal keys, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source collection.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <T, K> Iterable<T>.distinctBy(selector: (T) -> K): List<T> {\n val set = HashSet<K>()\n val list = ArrayList<T>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a set containing all elements that are contained by both this collection and the specified collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this collection and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic infix fun <T> Iterable<T>.subtract(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic fun <T> Iterable<T>.toMutableSet(): MutableSet<T> {\n return when (this) {\n is Collection<T> -> LinkedHashSet(this)\n else -> toCollection(LinkedHashSet<T>())\n }\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original collection.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun <T> Iterable<T>.union(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return true\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if collection has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun <T> Iterable<T>.any(): Boolean {\n if (this is Collection) return !isEmpty()\n return iterator().hasNext()\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return false\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of elements in this collection.\n */\npublic fun <T> Iterable<T>.count(): Int {\n if (this is Collection) return size\n var count = 0\n for (element in this) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Returns the number of elements in this collection.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int {\n if (this is Collection && isEmpty()) return 0\n var count = 0\n for (element in this) if (predicate(element)) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the collection is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Returns the specified [initial] value if the collection is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Iterable<T>.foldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(checkIndexOverflow(index++), accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the list is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> List<T>.foldRight(initial: R, operation: (T, acc: R) -> R): R {\n var accumulator = initial\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Returns the specified [initial] value if the list is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> List<T>.foldRightIndexed(initial: R, operation: (index: Int, T, acc: R) -> R): R {\n var accumulator = initial\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n }\n return accumulator\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@kotlin.internal.HidesMembers\npublic inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {\n var index = 0\n for (item in this) action(checkIndexOverflow(index++), item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Double>.max(): Double? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Float>.max(): Float? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.max(): T? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxElem = iterator.next()\n if (!iterator.hasNext()) return maxElem\n var maxValue = selector(maxElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n } while (iterator.hasNext())\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.maxOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.maxOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Double>.maxOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Float>.maxOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.maxOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Iterable<T>.maxWith(comparator: Comparator<in T>): T? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Iterable<T>.maxWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Double>.min(): Double? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Float>.min(): Float? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.min(): T? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minBy(selector: (T) -> R): T? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minElem = iterator.next()\n if (!iterator.hasNext()) return minElem\n var minValue = selector(minElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n } while (iterator.hasNext())\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.minOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.minOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Double>.minOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Float>.minOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.minOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Iterable<T>.minWith(comparator: Comparator<in T>): T? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Iterable<T>.minWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the collection has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun <T> Iterable<T>.none(): Boolean {\n if (this is Collection) return isEmpty()\n return !iterator().hasNext()\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun <T> Iterable<T>.none(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return true\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each element and returns the collection itself afterwards.\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, C : Iterable<T>> C.onEach(action: (T) -> Unit): C {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the collection itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, C : Iterable<T>> C.onEachIndexed(action: (index: Int, T) -> Unit): C {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this collection is empty. If the collection can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty collection can't be reduced.\")\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Throws an exception if this collection is empty. If the collection can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Iterable<T>.reduceIndexed(operation: (index: Int, acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty collection can't be reduced.\")\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Returns `null` if the collection is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Iterable<T>.reduceIndexedOrNull(operation: (index: Int, acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the collection is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Iterable<T>.reduceOrNull(operation: (acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this list is empty. If the list can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> List<T>.reduceRight(operation: (T, acc: S) -> S): S {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n throw UnsupportedOperationException(\"Empty list can't be reduced.\")\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Throws an exception if this list is empty. If the list can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> List<T>.reduceRightIndexed(operation: (index: Int, T, acc: S) -> S): S {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n throw UnsupportedOperationException(\"Empty list can't be reduced.\")\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Returns `null` if the list is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> List<T>.reduceRightIndexedOrNull(operation: (index: Int, T, acc: S) -> S): S? {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n return null\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the list is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> List<T>.reduceRightOrNull(operation: (T, acc: S) -> S): S? {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n return null\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Iterable<T>.runningFold(initial: R, operation: (acc: R, T) -> R): List<R> {\n val estimatedSize = collectionSizeOrDefault(9)\n if (estimatedSize == 0) return listOf(initial)\n val result = ArrayList<R>(estimatedSize + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Iterable<T>.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n val estimatedSize = collectionSizeOrDefault(9)\n if (estimatedSize == 0) return listOf(initial)\n val result = ArrayList<R>(estimatedSize + 1).apply { add(initial) }\n var index = 0\n var accumulator = initial\n for (element in this) {\n accumulator = operation(index++, accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this collection.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and the element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Iterable<T>.runningReduce(operation: (acc: S, T) -> S): List<S> {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return emptyList()\n var accumulator: S = iterator.next()\n val result = ArrayList<S>(collectionSizeOrDefault(10)).apply { add(accumulator) }\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with the first element of this collection.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Iterable<T>.runningReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return emptyList()\n var accumulator: S = iterator.next()\n val result = ArrayList<S>(collectionSizeOrDefault(10)).apply { add(accumulator) }\n var index = 1\n while (iterator.hasNext()) {\n accumulator = operation(index++, accumulator, iterator.next())\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Iterable<T>.scan(initial: R, operation: (acc: R, T) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Iterable<T>.scanIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Iterable<T>.scanReduce(operation: (acc: S, T) -> S): List<S> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Iterable<T>.scanReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\npublic inline fun <T> Iterable<T>.sumBy(selector: (T) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\npublic inline fun <T> Iterable<T>.sumByDouble(selector: (T) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n */\npublic fun <T : Any> Iterable<T?>.requireNoNulls(): Iterable<T> {\n for (element in this) {\n if (element == null) {\n throw IllegalArgumentException(\"null element found in $this.\")\n }\n }\n @Suppress(\"UNCHECKED_CAST\")\n return this as Iterable<T>\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n */\npublic fun <T : Any> List<T?>.requireNoNulls(): List<T> {\n for (element in this) {\n if (element == null) {\n throw IllegalArgumentException(\"null element found in $this.\")\n }\n }\n @Suppress(\"UNCHECKED_CAST\")\n return this as List<T>\n}\n\n/**\n * Splits this collection into a list of lists each not exceeding the given [size].\n * \n * The last list in the resulting list may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this collection.\n * \n * @sample samples.collections.Collections.Transformations.chunked\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.chunked(size: Int): List<List<T>> {\n return windowed(size, size, partialWindows = true)\n}\n\n/**\n * Splits this collection into several lists each not exceeding the given [size]\n * and applies the given [transform] function to an each.\n * \n * @return list of results of the [transform] applied to an each list.\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * The last list may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this collection.\n * \n * @sample samples.text.Strings.chunkedTransform\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Iterable<T>.chunked(size: Int, transform: (List<T>) -> R): List<R> {\n return windowed(size, size, partialWindows = true, transform = transform)\n}\n\n/**\n * Returns a list containing all elements of the original collection without the first occurrence of the given [element].\n */\npublic operator fun <T> Iterable<T>.minus(element: T): List<T> {\n val result = ArrayList<T>(collectionSizeOrDefault(10))\n var removed = false\n return this.filterTo(result) { if (!removed && it == element) { removed = true; false } else true }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] array.\n * \n * The [elements] array may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Array<out T>): List<T> {\n if (elements.isEmpty()) return this.toList()\n val other = elements.toHashSet()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] collection.\n * \n * The [elements] collection may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Iterable<T>): List<T> {\n val other = elements.convertToSetForSetOperationWith(this)\n if (other.isEmpty())\n return this.toList()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] sequence.\n * \n * The [elements] sequence may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Sequence<T>): List<T> {\n val other = elements.toHashSet()\n if (other.isEmpty())\n return this.toList()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection without the first occurrence of the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minusElement(element: T): List<T> {\n return minus(element)\n}\n\n/**\n * Splits the original collection into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Iterables.Operations.partition\n */\npublic inline fun <T> Iterable<T>.partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {\n val first = ArrayList<T>()\n val second = ArrayList<T>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\npublic operator fun <T> Iterable<T>.plus(element: T): List<T> {\n if (this is Collection) return this.plus(element)\n val result = ArrayList<T>()\n result.addAll(this)\n result.add(element)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\npublic operator fun <T> Collection<T>.plus(element: T): List<T> {\n val result = ArrayList<T>(size + 1)\n result.addAll(this)\n result.add(element)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] array.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Array<out T>): List<T> {\n if (this is Collection) return this.plus(elements)\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] array.\n */\npublic operator fun <T> Collection<T>.plus(elements: Array<out T>): List<T> {\n val result = ArrayList<T>(this.size + elements.size)\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] collection.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Iterable<T>): List<T> {\n if (this is Collection) return this.plus(elements)\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] collection.\n */\npublic operator fun <T> Collection<T>.plus(elements: Iterable<T>): List<T> {\n if (elements is Collection) {\n val result = ArrayList<T>(this.size + elements.size)\n result.addAll(this)\n result.addAll(elements)\n return result\n } else {\n val result = ArrayList<T>(this)\n result.addAll(elements)\n return result\n }\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] sequence.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Sequence<T>): List<T> {\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] sequence.\n */\npublic operator fun <T> Collection<T>.plus(elements: Sequence<T>): List<T> {\n val result = ArrayList<T>(this.size + 10)\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.plusElement(element: T): List<T> {\n return plus(element)\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.plusElement(element: T): List<T> {\n return plus(element)\n}\n\n/**\n * Returns a list of snapshots of the window of the given [size]\n * sliding along this collection with the given [step], where each\n * snapshot is a list.\n * \n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this collection.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.takeWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<List<T>> {\n checkWindowSizeStep(size, step)\n if (this is RandomAccess && this is List) {\n val thisSize = this.size\n val resultCapacity = thisSize / step + if (thisSize % step == 0) 0 else 1\n val result = ArrayList<List<T>>(resultCapacity)\n var index = 0\n while (index in 0 until thisSize) {\n val windowSize = size.coerceAtMost(thisSize - index)\n if (windowSize < size && !partialWindows) break\n result.add(List(windowSize) { this[it + index] })\n index += step\n }\n return result\n }\n val result = ArrayList<List<T>>()\n windowedIterator(iterator(), size, step, partialWindows, reuseBuffer = false).forEach {\n result.add(it)\n }\n return result\n}\n\n/**\n * Returns a list of results of applying the given [transform] function to\n * an each list representing a view over the window of the given [size]\n * sliding along this collection with the given [step].\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this collection.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.averageWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (List<T>) -> R): List<R> {\n checkWindowSizeStep(size, step)\n if (this is RandomAccess && this is List) {\n val thisSize = this.size\n val resultCapacity = thisSize / step + if (thisSize % step == 0) 0 else 1\n val result = ArrayList<R>(resultCapacity)\n val window = MovingSubList(this)\n var index = 0\n while (index in 0 until thisSize) {\n val windowSize = size.coerceAtMost(thisSize - index)\n if (!partialWindows && windowSize < size) break\n window.move(index, index + windowSize)\n result.add(transform(window))\n index += step\n }\n return result\n }\n val result = ArrayList<R>()\n windowedIterator(iterator(), size, step, partialWindows, reuseBuffer = true).forEach {\n result.add(transform(it))\n }\n return result\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Iterable<T>.zip(other: Array<out R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` collection and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Iterable<T>.zip(other: Array<out R>, transform: (a: T, b: R) -> V): List<V> {\n val arraySize = other.size\n val list = ArrayList<V>(minOf(collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in this) {\n if (i >= arraySize) break\n list.add(transform(element, other[i++]))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] collection with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Iterable<T>.zip(other: Iterable<R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` collection and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Iterable<T>.zip(other: Iterable<R>, transform: (a: T, b: R) -> V): List<V> {\n val first = iterator()\n val second = other.iterator()\n val list = ArrayList<V>(minOf(collectionSizeOrDefault(10), other.collectionSizeOrDefault(10)))\n while (first.hasNext() && second.hasNext()) {\n list.add(transform(first.next(), second.next()))\n }\n return list\n}\n\n/**\n * Returns a list of pairs of each two adjacent elements in this collection.\n * \n * The returned list is empty if this collection contains less than two elements.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNext\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.zipWithNext(): List<Pair<T, T>> {\n return zipWithNext { a, b -> a to b }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to an each pair of two adjacent elements in this collection.\n * \n * The returned list is empty if this collection contains less than two elements.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNextToFindDeltas\n */\n@SinceKotlin(\"1.2\")\npublic inline fun <T, R> Iterable<T>.zipWithNext(transform: (a: T, b: T) -> R): List<R> {\n val iterator = iterator()\n if (!iterator.hasNext()) return emptyList()\n val result = mutableListOf<R>()\n var current = iterator.next()\n while (iterator.hasNext()) {\n val next = iterator.next()\n result.add(transform(current, next))\n current = next\n }\n return result\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <T, A : Appendable> Iterable<T>.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n buffer.appendElement(element, transform)\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun <T> Iterable<T>.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Returns this collection as an [Iterable].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.asIterable(): Iterable<T> {\n return this\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original collection returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromCollection\n */\npublic fun <T> Iterable<T>.asSequence(): Sequence<T> {\n return Sequence { this.iterator() }\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfByte\")\npublic fun Iterable<Byte>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfShort\")\npublic fun Iterable<Short>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfInt\")\npublic fun Iterable<Int>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfLong\")\npublic fun Iterable<Long>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfFloat\")\npublic fun Iterable<Float>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfDouble\")\npublic fun Iterable<Double>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfByte\")\npublic fun Iterable<Byte>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfShort\")\npublic fun Iterable<Short>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfInt\")\npublic fun Iterable<Int>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfLong\")\npublic fun Iterable<Long>.sum(): Long {\n var sum: Long = 0L\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfFloat\")\npublic fun Iterable<Float>.sum(): Float {\n var sum: Float = 0.0f\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfDouble\")\npublic fun Iterable<Double>.sum(): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"PreconditionsKt\")\n\npackage kotlin\n\nimport kotlin.contracts.contract\n\n/**\n * Throws an [IllegalArgumentException] if the [value] is false.\n *\n * @sample samples.misc.Preconditions.failRequireWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun require(value: Boolean): Unit {\n contract {\n returns() implies value\n }\n require(value) { \"Failed requirement.\" }\n}\n\n/**\n * Throws an [IllegalArgumentException] with the result of calling [lazyMessage] if the [value] is false.\n *\n * @sample samples.misc.Preconditions.failRequireWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun require(value: Boolean, lazyMessage: () -> Any): Unit {\n contract {\n returns() implies value\n }\n if (!value) {\n val message = lazyMessage()\n throw IllegalArgumentException(message.toString())\n }\n}\n\n/**\n * Throws an [IllegalArgumentException] if the [value] is null. Otherwise returns the not null value.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Any> requireNotNull(value: T?): T {\n contract {\n returns() implies (value != null)\n }\n return requireNotNull(value) { \"Required value was null.\" }\n}\n\n/**\n * Throws an [IllegalArgumentException] with the result of calling [lazyMessage] if the [value] is null. Otherwise\n * returns the not null value.\n *\n * @sample samples.misc.Preconditions.failRequireWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Any> requireNotNull(value: T?, lazyMessage: () -> Any): T {\n contract {\n returns() implies (value != null)\n }\n\n if (value == null) {\n val message = lazyMessage()\n throw IllegalArgumentException(message.toString())\n } else {\n return value\n }\n}\n\n/**\n * Throws an [IllegalStateException] if the [value] is false.\n *\n * @sample samples.misc.Preconditions.failCheckWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun check(value: Boolean): Unit {\n contract {\n returns() implies value\n }\n check(value) { \"Check failed.\" }\n}\n\n/**\n * Throws an [IllegalStateException] with the result of calling [lazyMessage] if the [value] is false.\n *\n * @sample samples.misc.Preconditions.failCheckWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun check(value: Boolean, lazyMessage: () -> Any): Unit {\n contract {\n returns() implies value\n }\n if (!value) {\n val message = lazyMessage()\n throw IllegalStateException(message.toString())\n }\n}\n\n/**\n * Throws an [IllegalStateException] if the [value] is null. Otherwise\n * returns the not null value.\n *\n * @sample samples.misc.Preconditions.failCheckWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Any> checkNotNull(value: T?): T {\n contract {\n returns() implies (value != null)\n }\n return checkNotNull(value) { \"Required value was null.\" }\n}\n\n/**\n * Throws an [IllegalStateException] with the result of calling [lazyMessage] if the [value] is null. Otherwise\n * returns the not null value.\n *\n * @sample samples.misc.Preconditions.failCheckWithLazyMessage\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Any> checkNotNull(value: T?, lazyMessage: () -> Any): T {\n contract {\n returns() implies (value != null)\n }\n\n if (value == null) {\n val message = lazyMessage()\n throw IllegalStateException(message.toString())\n } else {\n return value\n }\n}\n\n\n/**\n * Throws an [IllegalStateException] with the given [message].\n *\n * @sample samples.misc.Preconditions.failWithError\n */\n@kotlin.internal.InlineOnly\npublic inline fun error(message: Any): Nothing = throw IllegalStateException(message.toString())\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\nimport kotlin.comparisons.naturalOrder\nimport kotlin.random.Random\n\n/** Returns the array if it's not `null`, or an empty array otherwise. */\n@kotlin.internal.InlineOnly\npublic actual inline fun <T> Array<out T>?.orEmpty(): Array<out T> = this ?: emptyArray<T>()\n\n@kotlin.internal.InlineOnly\npublic actual inline fun <T> Collection<T>.toTypedArray(): Array<T> = copyToArray(this)\n\n@JsName(\"copyToArray\")\n@PublishedApi\ninternal fun <T> copyToArray(collection: Collection<T>): Array<T> {\n return if (collection.asDynamic().toArray !== undefined)\n collection.asDynamic().toArray().unsafeCast<Array<T>>()\n else\n copyToArrayImpl(collection).unsafeCast<Array<T>>()\n}\n\n@JsName(\"copyToArrayImpl\")\ninternal actual fun copyToArrayImpl(collection: Collection<*>): Array<Any?> {\n val array = emptyArray<Any?>()\n val iterator = collection.iterator()\n while (iterator.hasNext())\n array.asDynamic().push(iterator.next())\n return array\n}\n\n@JsName(\"copyToExistingArrayImpl\")\ninternal actual fun <T> copyToArrayImpl(collection: Collection<*>, array: Array<T>): Array<T> {\n if (array.size < collection.size)\n return copyToArrayImpl(collection).unsafeCast<Array<T>>()\n\n val iterator = collection.iterator()\n var index = 0\n while (iterator.hasNext()) {\n array[index++] = iterator.next().unsafeCast<T>()\n }\n if (index < array.size) {\n array[index] = null.unsafeCast<T>()\n }\n return array\n}\n\n\n/**\n * Returns an immutable list containing only the specified object [element].\n */\npublic fun <T> listOf(element: T): List<T> = arrayListOf(element)\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <E> buildListInternal(builderAction: MutableList<E>.() -> Unit): List<E> {\n return ArrayList<E>().apply(builderAction).build()\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <E> buildListInternal(capacity: Int, builderAction: MutableList<E>.() -> Unit): List<E> {\n checkBuilderCapacity(capacity)\n return ArrayList<E>(capacity).apply(builderAction).build()\n}\n\n\n/**\n * Returns an immutable set containing only the specified object [element].\n */\npublic fun <T> setOf(element: T): Set<T> = hashSetOf(element)\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <E> buildSetInternal(builderAction: MutableSet<E>.() -> Unit): Set<E> {\n return LinkedHashSet<E>().apply(builderAction).build()\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <E> buildSetInternal(capacity: Int, builderAction: MutableSet<E>.() -> Unit): Set<E> {\n return LinkedHashSet<E>(capacity).apply(builderAction).build()\n}\n\n\n/**\n * Returns an immutable map, mapping only the specified key to the\n * specified value.\n */\npublic fun <K, V> mapOf(pair: Pair<K, V>): Map<K, V> = hashMapOf(pair)\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <K, V> buildMapInternal(builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n return LinkedHashMap<K, V>().apply(builderAction).build()\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal actual inline fun <K, V> buildMapInternal(capacity: Int, builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n return LinkedHashMap<K, V>(capacity).apply(builderAction).build()\n}\n\n\n/**\n * Fills the list with the provided [value].\n *\n * Each element in the list gets replaced with the [value].\n */\n@SinceKotlin(\"1.2\")\npublic actual fun <T> MutableList<T>.fill(value: T): Unit {\n for (index in 0..lastIndex) {\n this[index] = value\n }\n}\n\n/**\n * Randomly shuffles elements in this list.\n *\n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.2\")\npublic actual fun <T> MutableList<T>.shuffle(): Unit = shuffle(Random)\n\n/**\n * Returns a new list with the elements of this list randomly shuffled.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun <T> Iterable<T>.shuffled(): List<T> = toMutableList().apply { shuffle() }\n\n/**\n * Sorts elements in the list in-place according to their natural sort order.\n *\n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic actual fun <T : Comparable<T>> MutableList<T>.sort(): Unit {\n collectionsSort(this, naturalOrder())\n}\n\n/**\n * Sorts elements in the list in-place according to the order specified with [comparator].\n *\n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic actual fun <T> MutableList<T>.sortWith(comparator: Comparator<in T>): Unit {\n collectionsSort(this, comparator)\n}\n\nprivate fun <T> collectionsSort(list: MutableList<T>, comparator: Comparator<in T>) {\n if (list.size <= 1) return\n\n val array = copyToArray(list)\n sortArrayWith(array, comparator)\n\n for (i in 0 until array.size) {\n list[i] = array[i]\n }\n}\n\ninternal actual fun <T> arrayOfNulls(reference: Array<T>, size: Int): Array<T> {\n return arrayOfNulls<Any>(size).unsafeCast<Array<T>>()\n}\n\n@SinceKotlin(\"1.3\")\n@PublishedApi\n@JsName(\"arrayCopy\")\ninternal fun <T> arrayCopy(source: Array<out T>, destination: Array<in T>, destinationOffset: Int, startIndex: Int, endIndex: Int) {\n AbstractList.checkRangeIndexes(startIndex, endIndex, source.size)\n val rangeSize = endIndex - startIndex\n AbstractList.checkRangeIndexes(destinationOffset, destinationOffset + rangeSize, destination.size)\n\n if (js(\"ArrayBuffer\").isView(destination) && js(\"ArrayBuffer\").isView(source)) {\n val subrange = source.asDynamic().subarray(startIndex, endIndex)\n destination.asDynamic().set(subrange, destinationOffset)\n } else {\n if (source !== destination || destinationOffset <= startIndex) {\n for (index in 0 until rangeSize) {\n destination[destinationOffset + index] = source[startIndex + index]\n }\n } else {\n for (index in rangeSize - 1 downTo 0) {\n destination[destinationOffset + index] = source[startIndex + index]\n }\n }\n }\n}\n\n// no singleton map implementation in js, return map as is\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal actual inline fun <K, V> Map<K, V>.toSingletonMapOrSelf(): Map<K, V> = this\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal actual inline fun <K, V> Map<out K, V>.toSingletonMap(): Map<K, V> = this.toMutableMap()\n\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal actual inline fun <T> Array<out T>.copyToArrayOfAny(isVarargs: Boolean): Array<out Any?> =\n if (isVarargs)\n // no need to copy vararg array in JS\n this\n else\n this.copyOf()\n\n\n\n@PublishedApi\ninternal actual fun checkIndexOverflow(index: Int): Int {\n if (index < 0) {\n throwIndexOverflow()\n }\n return index\n}\n\n@PublishedApi\ninternal actual fun checkCountOverflow(count: Int): Int {\n if (count < 0) {\n throwCountOverflow()\n }\n return count\n}\n\n\n/**\n * JS map and set implementations do not make use of capacities or load factors.\n */\n@PublishedApi\ninternal actual fun mapCapacity(expectedSize: Int) = expectedSize\n\n/**\n * Checks a collection builder function capacity argument.\n * In JS no validation is made in Map/Set constructor yet.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@PublishedApi\ninternal fun checkBuilderCapacity(capacity: Int) {\n require(capacity >= 0) { \"capacity must be non-negative.\" }\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StandardKt\")\npackage kotlin\n\nimport kotlin.contracts.*\n\n/**\n * An exception is thrown to indicate that a method body remains to be implemented.\n */\npublic class NotImplementedError(message: String = \"An operation is not implemented.\") : Error(message)\n\n/**\n * Always throws [NotImplementedError] stating that operation is not implemented.\n */\n\n@kotlin.internal.InlineOnly\npublic inline fun TODO(): Nothing = throw NotImplementedError()\n\n/**\n * Always throws [NotImplementedError] stating that operation is not implemented.\n *\n * @param reason a string explaining why the implementation is missing.\n */\n@kotlin.internal.InlineOnly\npublic inline fun TODO(reason: String): Nothing = throw NotImplementedError(\"An operation is not implemented: $reason\")\n\n\n\n/**\n * Calls the specified function [block] and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#run).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <R> run(block: () -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block()\n}\n\n/**\n * Calls the specified function [block] with `this` value as its receiver and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#run).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> T.run(block: T.() -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block()\n}\n\n/**\n * Calls the specified function [block] with the given [receiver] as its receiver and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#with).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> with(receiver: T, block: T.() -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return receiver.block()\n}\n\n/**\n * Calls the specified function [block] with `this` value as its receiver and returns `this` value.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> T.apply(block: T.() -> Unit): T {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n block()\n return this\n}\n\n/**\n * Calls the specified function [block] with `this` value as its argument and returns `this` value.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#also).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.also(block: (T) -> Unit): T {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n block(this)\n return this\n}\n\n/**\n * Calls the specified function [block] with `this` value as its argument and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#let).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> T.let(block: (T) -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block(this)\n}\n\n/**\n * Returns `this` value if it satisfies the given [predicate] or `null`, if it doesn't.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#takeif-and-takeunless).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {\n contract {\n callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)\n }\n return if (predicate(this)) this else null\n}\n\n/**\n * Returns `this` value if it _does not_ satisfy the given [predicate] or `null`, if it does.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#takeif-and-takeunless).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? {\n contract {\n callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)\n }\n return if (!predicate(this)) this else null\n}\n\n/**\n * Executes the given function [action] specified number of [times].\n *\n * A zero-based index of current iteration is passed as a parameter to [action].\n *\n * @sample samples.misc.ControlFlow.repeat\n */\n@kotlin.internal.InlineOnly\npublic inline fun repeat(times: Int, action: (Int) -> Unit) {\n contract { callsInPlace(action) }\n\n for (index in 0 until times) {\n action(index)\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\n/**\n * Given an [iterator] function constructs an [Iterable] instance that returns values through the [Iterator]\n * provided by that function.\n * @sample samples.collections.Iterables.Building.iterable\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable(crossinline iterator: () -> Iterator<T>): Iterable<T> = object : Iterable<T> {\n override fun iterator(): Iterator<T> = iterator()\n}\n\n/**\n * A wrapper over another [Iterable] (or any other object that can produce an [Iterator]) that returns\n * an indexing iterator.\n */\ninternal class IndexingIterable<out T>(private val iteratorFactory: () -> Iterator<T>) : Iterable<IndexedValue<T>> {\n override fun iterator(): Iterator<IndexedValue<T>> = IndexingIterator(iteratorFactory())\n}\n\n\n/**\n * Returns the size of this iterable if it is known, or `null` otherwise.\n */\n@PublishedApi\ninternal fun <T> Iterable<T>.collectionSizeOrNull(): Int? = if (this is Collection<*>) this.size else null\n\n/**\n * Returns the size of this iterable if it is known, or the specified [default] value otherwise.\n */\n@PublishedApi\ninternal fun <T> Iterable<T>.collectionSizeOrDefault(default: Int): Int = if (this is Collection<*>) this.size else default\n\n/** Returns true when it's safe to convert this collection to a set without changing contains method behavior. */\nprivate fun <T> Collection<T>.safeToConvertToSet() = size > 2 && this is ArrayList\n\n/** Converts this collection to a set, when it's worth so and it doesn't change contains method behavior. */\ninternal fun <T> Iterable<T>.convertToSetForSetOperationWith(source: Iterable<T>): Collection<T> =\n when (this) {\n is Set -> this\n is Collection ->\n when {\n source is Collection && source.size < 2 -> this\n else -> if (this.safeToConvertToSet()) toHashSet() else this\n }\n else -> toHashSet()\n }\n\n/** Converts this collection to a set, when it's worth so and it doesn't change contains method behavior. */\ninternal fun <T> Iterable<T>.convertToSetForSetOperation(): Collection<T> =\n when (this) {\n is Set -> this\n is Collection -> if (this.safeToConvertToSet()) toHashSet() else this\n else -> toHashSet()\n }\n\n\n/**\n * Returns a single list of all elements from all collections in the given collection.\n * @sample samples.collections.Iterables.Operations.flattenIterable\n */\npublic fun <T> Iterable<Iterable<T>>.flatten(): List<T> {\n val result = ArrayList<T>()\n for (element in this) {\n result.addAll(element)\n }\n return result\n}\n\n/**\n * Returns a pair of lists, where\n * *first* list is built from the first values of each pair from this collection,\n * *second* list is built from the second values of each pair from this collection.\n * @sample samples.collections.Iterables.Operations.unzipIterable\n */\npublic fun <T, R> Iterable<Pair<T, R>>.unzip(): Pair<List<T>, List<R>> {\n val expectedSize = collectionSizeOrDefault(10)\n val listT = ArrayList<T>(expectedSize)\n val listR = ArrayList<R>(expectedSize)\n for (pair in this) {\n listT.add(pair.first)\n listR.add(pair.second)\n }\n return listT to listR\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"SequencesKt\")\n\npackage kotlin.sequences\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\n\n/**\n * Returns `true` if [element] is found in the sequence.\n *\n * The operation is _terminal_.\n */\npublic operator fun <@kotlin.internal.OnlyInputTypes T> Sequence<T>.contains(element: T): Boolean {\n return indexOf(element) >= 0\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic fun <T> Sequence<T>.elementAt(index: Int): T {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"Sequence doesn't contain element at index $index.\") }\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\npublic fun <T> Sequence<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n if (index < 0)\n return defaultValue(index)\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\npublic fun <T> Sequence<T>.elementAtOrNull(index: Int): T? {\n if (index < 0)\n return null\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.find(predicate: (T) -> Boolean): T? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the sequence is empty.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.first(): T {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Sequence is empty.\")\n return iterator.next()\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.first(predicate: (T) -> Boolean): T {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Sequence contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element, or `null` if the sequence is empty.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.firstOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n return iterator.next()\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.firstOrNull(predicate: (T) -> Boolean): T? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns first index of [element], or -1 if the sequence does not contain element.\n *\n * The operation is _terminal_.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Sequence<T>.indexOf(element: T): Int {\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the sequence does not contain such element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the sequence does not contain such element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.indexOfLast(predicate: (T) -> Boolean): Int {\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns the last element.\n *\n * The operation is _terminal_.\n * \n * @throws NoSuchElementException if the sequence is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Sequence<T>.last(): T {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Sequence is empty.\")\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n}\n\n/**\n * Returns the last element matching the given [predicate].\n *\n * The operation is _terminal_.\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Sequence<T>.last(predicate: (T) -> Boolean): T {\n var last: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n last = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Sequence contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return last as T\n}\n\n/**\n * Returns last index of [element], or -1 if the sequence does not contain element.\n *\n * The operation is _terminal_.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Sequence<T>.lastIndexOf(element: T): Int {\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns the last element, or `null` if the sequence is empty.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Sequence<T>.lastOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Sequence<T>.lastOrNull(predicate: (T) -> Boolean): T? {\n var last: T? = null\n for (element in this) {\n if (predicate(element)) {\n last = element\n }\n }\n return last\n}\n\n/**\n * Returns the single element, or throws an exception if the sequence is empty or has more than one element.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.single(): T {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Sequence is empty.\")\n val single = iterator.next()\n if (iterator.hasNext())\n throw IllegalArgumentException(\"Sequence has more than one element.\")\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.single(predicate: (T) -> Boolean): T {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Sequence contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Sequence contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as T\n}\n\n/**\n * Returns single element, or `null` if the sequence is empty or has more than one element.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.singleOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n val single = iterator.next()\n if (iterator.hasNext())\n return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.singleOrNull(predicate: (T) -> Boolean): T? {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a sequence containing all elements except first [n] elements.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Sequence<T>.drop(n: Int): Sequence<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return when {\n n == 0 -> this\n this is DropTakeSequence -> this.drop(n)\n else -> DropSequence(this, n)\n }\n}\n\n/**\n * Returns a sequence containing all elements except first elements that satisfy the given [predicate].\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Sequence<T>.dropWhile(predicate: (T) -> Boolean): Sequence<T> {\n return DropWhileSequence(this, predicate)\n}\n\n/**\n * Returns a sequence containing only elements matching the given [predicate].\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic fun <T> Sequence<T>.filter(predicate: (T) -> Boolean): Sequence<T> {\n return FilteringSequence(this, true, predicate)\n}\n\n/**\n * Returns a sequence containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic fun <T> Sequence<T>.filterIndexed(predicate: (index: Int, T) -> Boolean): Sequence<T> {\n // TODO: Rewrite with generalized MapFilterIndexingSequence\n return TransformingSequence(FilteringSequence(IndexingSequence(this), true, { predicate(it.index, it.value) }), { it.value })\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Sequence<T>.filterIndexedTo(destination: C, predicate: (index: Int, T) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Returns a sequence containing all elements that are instances of specified type parameter R.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstance\n */\npublic inline fun <reified R> Sequence<*>.filterIsInstance(): Sequence<@kotlin.internal.NoInfer R> {\n @Suppress(\"UNCHECKED_CAST\")\n return filter { it is R } as Sequence<R>\n}\n\n/**\n * Appends all elements that are instances of specified type parameter R to the given [destination].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstanceTo\n */\npublic inline fun <reified R, C : MutableCollection<in R>> Sequence<*>.filterIsInstanceTo(destination: C): C {\n for (element in this) if (element is R) destination.add(element)\n return destination\n}\n\n/**\n * Returns a sequence containing all elements not matching the given [predicate].\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic fun <T> Sequence<T>.filterNot(predicate: (T) -> Boolean): Sequence<T> {\n return FilteringSequence(this, false, predicate)\n}\n\n/**\n * Returns a sequence containing all elements that are not `null`.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Filtering.filterNotNull\n */\npublic fun <T : Any> Sequence<T?>.filterNotNull(): Sequence<T> {\n @Suppress(\"UNCHECKED_CAST\")\n return filterNot { it == null } as Sequence<T>\n}\n\n/**\n * Appends all elements that are not `null` to the given [destination].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Filtering.filterNotNullTo\n */\npublic fun <C : MutableCollection<in T>, T : Any> Sequence<T?>.filterNotNullTo(destination: C): C {\n for (element in this) if (element != null) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Sequence<T>.filterNotTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Sequence<T>.filterTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Returns a sequence containing first [n] elements.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Sequence<T>.take(n: Int): Sequence<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return when {\n n == 0 -> emptySequence()\n this is DropTakeSequence -> this.take(n)\n else -> TakeSequence(this, n)\n }\n}\n\n/**\n * Returns a sequence containing first elements satisfying the given [predicate].\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Sequence<T>.takeWhile(predicate: (T) -> Boolean): Sequence<T> {\n return TakeWhileSequence(this, predicate)\n}\n\n/**\n * Returns a sequence that yields elements of this sequence sorted according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic fun <T : Comparable<T>> Sequence<T>.sorted(): Sequence<T> {\n return object : Sequence<T> {\n override fun iterator(): Iterator<T> {\n val sortedList = this@sorted.toMutableList()\n sortedList.sort()\n return sortedList.iterator()\n }\n }\n}\n\n/**\n * Returns a sequence that yields elements of this sequence sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n *\n * The operation is _intermediate_ and _stateful_.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <T, R : Comparable<R>> Sequence<T>.sortedBy(crossinline selector: (T) -> R?): Sequence<T> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a sequence that yields elements of this sequence sorted descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic inline fun <T, R : Comparable<R>> Sequence<T>.sortedByDescending(crossinline selector: (T) -> R?): Sequence<T> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a sequence that yields elements of this sequence sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic fun <T : Comparable<T>> Sequence<T>.sortedDescending(): Sequence<T> {\n return sortedWith(reverseOrder())\n}\n\n/**\n * Returns a sequence that yields elements of this sequence sorted according to the specified [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic fun <T> Sequence<T>.sortedWith(comparator: Comparator<in T>): Sequence<T> {\n return object : Sequence<T> {\n override fun iterator(): Iterator<T> {\n val sortedList = this@sortedWith.toMutableList()\n sortedList.sortWith(comparator)\n return sortedList.iterator()\n }\n }\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given sequence.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associate\n */\npublic inline fun <T, K, V> Sequence<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V> {\n return associateTo(LinkedHashMap<K, V>(), transform)\n}\n\n/**\n * Returns a [Map] containing the elements from the given sequence indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateBy\n */\npublic inline fun <T, K> Sequence<T>.associateBy(keySelector: (T) -> K): Map<K, T> {\n return associateByTo(LinkedHashMap<K, T>(), keySelector)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given sequence.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateByWithValueTransform\n */\npublic inline fun <T, K, V> Sequence<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V> {\n return associateByTo(LinkedHashMap<K, V>(), keySelector, valueTransform)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given sequence\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateByTo\n */\npublic inline fun <T, K, M : MutableMap<in K, in T>> Sequence<T>.associateByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given sequence.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateByToWithValueTransform\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Sequence<T>.associateByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given sequence.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateTo\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Sequence<T>.associateTo(destination: M, transform: (T) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Returns a [Map] where keys are elements from the given sequence and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V> Sequence<K>.associateWith(valueSelector: (K) -> V): Map<K, V> {\n val result = LinkedHashMap<K, V>()\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given sequence,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V, M : MutableMap<in K, in V>> Sequence<K>.associateWithTo(destination: M, valueSelector: (K) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n *\n * The operation is _terminal_.\n */\npublic fun <T, C : MutableCollection<in T>> Sequence<T>.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.toHashSet(): HashSet<T> {\n return toCollection(HashSet<T>())\n}\n\n/**\n * Returns a [List] containing all elements.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.toList(): List<T> {\n return this.toMutableList().optimizeReadOnlyList()\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this sequence.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.toMutableList(): MutableList<T> {\n return toCollection(ArrayList<T>())\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original sequence.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.toSet(): Set<T> {\n return toCollection(LinkedHashSet<T>()).optimizeReadOnlySet()\n}\n\n/**\n * Returns a single sequence of all elements from results of [transform] function being invoked on each element of original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIterable\")\npublic fun <T, R> Sequence<T>.flatMap(transform: (T) -> Iterable<R>): Sequence<R> {\n return FlatteningSequence(this, transform, Iterable<R>::iterator)\n}\n\n/**\n * Returns a single sequence of all elements from results of [transform] function being invoked on each element of original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic fun <T, R> Sequence<T>.flatMap(transform: (T) -> Sequence<R>): Sequence<R> {\n return FlatteningSequence(this, transform, Sequence<R>::iterator)\n}\n\n/**\n * Returns a single sequence of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\npublic fun <T, R> Sequence<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): Sequence<R> {\n return flatMapIndexed(this, transform, Iterable<R>::iterator)\n}\n\n/**\n * Returns a single sequence of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequence\")\npublic fun <T, R> Sequence<T>.flatMapIndexed(transform: (index: Int, T) -> Sequence<R>): Sequence<R> {\n return flatMapIndexed(this, transform, Sequence<R>::iterator)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original sequence, to the given [destination].\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original sequence, to the given [destination].\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequenceTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Sequence<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original sequence, to the given [destination].\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIterableTo\")\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.flatMapTo(destination: C, transform: (T) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original sequence, to the given [destination].\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.flatMapTo(destination: C, transform: (T) -> Sequence<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups elements of the original sequence by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K> Sequence<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {\n return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original sequence\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original sequence.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V> Sequence<T>.groupBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups elements of the original sequence by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Sequence<T>.groupByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<T>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original sequence\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Sequence<T>.groupByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Creates a [Grouping] source from a sequence to be used later with one of group-and-fold operations\n * using the specified [keySelector] function to extract a key from each element.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K> Sequence<T>.groupingBy(crossinline keySelector: (T) -> K): Grouping<T, K> {\n return object : Grouping<T, K> {\n override fun sourceIterator(): Iterator<T> = this@groupingBy.iterator()\n override fun keyOf(element: T): K = keySelector(element)\n }\n}\n\n/**\n * Returns a sequence containing the results of applying the given [transform] function\n * to each element in the original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic fun <T, R> Sequence<T>.map(transform: (T) -> R): Sequence<R> {\n return TransformingSequence(this, transform)\n}\n\n/**\n * Returns a sequence containing the results of applying the given [transform] function\n * to each element and its index in the original sequence.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic fun <T, R> Sequence<T>.mapIndexed(transform: (index: Int, T) -> R): Sequence<R> {\n return TransformingIndexedSequence(this, transform)\n}\n\n/**\n * Returns a sequence containing only the non-null results of applying the given [transform] function\n * to each element and its index in the original sequence.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic fun <T, R : Any> Sequence<T>.mapIndexedNotNull(transform: (index: Int, T) -> R?): Sequence<R> {\n return TransformingIndexedSequence(this, transform).filterNotNull()\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original sequence\n * and appends only the non-null results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Sequence<T>.mapIndexedNotNullTo(destination: C, transform: (index: Int, T) -> R?): C {\n forEachIndexed { index, element -> transform(index, element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original sequence\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.mapIndexedTo(destination: C, transform: (index: Int, T) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(checkIndexOverflow(index++), item))\n return destination\n}\n\n/**\n * Returns a sequence containing only the non-null results of applying the given [transform] function\n * to each element in the original sequence.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.mapNotNull\n */\npublic fun <T, R : Any> Sequence<T>.mapNotNull(transform: (T) -> R?): Sequence<R> {\n return TransformingSequence(this, transform).filterNotNull()\n}\n\n/**\n * Applies the given [transform] function to each element in the original sequence\n * and appends only the non-null results to the given [destination].\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Sequence<T>.mapNotNullTo(destination: C, transform: (T) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original sequence\n * and appends the results to the given [destination].\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Sequence<T>.mapTo(destination: C, transform: (T) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a sequence that wraps each element of the original sequence\n * into an [IndexedValue] containing the index of that element and the element itself.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic fun <T> Sequence<T>.withIndex(): Sequence<IndexedValue<T>> {\n return IndexingSequence(this)\n}\n\n/**\n * Returns a sequence containing only distinct elements from the given sequence.\n * \n * Among equal elements of the given sequence, only the first one will be present in the resulting sequence.\n * The elements in the resulting sequence are in the same order as they were in the source sequence.\n *\n * The operation is _intermediate_ and _stateful_.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun <T> Sequence<T>.distinct(): Sequence<T> {\n return this.distinctBy { it }\n}\n\n/**\n * Returns a sequence containing only elements from the given sequence\n * having distinct keys returned by the given [selector] function.\n * \n * Among elements of the given sequence with equal keys, only the first one will be present in the resulting sequence.\n * The elements in the resulting sequence are in the same order as they were in the source sequence.\n *\n * The operation is _intermediate_ and _stateful_.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun <T, K> Sequence<T>.distinctBy(selector: (T) -> K): Sequence<T> {\n return DistinctSequence(this, selector)\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given sequence.\n * \n * The returned set preserves the element iteration order of the original sequence.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.toMutableSet(): MutableSet<T> {\n val set = LinkedHashSet<T>()\n for (item in this) set.add(item)\n return set\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun <T> Sequence<T>.all(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if sequence has at least one element.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun <T> Sequence<T>.any(): Boolean {\n return iterator().hasNext()\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun <T> Sequence<T>.any(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of elements in this sequence.\n *\n * The operation is _terminal_.\n */\npublic fun <T> Sequence<T>.count(): Int {\n var count = 0\n for (element in this) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.count(predicate: (T) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the sequence is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R> Sequence<T>.fold(initial: R, operation: (acc: R, T) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original sequence.\n * \n * Returns the specified [initial] value if the sequence is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T, R> Sequence<T>.foldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(checkIndexOverflow(index++), accumulator, element)\n return accumulator\n}\n\n/**\n * Performs the given [action] on each element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.forEach(action: (T) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {\n var index = 0\n for (item in this) action(checkIndexOverflow(index++), item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Sequence<Double>.max(): Double? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Sequence<Float>.max(): Float? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Sequence<T>.max(): T? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Sequence<T>.maxBy(selector: (T) -> R): T? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Sequence<T>.maxByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxElem = iterator.next()\n if (!iterator.hasNext()) return maxElem\n var maxValue = selector(maxElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n } while (iterator.hasNext())\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.maxOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.maxOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Sequence<T>.maxOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.maxOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.maxOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Sequence<T>.maxOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the sequence.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Sequence<T>.maxOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the sequence or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Sequence<T>.maxOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun Sequence<Double>.maxOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun Sequence<Float>.maxOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Sequence<T>.maxOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Sequence<T>.maxWith(comparator: Comparator<in T>): T? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Sequence<T>.maxWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Sequence<Double>.min(): Double? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Sequence<Float>.min(): Float? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Sequence<T>.min(): T? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Sequence<T>.minBy(selector: (T) -> R): T? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Sequence<T>.minByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minElem = iterator.next()\n if (!iterator.hasNext()) return minElem\n var minValue = selector(minElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n } while (iterator.hasNext())\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.minOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.minOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Sequence<T>.minOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.minOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.minOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the sequence or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Sequence<T>.minOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the sequence.\n * \n * @throws NoSuchElementException if the sequence is empty.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Sequence<T>.minOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the sequence or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Sequence<T>.minOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun Sequence<Double>.minOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun Sequence<Float>.minOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Sequence<T>.minOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Sequence<T>.minWith(comparator: Comparator<in T>): T? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Sequence<T>.minWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the sequence has no elements.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun <T> Sequence<T>.none(): Boolean {\n return !iterator().hasNext()\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun <T> Sequence<T>.none(predicate: (T) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns a sequence which performs the given [action] on each element of the original sequence as they pass through it.\n *\n * The operation is _intermediate_ and _stateless_.\n */\n@SinceKotlin(\"1.1\")\npublic fun <T> Sequence<T>.onEach(action: (T) -> Unit): Sequence<T> {\n return map {\n action(it)\n it\n }\n}\n\n/**\n * Returns a sequence which performs the given [action] on each element of the original sequence as they pass through it.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n *\n * The operation is _intermediate_ and _stateless_.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Sequence<T>.onEachIndexed(action: (index: Int, T) -> Unit): Sequence<T> {\n return mapIndexed { index, element ->\n action(index, element)\n element\n }\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this sequence is empty. If the sequence can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Sequence<T>.reduce(operation: (acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty sequence can't be reduced.\")\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original sequence.\n * \n * Throws an exception if this sequence is empty. If the sequence can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Sequence<T>.reduceIndexed(operation: (index: Int, acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty sequence can't be reduced.\")\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original sequence.\n * \n * Returns `null` if the sequence is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Sequence<T>.reduceIndexedOrNull(operation: (index: Int, acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the sequence is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Sequence<T>.reduceOrNull(operation: (acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * The [initial] value should also be immutable (or should not be mutated)\n * as it may be passed to [operation] function later because of sequence's lazy nature.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic fun <T, R> Sequence<T>.runningFold(initial: R, operation: (acc: R, T) -> R): Sequence<R> {\n return sequence {\n yield(initial)\n var accumulator = initial\n for (element in this@runningFold) {\n accumulator = operation(accumulator, element)\n yield(accumulator)\n }\n }\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original sequence and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * The [initial] value should also be immutable (or should not be mutated)\n * as it may be passed to [operation] function later because of sequence's lazy nature.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic fun <T, R> Sequence<T>.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): Sequence<R> {\n return sequence {\n yield(initial)\n var index = 0\n var accumulator = initial\n for (element in this@runningFoldIndexed) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, element)\n yield(accumulator)\n }\n }\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this sequence.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * \n * @param [operation] function that takes current accumulator value and the element, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <S, T : S> Sequence<T>.runningReduce(operation: (acc: S, T) -> S): Sequence<S> {\n return sequence {\n val iterator = iterator()\n if (iterator.hasNext()) {\n var accumulator: S = iterator.next()\n yield(accumulator)\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n yield(accumulator)\n }\n }\n }\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original sequence and current accumulator value that starts with the first element of this sequence.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic fun <S, T : S> Sequence<T>.runningReduceIndexed(operation: (index: Int, acc: S, T) -> S): Sequence<S> {\n return sequence {\n val iterator = iterator()\n if (iterator.hasNext()) {\n var accumulator: S = iterator.next()\n yield(accumulator)\n var index = 1\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n yield(accumulator)\n }\n }\n }\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * The [initial] value should also be immutable (or should not be mutated)\n * as it may be passed to [operation] function later because of sequence's lazy nature.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T, R> Sequence<T>.scan(initial: R, operation: (acc: R, T) -> R): Sequence<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a sequence containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original sequence and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting sequence.\n * The [initial] value should also be immutable (or should not be mutated)\n * as it may be passed to [operation] function later because of sequence's lazy nature.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T, R> Sequence<T>.scanIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): Sequence<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic fun <S, T : S> Sequence<T>.scanReduce(operation: (acc: S, T) -> S): Sequence<S> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic fun <S, T : S> Sequence<T>.scanReduceIndexed(operation: (index: Int, acc: S, T) -> S): Sequence<S> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.sumBy(selector: (T) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\npublic inline fun <T> Sequence<T>.sumByDouble(selector: (T) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.sumOf(selector: (T) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.sumOf(selector: (T) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.sumOf(selector: (T) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.sumOf(selector: (T) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the sequence.\n *\n * The operation is _terminal_.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.sumOf(selector: (T) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic fun <T : Any> Sequence<T?>.requireNoNulls(): Sequence<T> {\n return map { it ?: throw IllegalArgumentException(\"null element found in $this.\") }\n}\n\n/**\n * Splits this sequence into a sequence of lists each not exceeding the given [size].\n * \n * The last list in the resulting sequence may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this sequence.\n *\n * The operation is _intermediate_ and _stateful_.\n * \n * @sample samples.collections.Collections.Transformations.chunked\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Sequence<T>.chunked(size: Int): Sequence<List<T>> {\n return windowed(size, size, partialWindows = true)\n}\n\n/**\n * Splits this sequence into several lists each not exceeding the given [size]\n * and applies the given [transform] function to an each.\n * \n * @return sequence of results of the [transform] applied to an each list.\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * The last list may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this sequence.\n *\n * The operation is _intermediate_ and _stateful_.\n * \n * @sample samples.text.Strings.chunkedTransform\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Sequence<T>.chunked(size: Int, transform: (List<T>) -> R): Sequence<R> {\n return windowed(size, size, partialWindows = true, transform = transform)\n}\n\n/**\n * Returns a sequence containing all elements of the original sequence without the first occurrence of the given [element].\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic operator fun <T> Sequence<T>.minus(element: T): Sequence<T> {\n return object: Sequence<T> {\n override fun iterator(): Iterator<T> {\n var removed = false\n return this@minus.filter { if (!removed && it == element) { removed = true; false } else true }.iterator()\n }\n }\n}\n\n/**\n * Returns a sequence containing all elements of original sequence except the elements contained in the given [elements] array.\n * \n * Note that the source sequence and the array being subtracted are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n * \n * The [elements] array may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic operator fun <T> Sequence<T>.minus(elements: Array<out T>): Sequence<T> {\n if (elements.isEmpty()) return this\n return object: Sequence<T> {\n override fun iterator(): Iterator<T> {\n val other = elements.toHashSet()\n return this@minus.filterNot { it in other }.iterator()\n }\n }\n}\n\n/**\n * Returns a sequence containing all elements of original sequence except the elements contained in the given [elements] collection.\n * \n * Note that the source sequence and the collection being subtracted are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n * \n * The [elements] collection may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n *\n * The operation is _intermediate_ and _stateful_.\n */\npublic operator fun <T> Sequence<T>.minus(elements: Iterable<T>): Sequence<T> {\n return object: Sequence<T> {\n override fun iterator(): Iterator<T> {\n val other = elements.convertToSetForSetOperation()\n if (other.isEmpty())\n return this@minus.iterator()\n else\n return this@minus.filterNot { it in other }.iterator()\n }\n }\n}\n\n/**\n * Returns a sequence containing all elements of original sequence except the elements contained in the given [elements] sequence.\n * \n * Note that the source sequence and the sequence being subtracted are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n * \n * The operation is _intermediate_ for this sequence and _terminal_ and _stateful_ for the [elements] sequence.\n * \n * The [elements] sequence may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Sequence<T>.minus(elements: Sequence<T>): Sequence<T> {\n return object: Sequence<T> {\n override fun iterator(): Iterator<T> {\n val other = elements.toHashSet()\n if (other.isEmpty())\n return this@minus.iterator()\n else\n return this@minus.filterNot { it in other }.iterator()\n }\n }\n}\n\n/**\n * Returns a sequence containing all elements of the original sequence without the first occurrence of the given [element].\n *\n * The operation is _intermediate_ and _stateless_.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.minusElement(element: T): Sequence<T> {\n return minus(element)\n}\n\n/**\n * Splits the original sequence into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Sequences.Transformations.partition\n */\npublic inline fun <T> Sequence<T>.partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {\n val first = ArrayList<T>()\n val second = ArrayList<T>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Returns a sequence containing all elements of the original sequence and then the given [element].\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic operator fun <T> Sequence<T>.plus(element: T): Sequence<T> {\n return sequenceOf(this, sequenceOf(element)).flatten()\n}\n\n/**\n * Returns a sequence containing all elements of original sequence and then all elements of the given [elements] array.\n * \n * Note that the source sequence and the array being added are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic operator fun <T> Sequence<T>.plus(elements: Array<out T>): Sequence<T> {\n return this.plus(elements.asList())\n}\n\n/**\n * Returns a sequence containing all elements of original sequence and then all elements of the given [elements] collection.\n * \n * Note that the source sequence and the collection being added are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic operator fun <T> Sequence<T>.plus(elements: Iterable<T>): Sequence<T> {\n return sequenceOf(this, elements.asSequence()).flatten()\n}\n\n/**\n * Returns a sequence containing all elements of original sequence and then all elements of the given [elements] sequence.\n * \n * Note that the source sequence and the sequence being added are iterated only when an `iterator` is requested from\n * the resulting sequence. Changing any of them between successive calls to `iterator` may affect the result.\n *\n * The operation is _intermediate_ and _stateless_.\n */\npublic operator fun <T> Sequence<T>.plus(elements: Sequence<T>): Sequence<T> {\n return sequenceOf(this, elements).flatten()\n}\n\n/**\n * Returns a sequence containing all elements of the original sequence and then the given [element].\n *\n * The operation is _intermediate_ and _stateless_.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.plusElement(element: T): Sequence<T> {\n return plus(element)\n}\n\n/**\n * Returns a sequence of snapshots of the window of the given [size]\n * sliding along this sequence with the given [step], where each\n * snapshot is a list.\n * \n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.takeWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Sequence<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): Sequence<List<T>> {\n return windowedSequence(size, step, partialWindows, reuseBuffer = false)\n}\n\n/**\n * Returns a sequence of results of applying the given [transform] function to\n * an each list representing a view over the window of the given [size]\n * sliding along this sequence with the given [step].\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.averageWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Sequence<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (List<T>) -> R): Sequence<R> {\n return windowedSequence(size, step, partialWindows, reuseBuffer = true).map(transform)\n}\n\n/**\n * Returns a sequence of values built from the elements of `this` sequence and the [other] sequence with the same index.\n * The resulting sequence ends as soon as the shortest input sequence ends.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Sequences.Transformations.zip\n */\npublic infix fun <T, R> Sequence<T>.zip(other: Sequence<R>): Sequence<Pair<T, R>> {\n return MergingSequence(this, other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a sequence of values built from the elements of `this` sequence and the [other] sequence with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The resulting sequence ends as soon as the shortest input sequence ends.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Sequences.Transformations.zipWithTransform\n */\npublic fun <T, R, V> Sequence<T>.zip(other: Sequence<R>, transform: (a: T, b: R) -> V): Sequence<V> {\n return MergingSequence(this, other, transform)\n}\n\n/**\n * Returns a sequence of pairs of each two adjacent elements in this sequence.\n * \n * The returned sequence is empty if this sequence contains less than two elements.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNext\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Sequence<T>.zipWithNext(): Sequence<Pair<T, T>> {\n return zipWithNext { a, b -> a to b }\n}\n\n/**\n * Returns a sequence containing the results of applying the given [transform] function\n * to an each pair of two adjacent elements in this sequence.\n * \n * The returned sequence is empty if this sequence contains less than two elements.\n *\n * The operation is _intermediate_ and _stateless_.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNextToFindDeltas\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Sequence<T>.zipWithNext(transform: (a: T, b: T) -> R): Sequence<R> {\n return sequence result@ {\n val iterator = iterator()\n if (!iterator.hasNext()) return@result\n var current = iterator.next()\n while (iterator.hasNext()) {\n val next = iterator.next()\n yield(transform(current, next))\n current = next\n }\n }\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <T, A : Appendable> Sequence<T>.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n buffer.appendElement(element, transform)\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n *\n * The operation is _terminal_.\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun <T> Sequence<T>.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original sequence returning its elements when being iterated.\n */\npublic fun <T> Sequence<T>.asIterable(): Iterable<T> {\n return Iterable { this.iterator() }\n}\n\n/**\n * Returns this sequence as a [Sequence].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Sequence<T>.asSequence(): Sequence<T> {\n return this\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfByte\")\npublic fun Sequence<Byte>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfShort\")\npublic fun Sequence<Short>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfInt\")\npublic fun Sequence<Int>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfLong\")\npublic fun Sequence<Long>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfFloat\")\npublic fun Sequence<Float>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"averageOfDouble\")\npublic fun Sequence<Double>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfByte\")\npublic fun Sequence<Byte>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfShort\")\npublic fun Sequence<Short>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfInt\")\npublic fun Sequence<Int>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfLong\")\npublic fun Sequence<Long>.sum(): Long {\n var sum: Long = 0L\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfFloat\")\npublic fun Sequence<Float>.sum(): Float {\n var sum: Float = 0.0f\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the sequence.\n *\n * The operation is _terminal_.\n */\n@kotlin.jvm.JvmName(\"sumOfDouble\")\npublic fun Sequence<Double>.sum(): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\n\n/**\n * Returns a character at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this char sequence.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic expect fun CharSequence.elementAt(index: Int): Char\n\n/**\n * Returns a character at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this char sequence.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.elementAtOrElse(index: Int, defaultValue: (Int) -> Char): Char {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns a character at the given [index] or `null` if the [index] is out of bounds of this char sequence.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.elementAtOrNull(index: Int): Char? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns the first character matching the given [predicate], or `null` if no such character was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.find(predicate: (Char) -> Boolean): Char? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last character matching the given [predicate], or `null` if no such character was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.findLast(predicate: (Char) -> Boolean): Char? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first character.\n * @throws [NoSuchElementException] if the char sequence is empty.\n */\npublic fun CharSequence.first(): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Char sequence is empty.\")\n return this[0]\n}\n\n/**\n * Returns the first character matching the given [predicate].\n * @throws [NoSuchElementException] if no such character is found.\n */\npublic inline fun CharSequence.first(predicate: (Char) -> Boolean): Char {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Char sequence contains no character matching the predicate.\")\n}\n\n/**\n * Returns the first character, or `null` if the char sequence is empty.\n */\npublic fun CharSequence.firstOrNull(): Char? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first character matching the given [predicate], or `null` if character was not found.\n */\npublic inline fun CharSequence.firstOrNull(predicate: (Char) -> Boolean): Char? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns a character at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this char sequence.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.getOrElse(index: Int, defaultValue: (Int) -> Char): Char {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns a character at the given [index] or `null` if the [index] is out of bounds of this char sequence.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun CharSequence.getOrNull(index: Int): Char? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns index of the first character matching the given [predicate], or -1 if the char sequence does not contain such character.\n */\npublic inline fun CharSequence.indexOfFirst(predicate: (Char) -> Boolean): Int {\n for (index in indices) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns index of the last character matching the given [predicate], or -1 if the char sequence does not contain such character.\n */\npublic inline fun CharSequence.indexOfLast(predicate: (Char) -> Boolean): Int {\n for (index in indices.reversed()) {\n if (predicate(this[index])) {\n return index\n }\n }\n return -1\n}\n\n/**\n * Returns the last character.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n * \n * @sample samples.text.Strings.last\n */\npublic fun CharSequence.last(): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Char sequence is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last character matching the given [predicate].\n * \n * @throws NoSuchElementException if no such character is found.\n * \n * @sample samples.text.Strings.last\n */\npublic inline fun CharSequence.last(predicate: (Char) -> Boolean): Char {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Char sequence contains no character matching the predicate.\")\n}\n\n/**\n * Returns the last character, or `null` if the char sequence is empty.\n * \n * @sample samples.text.Strings.last\n */\npublic fun CharSequence.lastOrNull(): Char? {\n return if (isEmpty()) null else this[length - 1]\n}\n\n/**\n * Returns the last character matching the given [predicate], or `null` if no such character was found.\n * \n * @sample samples.text.Strings.last\n */\npublic inline fun CharSequence.lastOrNull(predicate: (Char) -> Boolean): Char? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns a random character from this char sequence.\n * \n * @throws NoSuchElementException if this char sequence is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.random(): Char {\n return random(Random)\n}\n\n/**\n * Returns a random character from this char sequence using the specified source of randomness.\n * \n * @throws NoSuchElementException if this char sequence is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun CharSequence.random(random: Random): Char {\n if (isEmpty())\n throw NoSuchElementException(\"Char sequence is empty.\")\n return get(random.nextInt(length))\n}\n\n/**\n * Returns a random character from this char sequence, or `null` if this char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.randomOrNull(): Char? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random character from this char sequence using the specified source of randomness, or `null` if this char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun CharSequence.randomOrNull(random: Random): Char? {\n if (isEmpty())\n return null\n return get(random.nextInt(length))\n}\n\n/**\n * Returns the single character, or throws an exception if the char sequence is empty or has more than one character.\n */\npublic fun CharSequence.single(): Char {\n return when (length) {\n 0 -> throw NoSuchElementException(\"Char sequence is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"Char sequence has more than one element.\")\n }\n}\n\n/**\n * Returns the single character matching the given [predicate], or throws exception if there is no or more than one matching character.\n */\npublic inline fun CharSequence.single(predicate: (Char) -> Boolean): Char {\n var single: Char? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Char sequence contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Char sequence contains no character matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as Char\n}\n\n/**\n * Returns single character, or `null` if the char sequence is empty or has more than one character.\n */\npublic fun CharSequence.singleOrNull(): Char? {\n return if (length == 1) this[0] else null\n}\n\n/**\n * Returns the single character matching the given [predicate], or `null` if character was not found or more than one character was found.\n */\npublic inline fun CharSequence.singleOrNull(predicate: (Char) -> Boolean): Char? {\n var single: Char? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a subsequence of this char sequence with the first [n] characters removed.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.drop\n */\npublic fun CharSequence.drop(n: Int): CharSequence {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return subSequence(n.coerceAtMost(length), length)\n}\n\n/**\n * Returns a string with the first [n] characters removed.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.drop\n */\npublic fun String.drop(n: Int): String {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return substring(n.coerceAtMost(length))\n}\n\n/**\n * Returns a subsequence of this char sequence with the last [n] characters removed.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.drop\n */\npublic fun CharSequence.dropLast(n: Int): CharSequence {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return take((length - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a string with the last [n] characters removed.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.drop\n */\npublic fun String.dropLast(n: Int): String {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return take((length - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a subsequence of this char sequence containing all characters except last characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.drop\n */\npublic inline fun CharSequence.dropLastWhile(predicate: (Char) -> Boolean): CharSequence {\n for (index in lastIndex downTo 0)\n if (!predicate(this[index]))\n return subSequence(0, index + 1)\n return \"\"\n}\n\n/**\n * Returns a string containing all characters except last characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.drop\n */\npublic inline fun String.dropLastWhile(predicate: (Char) -> Boolean): String {\n for (index in lastIndex downTo 0)\n if (!predicate(this[index]))\n return substring(0, index + 1)\n return \"\"\n}\n\n/**\n * Returns a subsequence of this char sequence containing all characters except first characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.drop\n */\npublic inline fun CharSequence.dropWhile(predicate: (Char) -> Boolean): CharSequence {\n for (index in this.indices)\n if (!predicate(this[index]))\n return subSequence(index, length)\n return \"\"\n}\n\n/**\n * Returns a string containing all characters except first characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.drop\n */\npublic inline fun String.dropWhile(predicate: (Char) -> Boolean): String {\n for (index in this.indices)\n if (!predicate(this[index]))\n return substring(index)\n return \"\"\n}\n\n/**\n * Returns a char sequence containing only those characters from the original char sequence that match the given [predicate].\n * \n * @sample samples.text.Strings.filter\n */\npublic inline fun CharSequence.filter(predicate: (Char) -> Boolean): CharSequence {\n return filterTo(StringBuilder(), predicate)\n}\n\n/**\n * Returns a string containing only those characters from the original string that match the given [predicate].\n * \n * @sample samples.text.Strings.filter\n */\npublic inline fun String.filter(predicate: (Char) -> Boolean): String {\n return filterTo(StringBuilder(), predicate).toString()\n}\n\n/**\n * Returns a char sequence containing only those characters from the original char sequence that match the given [predicate].\n * @param [predicate] function that takes the index of a character and the character itself\n * and returns the result of predicate evaluation on the character.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun CharSequence.filterIndexed(predicate: (index: Int, Char) -> Boolean): CharSequence {\n return filterIndexedTo(StringBuilder(), predicate)\n}\n\n/**\n * Returns a string containing only those characters from the original string that match the given [predicate].\n * @param [predicate] function that takes the index of a character and the character itself\n * and returns the result of predicate evaluation on the character.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun String.filterIndexed(predicate: (index: Int, Char) -> Boolean): String {\n return filterIndexedTo(StringBuilder(), predicate).toString()\n}\n\n/**\n * Appends all characters matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of a character and the character itself\n * and returns the result of predicate evaluation on the character.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <C : Appendable> CharSequence.filterIndexedTo(destination: C, predicate: (index: Int, Char) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.append(element)\n }\n return destination\n}\n\n/**\n * Returns a char sequence containing only those characters from the original char sequence that do not match the given [predicate].\n * \n * @sample samples.text.Strings.filterNot\n */\npublic inline fun CharSequence.filterNot(predicate: (Char) -> Boolean): CharSequence {\n return filterNotTo(StringBuilder(), predicate)\n}\n\n/**\n * Returns a string containing only those characters from the original string that do not match the given [predicate].\n * \n * @sample samples.text.Strings.filterNot\n */\npublic inline fun String.filterNot(predicate: (Char) -> Boolean): String {\n return filterNotTo(StringBuilder(), predicate).toString()\n}\n\n/**\n * Appends all characters not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : Appendable> CharSequence.filterNotTo(destination: C, predicate: (Char) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.append(element)\n return destination\n}\n\n/**\n * Appends all characters matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <C : Appendable> CharSequence.filterTo(destination: C, predicate: (Char) -> Boolean): C {\n for (index in 0 until length) {\n val element = get(index)\n if (predicate(element)) destination.append(element)\n }\n return destination\n}\n\n/**\n * Returns a char sequence containing characters of the original char sequence at the specified range of [indices].\n */\npublic fun CharSequence.slice(indices: IntRange): CharSequence {\n if (indices.isEmpty()) return \"\"\n return subSequence(indices)\n}\n\n/**\n * Returns a string containing characters of the original string at the specified range of [indices].\n */\npublic fun String.slice(indices: IntRange): String {\n if (indices.isEmpty()) return \"\"\n return substring(indices)\n}\n\n/**\n * Returns a char sequence containing characters of the original char sequence at specified [indices].\n */\npublic fun CharSequence.slice(indices: Iterable<Int>): CharSequence {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return \"\"\n val result = StringBuilder(size)\n for (i in indices) {\n result.append(get(i))\n }\n return result\n}\n\n/**\n * Returns a string containing characters of the original string at specified [indices].\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.slice(indices: Iterable<Int>): String {\n return (this as CharSequence).slice(indices).toString()\n}\n\n/**\n * Returns a subsequence of this char sequence containing the first [n] characters from this char sequence, or the entire char sequence if this char sequence is shorter.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.take\n */\npublic fun CharSequence.take(n: Int): CharSequence {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return subSequence(0, n.coerceAtMost(length))\n}\n\n/**\n * Returns a string containing the first [n] characters from this string, or the entire string if this string is shorter.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.take\n */\npublic fun String.take(n: Int): String {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n return substring(0, n.coerceAtMost(length))\n}\n\n/**\n * Returns a subsequence of this char sequence containing the last [n] characters from this char sequence, or the entire char sequence if this char sequence is shorter.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.take\n */\npublic fun CharSequence.takeLast(n: Int): CharSequence {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n val length = length\n return subSequence(length - n.coerceAtMost(length), length)\n}\n\n/**\n * Returns a string containing the last [n] characters from this string, or the entire string if this string is shorter.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.text.Strings.take\n */\npublic fun String.takeLast(n: Int): String {\n require(n >= 0) { \"Requested character count $n is less than zero.\" }\n val length = length\n return substring(length - n.coerceAtMost(length))\n}\n\n/**\n * Returns a subsequence of this char sequence containing last characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.take\n */\npublic inline fun CharSequence.takeLastWhile(predicate: (Char) -> Boolean): CharSequence {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return subSequence(index + 1, length)\n }\n }\n return subSequence(0, length)\n}\n\n/**\n * Returns a string containing last characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.take\n */\npublic inline fun String.takeLastWhile(predicate: (Char) -> Boolean): String {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return substring(index + 1)\n }\n }\n return this\n}\n\n/**\n * Returns a subsequence of this char sequence containing the first characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.take\n */\npublic inline fun CharSequence.takeWhile(predicate: (Char) -> Boolean): CharSequence {\n for (index in 0 until length)\n if (!predicate(get(index))) {\n return subSequence(0, index)\n }\n return subSequence(0, length)\n}\n\n/**\n * Returns a string containing the first characters that satisfy the given [predicate].\n * \n * @sample samples.text.Strings.take\n */\npublic inline fun String.takeWhile(predicate: (Char) -> Boolean): String {\n for (index in 0 until length)\n if (!predicate(get(index))) {\n return substring(0, index)\n }\n return this\n}\n\n/**\n * Returns a char sequence with characters in reversed order.\n */\npublic fun CharSequence.reversed(): CharSequence {\n return StringBuilder(this).reverse()\n}\n\n/**\n * Returns a string with characters in reversed order.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.reversed(): String {\n return (this as CharSequence).reversed().toString()\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to characters of the given char sequence.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original char sequence.\n * \n * @sample samples.text.Strings.associate\n */\npublic inline fun <K, V> CharSequence.associate(transform: (Char) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(length).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing the characters from the given char sequence indexed by the key\n * returned from [keySelector] function applied to each character.\n * \n * If any two characters would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original char sequence.\n * \n * @sample samples.text.Strings.associateBy\n */\npublic inline fun <K> CharSequence.associateBy(keySelector: (Char) -> K): Map<K, Char> {\n val capacity = mapCapacity(length).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, Char>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to characters of the given char sequence.\n * \n * If any two characters would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original char sequence.\n * \n * @sample samples.text.Strings.associateByWithValueTransform\n */\npublic inline fun <K, V> CharSequence.associateBy(keySelector: (Char) -> K, valueTransform: (Char) -> V): Map<K, V> {\n val capacity = mapCapacity(length).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each character of the given char sequence\n * and value is the character itself.\n * \n * If any two characters would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.text.Strings.associateByTo\n */\npublic inline fun <K, M : MutableMap<in K, in Char>> CharSequence.associateByTo(destination: M, keySelector: (Char) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to characters of the given char sequence.\n * \n * If any two characters would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.text.Strings.associateByToWithValueTransform\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> CharSequence.associateByTo(destination: M, keySelector: (Char) -> K, valueTransform: (Char) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each character of the given char sequence.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.text.Strings.associateTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> CharSequence.associateTo(destination: M, transform: (Char) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Returns a [Map] where keys are characters from the given char sequence and values are\n * produced by the [valueSelector] function applied to each character.\n * \n * If any two characters are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original char sequence.\n * \n * @sample samples.text.Strings.associateWith\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <V> CharSequence.associateWith(valueSelector: (Char) -> V): Map<Char, V> {\n val result = LinkedHashMap<Char, V>(mapCapacity(length.coerceAtMost(128)).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each character of the given char sequence,\n * where key is the character itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two characters are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.text.Strings.associateWithTo\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <V, M : MutableMap<in Char, in V>> CharSequence.associateWithTo(destination: M, valueSelector: (Char) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Appends all characters to the given [destination] collection.\n */\npublic fun <C : MutableCollection<in Char>> CharSequence.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Returns a new [HashSet] of all characters.\n */\npublic fun CharSequence.toHashSet(): HashSet<Char> {\n return toCollection(HashSet<Char>(mapCapacity(length.coerceAtMost(128))))\n}\n\n/**\n * Returns a [List] containing all characters.\n */\npublic fun CharSequence.toList(): List<Char> {\n return when (length) {\n 0 -> emptyList()\n 1 -> listOf(this[0])\n else -> this.toMutableList()\n }\n}\n\n/**\n * Returns a new [MutableList] filled with all characters of this char sequence.\n */\npublic fun CharSequence.toMutableList(): MutableList<Char> {\n return toCollection(ArrayList<Char>(length))\n}\n\n/**\n * Returns a [Set] of all characters.\n * \n * The returned set preserves the element iteration order of the original char sequence.\n */\npublic fun CharSequence.toSet(): Set<Char> {\n return when (length) {\n 0 -> emptySet()\n 1 -> setOf(this[0])\n else -> toCollection(LinkedHashSet<Char>(mapCapacity(length.coerceAtMost(128))))\n }\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each character of original char sequence.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <R> CharSequence.flatMap(transform: (Char) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each character\n * and its index in the original char sequence.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharSequence.flatMapIndexed(transform: (index: Int, Char) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each character\n * and its index in the original char sequence, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> CharSequence.flatMapIndexedTo(destination: C, transform: (index: Int, Char) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each character of original char sequence, to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> CharSequence.flatMapTo(destination: C, transform: (Char) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups characters of the original char sequence by the key returned by the given [keySelector] function\n * applied to each character and returns a map where each group key is associated with a list of corresponding characters.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original char sequence.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K> CharSequence.groupBy(keySelector: (Char) -> K): Map<K, List<Char>> {\n return groupByTo(LinkedHashMap<K, MutableList<Char>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each character of the original char sequence\n * by the key returned by the given [keySelector] function applied to the character\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original char sequence.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V> CharSequence.groupBy(keySelector: (Char) -> K, valueTransform: (Char) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups characters of the original char sequence by the key returned by the given [keySelector] function\n * applied to each character and puts to the [destination] map each group key associated with a list of corresponding characters.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <K, M : MutableMap<in K, MutableList<Char>>> CharSequence.groupByTo(destination: M, keySelector: (Char) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<Char>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each character of the original char sequence\n * by the key returned by the given [keySelector] function applied to the character\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> CharSequence.groupByTo(destination: M, keySelector: (Char) -> K, valueTransform: (Char) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Creates a [Grouping] source from a char sequence to be used later with one of group-and-fold operations\n * using the specified [keySelector] function to extract a key from each character.\n * \n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <K> CharSequence.groupingBy(crossinline keySelector: (Char) -> K): Grouping<Char, K> {\n return object : Grouping<Char, K> {\n override fun sourceIterator(): Iterator<Char> = this@groupingBy.iterator()\n override fun keyOf(element: Char): K = keySelector(element)\n }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each character in the original char sequence.\n * \n * @sample samples.text.Strings.map\n */\npublic inline fun <R> CharSequence.map(transform: (Char) -> R): List<R> {\n return mapTo(ArrayList<R>(length), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each character and its index in the original char sequence.\n * @param [transform] function that takes the index of a character and the character itself\n * and returns the result of the transform applied to the character.\n */\npublic inline fun <R> CharSequence.mapIndexed(transform: (index: Int, Char) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(length), transform)\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each character and its index in the original char sequence.\n * @param [transform] function that takes the index of a character and the character itself\n * and returns the result of the transform applied to the character.\n */\npublic inline fun <R : Any> CharSequence.mapIndexedNotNull(transform: (index: Int, Char) -> R?): List<R> {\n return mapIndexedNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each character and its index in the original char sequence\n * and appends only the non-null results to the given [destination].\n * @param [transform] function that takes the index of a character and the character itself\n * and returns the result of the transform applied to the character.\n */\npublic inline fun <R : Any, C : MutableCollection<in R>> CharSequence.mapIndexedNotNullTo(destination: C, transform: (index: Int, Char) -> R?): C {\n forEachIndexed { index, element -> transform(index, element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each character and its index in the original char sequence\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of a character and the character itself\n * and returns the result of the transform applied to the character.\n */\npublic inline fun <R, C : MutableCollection<in R>> CharSequence.mapIndexedTo(destination: C, transform: (index: Int, Char) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each character in the original char sequence.\n * \n * @sample samples.collections.Collections.Transformations.mapNotNull\n */\npublic inline fun <R : Any> CharSequence.mapNotNull(transform: (Char) -> R?): List<R> {\n return mapNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each character in the original char sequence\n * and appends only the non-null results to the given [destination].\n */\npublic inline fun <R : Any, C : MutableCollection<in R>> CharSequence.mapNotNullTo(destination: C, transform: (Char) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each character of the original char sequence\n * and appends the results to the given [destination].\n */\npublic inline fun <R, C : MutableCollection<in R>> CharSequence.mapTo(destination: C, transform: (Char) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each character of the original char sequence\n * into an [IndexedValue] containing the index of that character and the character itself.\n */\npublic fun CharSequence.withIndex(): Iterable<IndexedValue<Char>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns `true` if all characters match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun CharSequence.all(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if char sequence has at least one character.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun CharSequence.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if at least one character matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun CharSequence.any(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the length of this char sequence.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.count(): Int {\n return length\n}\n\n/**\n * Returns the number of characters matching the given [predicate].\n */\npublic inline fun CharSequence.count(predicate: (Char) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each character.\n * \n * Returns the specified [initial] value if the char sequence is empty.\n * \n * @param [operation] function that takes current accumulator value and a character, and calculates the next accumulator value.\n */\npublic inline fun <R> CharSequence.fold(initial: R, operation: (acc: R, Char) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each character with its index in the original char sequence.\n * \n * Returns the specified [initial] value if the char sequence is empty.\n * \n * @param [operation] function that takes the index of a character, current accumulator value\n * and the character itself, and calculates the next accumulator value.\n */\npublic inline fun <R> CharSequence.foldIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each character and current accumulator value.\n * \n * Returns the specified [initial] value if the char sequence is empty.\n * \n * @param [operation] function that takes a character and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> CharSequence.foldRight(initial: R, operation: (Char, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each character with its index in the original char sequence and current accumulator value.\n * \n * Returns the specified [initial] value if the char sequence is empty.\n * \n * @param [operation] function that takes the index of a character, the character itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <R> CharSequence.foldRightIndexed(initial: R, operation: (index: Int, Char, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Performs the given [action] on each character.\n */\npublic inline fun CharSequence.forEach(action: (Char) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each character, providing sequential index with the character.\n * @param [action] function that takes the index of a character and the character itself\n * and performs the action on the character.\n */\npublic inline fun CharSequence.forEachIndexed(action: (index: Int, Char) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharSequence.max(): Char? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> CharSequence.maxBy(selector: (Char) -> R): Char? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first character yielding the largest value of the given function or `null` if there are no characters.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> CharSequence.maxByOrNull(selector: (Char) -> R): Char? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.maxOf(selector: (Char) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.maxOf(selector: (Char) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharSequence.maxOf(selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.maxOfOrNull(selector: (Char) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.maxOfOrNull(selector: (Char) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharSequence.maxOfOrNull(selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each character in the char sequence.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharSequence.maxOfWith(comparator: Comparator<in R>, selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each character in the char sequence or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharSequence.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest character or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharSequence.maxOrNull(): Char? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharSequence.maxWith(comparator: Comparator<in Char>): Char? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first character having the largest value according to the provided [comparator] or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharSequence.maxWithOrNull(comparator: Comparator<in Char>): Char? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharSequence.min(): Char? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <R : Comparable<R>> CharSequence.minBy(selector: (Char) -> R): Char? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first character yielding the smallest value of the given function or `null` if there are no characters.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R : Comparable<R>> CharSequence.minByOrNull(selector: (Char) -> R): Char? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.minOf(selector: (Char) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.minOf(selector: (Char) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharSequence.minOf(selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.minOfOrNull(selector: (Char) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.minOfOrNull(selector: (Char) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each character in the char sequence or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> CharSequence.minOfOrNull(selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each character in the char sequence.\n * \n * @throws NoSuchElementException if the char sequence is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharSequence.minOfWith(comparator: Comparator<in R>, selector: (Char) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each character in the char sequence or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <R> CharSequence.minOfWithOrNull(comparator: Comparator<in R>, selector: (Char) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest character or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharSequence.minOrNull(): Char? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun CharSequence.minWith(comparator: Comparator<in Char>): Char? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first character having the smallest value according to the provided [comparator] or `null` if there are no characters.\n */\n@SinceKotlin(\"1.4\")\npublic fun CharSequence.minWithOrNull(comparator: Comparator<in Char>): Char? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the char sequence has no characters.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun CharSequence.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if no characters match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun CharSequence.none(predicate: (Char) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each character and returns the char sequence itself afterwards.\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <S : CharSequence> S.onEach(action: (Char) -> Unit): S {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each character, providing sequential index with the character,\n * and returns the char sequence itself afterwards.\n * @param [action] function that takes the index of a character and the character itself\n * and performs the action on the character.\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S : CharSequence> S.onEachIndexed(action: (index: Int, Char) -> Unit): S {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Accumulates value starting with the first character and applying [operation] from left to right\n * to current accumulator value and each character.\n * \n * Throws an exception if this char sequence is empty. If the char sequence can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and a character,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun CharSequence.reduce(operation: (acc: Char, Char) -> Char): Char {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty char sequence can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first character and applying [operation] from left to right\n * to current accumulator value and each character with its index in the original char sequence.\n * \n * Throws an exception if this char sequence is empty. If the char sequence can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of a character, current accumulator value and the character itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun CharSequence.reduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): Char {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty char sequence can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first character and applying [operation] from left to right\n * to current accumulator value and each character with its index in the original char sequence.\n * \n * Returns `null` if the char sequence is empty.\n * \n * @param [operation] function that takes the index of a character, current accumulator value and the character itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharSequence.reduceIndexedOrNull(operation: (index: Int, acc: Char, Char) -> Char): Char? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first character and applying [operation] from left to right\n * to current accumulator value and each character.\n * \n * Returns `null` if the char sequence is empty.\n * \n * @param [operation] function that takes current accumulator value and a character,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun CharSequence.reduceOrNull(operation: (acc: Char, Char) -> Char): Char? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last character and applying [operation] from right to left\n * to each character and current accumulator value.\n * \n * Throws an exception if this char sequence is empty. If the char sequence can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes a character and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun CharSequence.reduceRight(operation: (Char, acc: Char) -> Char): Char {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty char sequence can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last character and applying [operation] from right to left\n * to each character with its index in the original char sequence and current accumulator value.\n * \n * Throws an exception if this char sequence is empty. If the char sequence can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of a character, the character itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun CharSequence.reduceRightIndexed(operation: (index: Int, Char, acc: Char) -> Char): Char {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty char sequence can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last character and applying [operation] from right to left\n * to each character with its index in the original char sequence and current accumulator value.\n * \n * Returns `null` if the char sequence is empty.\n * \n * @param [operation] function that takes the index of a character, the character itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharSequence.reduceRightIndexedOrNull(operation: (index: Int, Char, acc: Char) -> Char): Char? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last character and applying [operation] from right to left\n * to each character and current accumulator value.\n * \n * Returns `null` if the char sequence is empty.\n * \n * @param [operation] function that takes a character and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun CharSequence.reduceRightOrNull(operation: (Char, acc: Char) -> Char): Char? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and a character, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R> CharSequence.runningFold(initial: R, operation: (acc: R, Char) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(length + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character, its index in the original char sequence and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of a character, current accumulator value\n * and the character itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <R> CharSequence.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(length + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character and current accumulator value that starts with the first character of this char sequence.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and a character, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharSequence.runningReduce(operation: (acc: Char, Char) -> Char): List<Char> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Char>(length).apply { add(accumulator) }\n for (index in 1 until length) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character, its index in the original char sequence and current accumulator value that starts with the first character of this char sequence.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of a character, current accumulator value\n * and the character itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic inline fun CharSequence.runningReduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): List<Char> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<Char>(length).apply { add(accumulator) }\n for (index in 1 until length) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and a character, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <R> CharSequence.scan(initial: R, operation: (acc: R, Char) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each character, its index in the original char sequence and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of a character, current accumulator value\n * and the character itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <R> CharSequence.scanIndexed(initial: R, operation: (index: Int, acc: R, Char) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun CharSequence.scanReduce(operation: (acc: Char, Char) -> Char): List<Char> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun CharSequence.scanReduceIndexed(operation: (index: Int, acc: Char, Char) -> Char): List<Char> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\npublic inline fun CharSequence.sumBy(selector: (Char) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\npublic inline fun CharSequence.sumByDouble(selector: (Char) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.sumOf(selector: (Char) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.sumOf(selector: (Char) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.sumOf(selector: (Char) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.sumOf(selector: (Char) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each character in the char sequence.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.sumOf(selector: (Char) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Splits this char sequence into a list of strings each not exceeding the given [size].\n * \n * The last string in the resulting list may have fewer characters than the given [size].\n * \n * @param size the number of elements to take in each string, must be positive and can be greater than the number of elements in this char sequence.\n * \n * @sample samples.text.Strings.chunked\n */\n@SinceKotlin(\"1.2\")\npublic fun CharSequence.chunked(size: Int): List<String> {\n return windowed(size, size, partialWindows = true)\n}\n\n/**\n * Splits this char sequence into several char sequences each not exceeding the given [size]\n * and applies the given [transform] function to an each.\n * \n * @return list of results of the [transform] applied to an each char sequence.\n * \n * Note that the char sequence passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * The last char sequence may have fewer characters than the given [size].\n * \n * @param size the number of elements to take in each char sequence, must be positive and can be greater than the number of elements in this char sequence.\n * \n * @sample samples.text.Strings.chunkedTransform\n */\n@SinceKotlin(\"1.2\")\npublic fun <R> CharSequence.chunked(size: Int, transform: (CharSequence) -> R): List<R> {\n return windowed(size, size, partialWindows = true, transform = transform)\n}\n\n/**\n * Splits this char sequence into a sequence of strings each not exceeding the given [size].\n * \n * The last string in the resulting sequence may have fewer characters than the given [size].\n * \n * @param size the number of elements to take in each string, must be positive and can be greater than the number of elements in this char sequence.\n * \n * @sample samples.collections.Collections.Transformations.chunked\n */\n@SinceKotlin(\"1.2\")\npublic fun CharSequence.chunkedSequence(size: Int): Sequence<String> {\n return chunkedSequence(size) { it.toString() }\n}\n\n/**\n * Splits this char sequence into several char sequences each not exceeding the given [size]\n * and applies the given [transform] function to an each.\n * \n * @return sequence of results of the [transform] applied to an each char sequence.\n * \n * Note that the char sequence passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * The last char sequence may have fewer characters than the given [size].\n * \n * @param size the number of elements to take in each char sequence, must be positive and can be greater than the number of elements in this char sequence.\n * \n * @sample samples.text.Strings.chunkedTransformToSequence\n */\n@SinceKotlin(\"1.2\")\npublic fun <R> CharSequence.chunkedSequence(size: Int, transform: (CharSequence) -> R): Sequence<R> {\n return windowedSequence(size, size, partialWindows = true, transform = transform)\n}\n\n/**\n * Splits the original char sequence into pair of char sequences,\n * where *first* char sequence contains characters for which [predicate] yielded `true`,\n * while *second* char sequence contains characters for which [predicate] yielded `false`.\n * \n * @sample samples.text.Strings.partition\n */\npublic inline fun CharSequence.partition(predicate: (Char) -> Boolean): Pair<CharSequence, CharSequence> {\n val first = StringBuilder()\n val second = StringBuilder()\n for (element in this) {\n if (predicate(element)) {\n first.append(element)\n } else {\n second.append(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Splits the original string into pair of strings,\n * where *first* string contains characters for which [predicate] yielded `true`,\n * while *second* string contains characters for which [predicate] yielded `false`.\n * \n * @sample samples.text.Strings.partition\n */\npublic inline fun String.partition(predicate: (Char) -> Boolean): Pair<String, String> {\n val first = StringBuilder()\n val second = StringBuilder()\n for (element in this) {\n if (predicate(element)) {\n first.append(element)\n } else {\n second.append(element)\n }\n }\n return Pair(first.toString(), second.toString())\n}\n\n/**\n * Returns a list of snapshots of the window of the given [size]\n * sliding along this char sequence with the given [step], where each\n * snapshot is a string.\n * \n * Several last strings may have fewer characters than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this char sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.takeWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun CharSequence.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<String> {\n return windowed(size, step, partialWindows) { it.toString() }\n}\n\n/**\n * Returns a list of results of applying the given [transform] function to\n * an each char sequence representing a view over the window of the given [size]\n * sliding along this char sequence with the given [step].\n * \n * Note that the char sequence passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * Several last char sequences may have fewer characters than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this char sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.averageWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <R> CharSequence.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (CharSequence) -> R): List<R> {\n checkWindowSizeStep(size, step)\n val thisSize = this.length\n val resultCapacity = thisSize / step + if (thisSize % step == 0) 0 else 1\n val result = ArrayList<R>(resultCapacity)\n var index = 0\n while (index in 0 until thisSize) {\n val end = index + size\n val coercedEnd = if (end < 0 || end > thisSize) { if (partialWindows) thisSize else break } else end\n result.add(transform(subSequence(index, coercedEnd)))\n index += step\n }\n return result\n}\n\n/**\n * Returns a sequence of snapshots of the window of the given [size]\n * sliding along this char sequence with the given [step], where each\n * snapshot is a string.\n * \n * Several last strings may have fewer characters than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this char sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.takeWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun CharSequence.windowedSequence(size: Int, step: Int = 1, partialWindows: Boolean = false): Sequence<String> {\n return windowedSequence(size, step, partialWindows) { it.toString() }\n}\n\n/**\n * Returns a sequence of results of applying the given [transform] function to\n * an each char sequence representing a view over the window of the given [size]\n * sliding along this char sequence with the given [step].\n * \n * Note that the char sequence passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * Several last char sequences may have fewer characters than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this char sequence.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.averageWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <R> CharSequence.windowedSequence(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (CharSequence) -> R): Sequence<R> {\n checkWindowSizeStep(size, step)\n val windows = (if (partialWindows) indices else 0 until length - size + 1) step step\n return windows.asSequence().map { index ->\n val end = index + size\n val coercedEnd = if (end < 0 || end > length) length else end\n transform(subSequence(index, coercedEnd))\n }\n}\n\n/**\n * Returns a list of pairs built from the characters of `this` and the [other] char sequences with the same index\n * The returned list has length of the shortest char sequence.\n * \n * @sample samples.text.Strings.zip\n */\npublic infix fun CharSequence.zip(other: CharSequence): List<Pair<Char, Char>> {\n return zip(other) { c1, c2 -> c1 to c2 }\n}\n\n/**\n * Returns a list of values built from the characters of `this` and the [other] char sequences with the same index\n * using the provided [transform] function applied to each pair of characters.\n * The returned list has length of the shortest char sequence.\n * \n * @sample samples.text.Strings.zipWithTransform\n */\npublic inline fun <V> CharSequence.zip(other: CharSequence, transform: (a: Char, b: Char) -> V): List<V> {\n val length = minOf(this.length, other.length)\n val list = ArrayList<V>(length)\n for (i in 0 until length) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of pairs of each two adjacent characters in this char sequence.\n * \n * The returned list is empty if this char sequence contains less than two characters.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNext\n */\n@SinceKotlin(\"1.2\")\npublic fun CharSequence.zipWithNext(): List<Pair<Char, Char>> {\n return zipWithNext { a, b -> a to b }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to an each pair of two adjacent characters in this char sequence.\n * \n * The returned list is empty if this char sequence contains less than two characters.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNextToFindDeltas\n */\n@SinceKotlin(\"1.2\")\npublic inline fun <R> CharSequence.zipWithNext(transform: (a: Char, b: Char) -> R): List<R> {\n val size = length - 1\n if (size < 1) return emptyList()\n val result = ArrayList<R>(size)\n for (index in 0 until size) {\n result.add(transform(this[index], this[index + 1]))\n }\n return result\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original char sequence returning its characters when being iterated.\n */\npublic fun CharSequence.asIterable(): Iterable<Char> {\n if (this is String && isEmpty()) return emptyList()\n return Iterable { this.iterator() }\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original char sequence returning its characters when being iterated.\n */\npublic fun CharSequence.asSequence(): Sequence<Char> {\n if (this is String && isEmpty()) return emptySequence()\n return Sequence { this.iterator() }\n}\n\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\nimport kotlin.js.RegExp\n\n/**\n * Converts the characters in the specified array to a string.\n */\n@SinceKotlin(\"1.2\")\n@Deprecated(\"Use CharArray.concatToString() instead\", ReplaceWith(\"chars.concatToString()\"))\npublic actual fun String(chars: CharArray): String {\n var result = \"\"\n for (char in chars) {\n result += char\n }\n return result\n}\n\n/**\n * Converts the characters from a portion of the specified array to a string.\n *\n * @throws IndexOutOfBoundsException if either [offset] or [length] are less than zero\n * or `offset + length` is out of [chars] array bounds.\n */\n@SinceKotlin(\"1.2\")\n@Deprecated(\"Use CharArray.concatToString(startIndex, endIndex) instead\", ReplaceWith(\"chars.concatToString(offset, offset + length)\"))\npublic actual fun String(chars: CharArray, offset: Int, length: Int): String {\n if (offset < 0 || length < 0 || chars.size - offset < length)\n throw IndexOutOfBoundsException(\"size: ${chars.size}; offset: $offset; length: $length\")\n var result = \"\"\n for (index in offset until offset + length) {\n result += chars[index]\n }\n return result\n}\n\n/**\n * Concatenates characters in this [CharArray] into a String.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun CharArray.concatToString(): String {\n var result = \"\"\n for (char in this) {\n result += char\n }\n return result\n}\n\n/**\n * Concatenates characters in this [CharArray] or its subrange into a String.\n *\n * @param startIndex the beginning (inclusive) of the subrange of characters, 0 by default.\n * @param endIndex the end (exclusive) of the subrange of characters, size of this array by default.\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or [endIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [startIndex] is greater than [endIndex].\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun CharArray.concatToString(startIndex: Int = 0, endIndex: Int = this.size): String {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, this.size)\n var result = \"\"\n for (index in startIndex until endIndex) {\n result += this[index]\n }\n return result\n}\n\n/**\n * Returns a [CharArray] containing characters of this string.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun String.toCharArray(): CharArray {\n return CharArray(length) { get(it) }\n}\n\n/**\n * Returns a [CharArray] containing characters of this string or its substring.\n *\n * @param startIndex the beginning (inclusive) of the substring, 0 by default.\n * @param endIndex the end (exclusive) of the substring, length of this string by default.\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or [endIndex] is greater than the length of this string.\n * @throws IllegalArgumentException if [startIndex] is greater than [endIndex].\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.toCharArray(startIndex: Int = 0, endIndex: Int = this.length): CharArray {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, length)\n return CharArray(endIndex - startIndex) { get(startIndex + it) }\n}\n\n/**\n * Decodes a string from the bytes in UTF-8 encoding in this array.\n *\n * Malformed byte sequences are replaced by the replacement char `\\uFFFD`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun ByteArray.decodeToString(): String {\n return decodeUtf8(this, 0, size, false)\n}\n\n/**\n * Decodes a string from the bytes in UTF-8 encoding in this array or its subrange.\n *\n * @param startIndex the beginning (inclusive) of the subrange to decode, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to decode, size of this array by default.\n * @param throwOnInvalidSequence specifies whether to throw an exception on malformed byte sequence or replace it by the replacement char `\\uFFFD`.\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or [endIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [startIndex] is greater than [endIndex].\n * @throws CharacterCodingException if the byte array contains malformed UTF-8 byte sequence and [throwOnInvalidSequence] is true.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun ByteArray.decodeToString(\n startIndex: Int = 0,\n endIndex: Int = this.size,\n throwOnInvalidSequence: Boolean = false\n): String {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, this.size)\n return decodeUtf8(this, startIndex, endIndex, throwOnInvalidSequence)\n}\n\n/**\n * Encodes this string to an array of bytes in UTF-8 encoding.\n *\n * Any malformed char sequence is replaced by the replacement byte sequence.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun String.encodeToByteArray(): ByteArray {\n return encodeUtf8(this, 0, length, false)\n}\n\n/**\n * Encodes this string or its substring to an array of bytes in UTF-8 encoding.\n *\n * @param startIndex the beginning (inclusive) of the substring to encode, 0 by default.\n * @param endIndex the end (exclusive) of the substring to encode, length of this string by default.\n * @param throwOnInvalidSequence specifies whether to throw an exception on malformed char sequence or replace.\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or [endIndex] is greater than the length of this string.\n * @throws IllegalArgumentException if [startIndex] is greater than [endIndex].\n * @throws CharacterCodingException if this string contains malformed char sequence and [throwOnInvalidSequence] is true.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.encodeToByteArray(\n startIndex: Int = 0,\n endIndex: Int = this.length,\n throwOnInvalidSequence: Boolean = false\n): ByteArray {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, length)\n return encodeUtf8(this, startIndex, endIndex, throwOnInvalidSequence)\n}\n\n/**\n * Returns a copy of this string converted to upper case using the rules of the default locale.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun String.toUpperCase(): String = asDynamic().toUpperCase()\n\n/**\n * Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun String.uppercase(): String = asDynamic().toUpperCase()\n\n/**\n * Returns a copy of this string converted to lower case using the rules of the default locale.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun String.toLowerCase(): String = asDynamic().toLowerCase()\n\n/**\n * Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun String.lowercase(): String = asDynamic().toLowerCase()\n\n@kotlin.internal.InlineOnly\ninternal actual inline fun String.nativeIndexOf(str: String, fromIndex: Int): Int = asDynamic().indexOf(str, fromIndex)\n\n@kotlin.internal.InlineOnly\ninternal actual inline fun String.nativeLastIndexOf(str: String, fromIndex: Int): Int = asDynamic().lastIndexOf(str, fromIndex)\n\n@kotlin.internal.InlineOnly\ninternal inline fun String.nativeStartsWith(s: String, position: Int): Boolean = asDynamic().startsWith(s, position)\n\n@kotlin.internal.InlineOnly\ninternal inline fun String.nativeEndsWith(s: String): Boolean = asDynamic().endsWith(s)\n\n@kotlin.internal.InlineOnly\npublic actual inline fun String.substring(startIndex: Int): String = asDynamic().substring(startIndex)\n\n@kotlin.internal.InlineOnly\npublic actual inline fun String.substring(startIndex: Int, endIndex: Int): String = asDynamic().substring(startIndex, endIndex)\n\n@kotlin.internal.InlineOnly\npublic inline fun String.concat(str: String): String = asDynamic().concat(str)\n\n@kotlin.internal.InlineOnly\npublic inline fun String.match(regex: String): Array<String>? = asDynamic().match(regex)\n\n//native public fun String.trim(): String\n//TODO: String.replace to implement effective trimLeading and trimTrailing\n\n@kotlin.internal.InlineOnly\ninternal inline fun String.nativeReplace(pattern: RegExp, replacement: String): String = asDynamic().replace(pattern, replacement)\n\n@OptIn(ExperimentalStdlibApi::class)\n@SinceKotlin(\"1.2\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.compareTo(other: String, ignoreCase: Boolean = false): Int {\n if (ignoreCase) {\n val n1 = this.length\n val n2 = other.length\n val min = minOf(n1, n2)\n if (min == 0) return n1 - n2\n var start = 0\n while (true) {\n val end = minOf(start + 16, min)\n var s1 = this.substring(start, end)\n var s2 = other.substring(start, end)\n if (s1 != s2) {\n s1 = s1.uppercase()\n s2 = s2.uppercase()\n if (s1 != s2) {\n s1 = s1.lowercase()\n s2 = s2.lowercase()\n if (s1 != s2) {\n return s1.compareTo(s2)\n }\n }\n }\n if (end == min) break\n start = end\n }\n return n1 - n2\n } else {\n return compareTo(other)\n }\n}\n\n\nprivate val STRING_CASE_INSENSITIVE_ORDER = Comparator<String> { a, b -> a.compareTo(b, ignoreCase = true) }\n\n@SinceKotlin(\"1.2\")\npublic actual val String.Companion.CASE_INSENSITIVE_ORDER: Comparator<String>\n get() = STRING_CASE_INSENSITIVE_ORDER\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.collections\n\n/** An iterator over a sequence of values of type `Byte`. */\npublic abstract class ByteIterator : Iterator<Byte> {\n override final fun next() = nextByte()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextByte(): Byte\n}\n\n/** An iterator over a sequence of values of type `Char`. */\npublic abstract class CharIterator : Iterator<Char> {\n override final fun next() = nextChar()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextChar(): Char\n}\n\n/** An iterator over a sequence of values of type `Short`. */\npublic abstract class ShortIterator : Iterator<Short> {\n override final fun next() = nextShort()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextShort(): Short\n}\n\n/** An iterator over a sequence of values of type `Int`. */\npublic abstract class IntIterator : Iterator<Int> {\n override final fun next() = nextInt()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextInt(): Int\n}\n\n/** An iterator over a sequence of values of type `Long`. */\npublic abstract class LongIterator : Iterator<Long> {\n override final fun next() = nextLong()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextLong(): Long\n}\n\n/** An iterator over a sequence of values of type `Float`. */\npublic abstract class FloatIterator : Iterator<Float> {\n override final fun next() = nextFloat()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextFloat(): Float\n}\n\n/** An iterator over a sequence of values of type `Double`. */\npublic abstract class DoubleIterator : Iterator<Double> {\n override final fun next() = nextDouble()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextDouble(): Double\n}\n\n/** An iterator over a sequence of values of type `Boolean`. */\npublic abstract class BooleanIterator : Iterator<Boolean> {\n override final fun next() = nextBoolean()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextBoolean(): Boolean\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.ranges\n\n/**\n * An iterator over a progression of values of type `Char`.\n * @property step the number by which the value is incremented on each step.\n */\ninternal class CharProgressionIterator(first: Char, last: Char, val step: Int) : CharIterator() {\n private val finalElement = last.toInt()\n private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n private var next = if (hasNext) first.toInt() else finalElement\n\n override fun hasNext(): Boolean = hasNext\n\n override fun nextChar(): Char {\n val value = next\n if (value == finalElement) {\n if (!hasNext) throw kotlin.NoSuchElementException()\n hasNext = false\n }\n else {\n next += step\n }\n return value.toChar()\n }\n}\n\n/**\n * An iterator over a progression of values of type `Int`.\n * @property step the number by which the value is incremented on each step.\n */\ninternal class IntProgressionIterator(first: Int, last: Int, val step: Int) : IntIterator() {\n private val finalElement = last\n private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n private var next = if (hasNext) first else finalElement\n\n override fun hasNext(): Boolean = hasNext\n\n override fun nextInt(): Int {\n val value = next\n if (value == finalElement) {\n if (!hasNext) throw kotlin.NoSuchElementException()\n hasNext = false\n }\n else {\n next += step\n }\n return value\n }\n}\n\n/**\n * An iterator over a progression of values of type `Long`.\n * @property step the number by which the value is incremented on each step.\n */\ninternal class LongProgressionIterator(first: Long, last: Long, val step: Long) : LongIterator() {\n private val finalElement = last\n private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n private var next = if (hasNext) first else finalElement\n\n override fun hasNext(): Boolean = hasNext\n\n override fun nextLong(): Long {\n val value = next\n if (value == finalElement) {\n if (!hasNext) throw kotlin.NoSuchElementException()\n hasNext = false\n }\n else {\n next += step\n }\n return value\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.ranges\n\nimport kotlin.internal.getProgressionLastElement\n\n/**\n * A progression of values of type `Char`.\n */\npublic open class CharProgression\n internal constructor\n (\n start: Char,\n endInclusive: Char,\n step: Int\n ) : Iterable<Char> {\n init {\n if (step == 0) throw kotlin.IllegalArgumentException(\"Step must be non-zero.\")\n if (step == Int.MIN_VALUE) throw kotlin.IllegalArgumentException(\"Step must be greater than Int.MIN_VALUE to avoid overflow on negation.\")\n }\n\n /**\n * The first element in the progression.\n */\n public val first: Char = start\n\n /**\n * The last element in the progression.\n */\n public val last: Char = getProgressionLastElement(start.toInt(), endInclusive.toInt(), step).toChar()\n\n /**\n * The step of the progression.\n */\n public val step: Int = step\n\n override fun iterator(): CharIterator = CharProgressionIterator(first, last, step)\n\n /** Checks if the progression is empty. */\n public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last\n\n override fun equals(other: Any?): Boolean =\n other is CharProgression && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last && step == other.step)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (31 * first.toInt() + last.toInt()) + step)\n\n override fun toString(): String = if (step > 0) \"$first..$last step $step\" else \"$first downTo $last step ${-step}\"\n\n companion object {\n /**\n * Creates CharProgression within the specified bounds of a closed range.\n\n * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step].\n * In order to go backwards the [step] must be negative.\n *\n * [step] must be greater than `Int.MIN_VALUE` and not equal to zero.\n */\n public fun fromClosedRange(rangeStart: Char, rangeEnd: Char, step: Int): CharProgression = CharProgression(rangeStart, rangeEnd, step)\n }\n}\n\n/**\n * A progression of values of type `Int`.\n */\npublic open class IntProgression\n internal constructor\n (\n start: Int,\n endInclusive: Int,\n step: Int\n ) : Iterable<Int> {\n init {\n if (step == 0) throw kotlin.IllegalArgumentException(\"Step must be non-zero.\")\n if (step == Int.MIN_VALUE) throw kotlin.IllegalArgumentException(\"Step must be greater than Int.MIN_VALUE to avoid overflow on negation.\")\n }\n\n /**\n * The first element in the progression.\n */\n public val first: Int = start\n\n /**\n * The last element in the progression.\n */\n public val last: Int = getProgressionLastElement(start.toInt(), endInclusive.toInt(), step).toInt()\n\n /**\n * The step of the progression.\n */\n public val step: Int = step\n\n override fun iterator(): IntIterator = IntProgressionIterator(first, last, step)\n\n /** Checks if the progression is empty. */\n public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last\n\n override fun equals(other: Any?): Boolean =\n other is IntProgression && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last && step == other.step)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (31 * first + last) + step)\n\n override fun toString(): String = if (step > 0) \"$first..$last step $step\" else \"$first downTo $last step ${-step}\"\n\n companion object {\n /**\n * Creates IntProgression within the specified bounds of a closed range.\n\n * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step].\n * In order to go backwards the [step] must be negative.\n *\n * [step] must be greater than `Int.MIN_VALUE` and not equal to zero.\n */\n public fun fromClosedRange(rangeStart: Int, rangeEnd: Int, step: Int): IntProgression = IntProgression(rangeStart, rangeEnd, step)\n }\n}\n\n/**\n * A progression of values of type `Long`.\n */\npublic open class LongProgression\n internal constructor\n (\n start: Long,\n endInclusive: Long,\n step: Long\n ) : Iterable<Long> {\n init {\n if (step == 0L) throw kotlin.IllegalArgumentException(\"Step must be non-zero.\")\n if (step == Long.MIN_VALUE) throw kotlin.IllegalArgumentException(\"Step must be greater than Long.MIN_VALUE to avoid overflow on negation.\")\n }\n\n /**\n * The first element in the progression.\n */\n public val first: Long = start\n\n /**\n * The last element in the progression.\n */\n public val last: Long = getProgressionLastElement(start.toLong(), endInclusive.toLong(), step).toLong()\n\n /**\n * The step of the progression.\n */\n public val step: Long = step\n\n override fun iterator(): LongIterator = LongProgressionIterator(first, last, step)\n\n /** Checks if the progression is empty. */\n public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last\n\n override fun equals(other: Any?): Boolean =\n other is LongProgression && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last && step == other.step)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (31 * (first xor (first ushr 32)) + (last xor (last ushr 32))) + (step xor (step ushr 32))).toInt()\n\n override fun toString(): String = if (step > 0) \"$first..$last step $step\" else \"$first downTo $last step ${-step}\"\n\n companion object {\n /**\n * Creates LongProgression within the specified bounds of a closed range.\n\n * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step].\n * In order to go backwards the [step] must be negative.\n *\n * [step] must be greater than `Long.MIN_VALUE` and not equal to zero.\n */\n public fun fromClosedRange(rangeStart: Long, rangeEnd: Long, step: Long): LongProgression = LongProgression(rangeStart, rangeEnd, step)\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\nimport kotlin.internal.PlatformDependent\n\n/**\n * Classes that inherit from this interface can be represented as a sequence of elements that can\n * be iterated over.\n * @param T the type of element being iterated over. The iterator is covariant in its element type.\n */\npublic interface Iterable<out T> {\n /**\n * Returns an iterator over the elements of this object.\n */\n public operator fun iterator(): Iterator<T>\n}\n\n/**\n * Classes that inherit from this interface can be represented as a sequence of elements that can\n * be iterated over and that supports removing elements during iteration.\n * @param T the type of element being iterated over. The mutable iterator is invariant in its element type.\n */\npublic interface MutableIterable<out T> : Iterable<T> {\n /**\n * Returns an iterator over the elements of this sequence that supports removing elements during iteration.\n */\n override fun iterator(): MutableIterator<T>\n}\n\n/**\n * A generic collection of elements. Methods in this interface support only read-only access to the collection;\n * read/write access is supported through the [MutableCollection] interface.\n * @param E the type of elements contained in the collection. The collection is covariant in its element type.\n */\npublic interface Collection<out E> : Iterable<E> {\n // Query Operations\n /**\n * Returns the size of the collection.\n */\n public val size: Int\n\n /**\n * Returns `true` if the collection is empty (contains no elements), `false` otherwise.\n */\n public fun isEmpty(): Boolean\n\n /**\n * Checks if the specified element is contained in this collection.\n */\n public operator fun contains(element: @UnsafeVariance E): Boolean\n\n override fun iterator(): Iterator<E>\n\n // Bulk Operations\n /**\n * Checks if all elements in the specified collection are contained in this collection.\n */\n public fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean\n}\n\n/**\n * A generic collection of elements that supports adding and removing elements.\n *\n * @param E the type of elements contained in the collection. The mutable collection is invariant in its element type.\n */\npublic interface MutableCollection<E> : Collection<E>, MutableIterable<E> {\n // Query Operations\n override fun iterator(): MutableIterator<E>\n\n // Modification Operations\n /**\n * Adds the specified element to the collection.\n *\n * @return `true` if the element has been added, `false` if the collection does not support duplicates\n * and the element is already contained in the collection.\n */\n public fun add(element: E): Boolean\n\n /**\n * Removes a single instance of the specified element from this\n * collection, if it is present.\n *\n * @return `true` if the element has been successfully removed; `false` if it was not present in the collection.\n */\n public fun remove(element: E): Boolean\n\n // Bulk Modification Operations\n /**\n * Adds all of the elements of the specified collection to this collection.\n *\n * @return `true` if any of the specified elements was added to the collection, `false` if the collection was not modified.\n */\n public fun addAll(elements: Collection<E>): Boolean\n\n /**\n * Removes all of this collection's elements that are also contained in the specified collection.\n *\n * @return `true` if any of the specified elements was removed from the collection, `false` if the collection was not modified.\n */\n public fun removeAll(elements: Collection<E>): Boolean\n\n /**\n * Retains only the elements in this collection that are contained in the specified collection.\n *\n * @return `true` if any element was removed from the collection, `false` if the collection was not modified.\n */\n public fun retainAll(elements: Collection<E>): Boolean\n\n /**\n * Removes all elements from this collection.\n */\n public fun clear(): Unit\n}\n\n/**\n * A generic ordered collection of elements. Methods in this interface support only read-only access to the list;\n * read/write access is supported through the [MutableList] interface.\n * @param E the type of elements contained in the list. The list is covariant in its element type.\n */\npublic interface List<out E> : Collection<E> {\n // Query Operations\n\n override val size: Int\n override fun isEmpty(): Boolean\n override fun contains(element: @UnsafeVariance E): Boolean\n override fun iterator(): Iterator<E>\n\n // Bulk Operations\n override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean\n\n // Positional Access Operations\n /**\n * Returns the element at the specified index in the list.\n */\n public operator fun get(index: Int): E\n\n // Search Operations\n /**\n * Returns the index of the first occurrence of the specified element in the list, or -1 if the specified\n * element is not contained in the list.\n */\n public fun indexOf(element: @UnsafeVariance E): Int\n\n /**\n * Returns the index of the last occurrence of the specified element in the list, or -1 if the specified\n * element is not contained in the list.\n */\n public fun lastIndexOf(element: @UnsafeVariance E): Int\n\n // List Iterators\n /**\n * Returns a list iterator over the elements in this list (in proper sequence).\n */\n public fun listIterator(): ListIterator<E>\n\n /**\n * Returns a list iterator over the elements in this list (in proper sequence), starting at the specified [index].\n */\n public fun listIterator(index: Int): ListIterator<E>\n\n // View\n /**\n * Returns a view of the portion of this list between the specified [fromIndex] (inclusive) and [toIndex] (exclusive).\n * The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.\n *\n * Structural changes in the base list make the behavior of the view undefined.\n */\n public fun subList(fromIndex: Int, toIndex: Int): List<E>\n}\n\n/**\n * A generic ordered collection of elements that supports adding and removing elements.\n * @param E the type of elements contained in the list. The mutable list is invariant in its element type.\n */\npublic interface MutableList<E> : List<E>, MutableCollection<E> {\n // Modification Operations\n /**\n * Adds the specified element to the end of this list.\n *\n * @return `true` because the list is always modified as the result of this operation.\n */\n override fun add(element: E): Boolean\n\n override fun remove(element: E): Boolean\n\n // Bulk Modification Operations\n /**\n * Adds all of the elements of the specified collection to the end of this list.\n *\n * The elements are appended in the order they appear in the [elements] collection.\n *\n * @return `true` if the list was changed as the result of the operation.\n */\n override fun addAll(elements: Collection<E>): Boolean\n\n /**\n * Inserts all of the elements of the specified collection [elements] into this list at the specified [index].\n *\n * @return `true` if the list was changed as the result of the operation.\n */\n public fun addAll(index: Int, elements: Collection<E>): Boolean\n\n override fun removeAll(elements: Collection<E>): Boolean\n override fun retainAll(elements: Collection<E>): Boolean\n override fun clear(): Unit\n\n // Positional Access Operations\n /**\n * Replaces the element at the specified position in this list with the specified element.\n *\n * @return the element previously at the specified position.\n */\n public operator fun set(index: Int, element: E): E\n\n /**\n * Inserts an element into the list at the specified [index].\n */\n public fun add(index: Int, element: E): Unit\n\n /**\n * Removes an element at the specified [index] from the list.\n *\n * @return the element that has been removed.\n */\n public fun removeAt(index: Int): E\n\n // List Iterators\n override fun listIterator(): MutableListIterator<E>\n\n override fun listIterator(index: Int): MutableListIterator<E>\n\n // View\n override fun subList(fromIndex: Int, toIndex: Int): MutableList<E>\n}\n\n/**\n * A generic unordered collection of elements that does not support duplicate elements.\n * Methods in this interface support only read-only access to the set;\n * read/write access is supported through the [MutableSet] interface.\n * @param E the type of elements contained in the set. The set is covariant in its element type.\n */\npublic interface Set<out E> : Collection<E> {\n // Query Operations\n\n override val size: Int\n override fun isEmpty(): Boolean\n override fun contains(element: @UnsafeVariance E): Boolean\n override fun iterator(): Iterator<E>\n\n // Bulk Operations\n override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean\n}\n\n/**\n * A generic unordered collection of elements that does not support duplicate elements, and supports\n * adding and removing elements.\n * @param E the type of elements contained in the set. The mutable set is invariant in its element type.\n */\npublic interface MutableSet<E> : Set<E>, MutableCollection<E> {\n // Query Operations\n override fun iterator(): MutableIterator<E>\n\n // Modification Operations\n\n /**\n * Adds the specified element to the set.\n *\n * @return `true` if the element has been added, `false` if the element is already contained in the set.\n */\n override fun add(element: E): Boolean\n\n override fun remove(element: E): Boolean\n\n // Bulk Modification Operations\n\n override fun addAll(elements: Collection<E>): Boolean\n override fun removeAll(elements: Collection<E>): Boolean\n override fun retainAll(elements: Collection<E>): Boolean\n override fun clear(): Unit\n}\n\n/**\n * A collection that holds pairs of objects (keys and values) and supports efficiently retrieving\n * the value corresponding to each key. Map keys are unique; the map holds only one value for each key.\n * Methods in this interface support only read-only access to the map; read-write access is supported through\n * the [MutableMap] interface.\n * @param K the type of map keys. The map is invariant in its key type, as it\n * can accept key as a parameter (of [containsKey] for example) and return it in [keys] set.\n * @param V the type of map values. The map is covariant in its value type.\n */\npublic interface Map<K, out V> {\n // Query Operations\n /**\n * Returns the number of key/value pairs in the map.\n */\n public val size: Int\n\n /**\n * Returns `true` if the map is empty (contains no elements), `false` otherwise.\n */\n public fun isEmpty(): Boolean\n\n /**\n * Returns `true` if the map contains the specified [key].\n */\n public fun containsKey(key: K): Boolean\n\n /**\n * Returns `true` if the map maps one or more keys to the specified [value].\n */\n public fun containsValue(value: @UnsafeVariance V): Boolean\n\n /**\n * Returns the value corresponding to the given [key], or `null` if such a key is not present in the map.\n */\n public operator fun get(key: K): V?\n\n /**\n * Returns the value corresponding to the given [key], or [defaultValue] if such a key is not present in the map.\n *\n * @since JDK 1.8\n */\n @SinceKotlin(\"1.1\")\n @PlatformDependent\n public fun getOrDefault(key: K, defaultValue: @UnsafeVariance V): V {\n // See default implementation in JDK sources\n throw NotImplementedError()\n }\n\n // Views\n /**\n * Returns a read-only [Set] of all keys in this map.\n */\n public val keys: Set<K>\n\n /**\n * Returns a read-only [Collection] of all values in this map. Note that this collection may contain duplicate values.\n */\n public val values: Collection<V>\n\n /**\n * Returns a read-only [Set] of all key/value pairs in this map.\n */\n public val entries: Set<Map.Entry<K, V>>\n\n /**\n * Represents a key/value pair held by a [Map].\n */\n public interface Entry<out K, out V> {\n /**\n * Returns the key of this key/value pair.\n */\n public val key: K\n\n /**\n * Returns the value of this key/value pair.\n */\n public val value: V\n }\n}\n\n/**\n * A modifiable collection that holds pairs of objects (keys and values) and supports efficiently retrieving\n * the value corresponding to each key. Map keys are unique; the map holds only one value for each key.\n * @param K the type of map keys. The map is invariant in its key type.\n * @param V the type of map values. The mutable map is invariant in its value type.\n */\npublic interface MutableMap<K, V> : Map<K, V> {\n // Modification Operations\n /**\n * Associates the specified [value] with the specified [key] in the map.\n *\n * @return the previous value associated with the key, or `null` if the key was not present in the map.\n */\n public fun put(key: K, value: V): V?\n\n /**\n * Removes the specified key and its corresponding value from this map.\n *\n * @return the previous value associated with the key, or `null` if the key was not present in the map.\n */\n public fun remove(key: K): V?\n\n /**\n * Removes the entry for the specified key only if it is mapped to the specified value.\n *\n * @return true if entry was removed\n */\n @SinceKotlin(\"1.1\")\n @PlatformDependent\n public fun remove(key: K, value: V): Boolean {\n // See default implementation in JDK sources\n return true\n }\n\n // Bulk Modification Operations\n /**\n * Updates this map with key/value pairs from the specified map [from].\n */\n public fun putAll(from: Map<out K, V>): Unit\n\n /**\n * Removes all elements from this map.\n */\n public fun clear(): Unit\n\n // Views\n /**\n * Returns a [MutableSet] of all keys in this map.\n */\n override val keys: MutableSet<K>\n\n /**\n * Returns a [MutableCollection] of all values in this map. Note that this collection may contain duplicate values.\n */\n override val values: MutableCollection<V>\n\n /**\n * Returns a [MutableSet] of all key/value pairs in this map.\n */\n override val entries: MutableSet<MutableMap.MutableEntry<K, V>>\n\n /**\n * Represents a key/value pair held by a [MutableMap].\n */\n public interface MutableEntry<K, V> : Map.Entry<K, V> {\n /**\n * Changes the value associated with the key of this entry.\n *\n * @return the previous value corresponding to the key.\n */\n public fun setValue(newValue: V): V\n }\n}\n","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.ranges\n\n/**\n * Represents a range of values (for example, numbers or characters).\n * See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/ranges.html) for more information.\n */\npublic interface ClosedRange<T: Comparable<T>> {\n /**\n * The minimum value in the range.\n */\n public val start: T\n\n /**\n * The maximum value in the range (inclusive).\n */\n public val endInclusive: T\n\n /**\n * Checks whether the specified [value] belongs to the range.\n */\n public operator fun contains(value: T): Boolean = value >= start && value <= endInclusive\n\n /**\n * Checks whether the range is empty.\n */\n public fun isEmpty(): Boolean = start > endInclusive\n}\n","/*\n * Copyright 2010-2015 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage kotlin\n\n/**\n * The type with only one value: the `Unit` object. This type corresponds to the `void` type in Java.\n */\npublic object Unit {\n override fun toString() = \"kotlin.Unit\"\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.internal\n\n// a mod b (in arithmetical sense)\nprivate fun mod(a: Int, b: Int): Int {\n val mod = a % b\n return if (mod >= 0) mod else mod + b\n}\n\nprivate fun mod(a: Long, b: Long): Long {\n val mod = a % b\n return if (mod >= 0) mod else mod + b\n}\n\n// (a - b) mod c\nprivate fun differenceModulo(a: Int, b: Int, c: Int): Int {\n return mod(mod(a, c) - mod(b, c), c)\n}\n\nprivate fun differenceModulo(a: Long, b: Long, c: Long): Long {\n return mod(mod(a, c) - mod(b, c), c)\n}\n\n/**\n * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range\n * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative\n * [step].\n *\n * No validation on passed parameters is performed. The given parameters should satisfy the condition:\n *\n * - either `step > 0` and `start <= end`,\n * - or `step < 0` and `start >= end`.\n *\n * @param start first element of the progression\n * @param end ending bound for the progression\n * @param step increment, or difference of successive elements in the progression\n * @return the final element of the progression\n * @suppress\n */\n@PublishedApi\ninternal fun getProgressionLastElement(start: Int, end: Int, step: Int): Int = when {\n step > 0 -> if (start >= end) end else end - differenceModulo(end, start, step)\n step < 0 -> if (start <= end) end else end + differenceModulo(start, end, -step)\n else -> throw kotlin.IllegalArgumentException(\"Step is zero.\")\n}\n\n/**\n * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range\n * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative\n * [step].\n *\n * No validation on passed parameters is performed. The given parameters should satisfy the condition:\n *\n * - either `step > 0` and `start <= end`,\n * - or `step < 0` and `start >= end`.\n *\n * @param start first element of the progression\n * @param end ending bound for the progression\n * @param step increment, or difference of successive elements in the progression\n * @return the final element of the progression\n * @suppress\n */\n@PublishedApi\ninternal fun getProgressionLastElement(start: Long, end: Long, step: Long): Long = when {\n step > 0 -> if (start >= end) end else end - differenceModulo(end, start, step)\n step < 0 -> if (start <= end) end else end + differenceModulo(start, end, -step)\n else -> throw kotlin.IllegalArgumentException(\"Step is zero.\")\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@JsName(\"arrayIterator\")\ninternal fun arrayIterator(array: dynamic, type: String?) = when (type) {\n null -> {\n val arr: Array<dynamic> = array\n object : Iterator<dynamic> {\n var index = 0\n override fun hasNext() = index < arr.size\n override fun next() = if (index < arr.size) arr[index++] else throw NoSuchElementException(\"$index\")\n }\n }\n \"BooleanArray\" -> booleanArrayIterator(array)\n \"ByteArray\" -> byteArrayIterator(array)\n \"ShortArray\" -> shortArrayIterator(array)\n \"CharArray\" -> charArrayIterator(array)\n \"IntArray\" -> intArrayIterator(array)\n \"LongArray\" -> longArrayIterator(array)\n \"FloatArray\" -> floatArrayIterator(array)\n \"DoubleArray\" -> doubleArrayIterator(array)\n else -> throw IllegalStateException(\"Unsupported type argument for arrayIterator: $type\")\n}\n\n@JsName(\"booleanArrayIterator\")\ninternal fun booleanArrayIterator(array: BooleanArray) = object : BooleanIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextBoolean() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"byteArrayIterator\")\ninternal fun byteArrayIterator(array: ByteArray) = object : ByteIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextByte() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"shortArrayIterator\")\ninternal fun shortArrayIterator(array: ShortArray) = object : ShortIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextShort() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"charArrayIterator\")\ninternal fun charArrayIterator(array: CharArray) = object : CharIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextChar() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"intArrayIterator\")\ninternal fun intArrayIterator(array: IntArray) = object : IntIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextInt() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"floatArrayIterator\")\ninternal fun floatArrayIterator(array: FloatArray) = object : FloatIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextFloat() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"doubleArrayIterator\")\ninternal fun doubleArrayIterator(array: DoubleArray) = object : DoubleIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextDouble() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"longArrayIterator\")\ninternal fun longArrayIterator(array: LongArray) = object : LongIterator() {\n var index = 0\n override fun hasNext() = index < array.size\n override fun nextLong() = if (index < array.size) array[index++] else throw NoSuchElementException(\"$index\")\n}\n\n@JsName(\"PropertyMetadata\")\ninternal class PropertyMetadata(@JsName(\"callableName\") val name: String)\n\n@JsName(\"noWhenBranchMatched\")\ninternal fun noWhenBranchMatched(): Nothing = throw NoWhenBranchMatchedException()\n\n@JsName(\"subSequence\")\ninternal fun subSequence(c: CharSequence, startIndex: Int, endIndex: Int): CharSequence {\n if (c is String) {\n return c.substring(startIndex, endIndex)\n } else {\n return c.asDynamic().`subSequence_vux9f0$`(startIndex, endIndex)\n }\n}\n\n@JsName(\"captureStack\")\ninternal fun captureStack(@Suppress(\"UNUSED_PARAMETER\") baseClass: JsClass<in Throwable>, instance: Throwable) {\n if (js(\"Error\").captureStackTrace) {\n // Using uncropped stack traces due to KT-37563.\n // Precise stack traces are implemented in JS IR compiler and stdlib\n js(\"Error\").captureStackTrace(instance);\n } else {\n instance.asDynamic().stack = js(\"new Error()\").stack;\n }\n}\n\n@JsName(\"newThrowable\")\ninternal fun newThrowable(message: String?, cause: Throwable?): Throwable {\n val throwable = js(\"new Error()\")\n throwable.message = if (jsTypeOf(message) == \"undefined\") {\n if (cause != null) cause.toString() else null\n } else {\n message\n }\n throwable.cause = cause\n throwable.name = \"Throwable\"\n return throwable\n}\n\n@JsName(\"BoxedChar\")\ninternal class BoxedChar(val c: Int) : Comparable<Int> {\n override fun equals(other: Any?): Boolean {\n return other is BoxedChar && c == other.c\n }\n\n override fun hashCode(): Int {\n return c\n }\n\n override fun toString(): String {\n return js(\"this.c\").unsafeCast<Char>().toString()\n }\n\n override fun compareTo(other: Int): Int {\n return js(\"this.c - other\").unsafeCast<Int>()\n }\n\n @JsName(\"valueOf\")\n public fun valueOf(): Int {\n return c\n }\n}\n\n@kotlin.internal.InlineOnly\ninternal inline fun <T> concat(args: Array<T>): T {\n val typed = js(\"Array\")(args.size)\n for (i in args.indices) {\n val arr = args[i]\n if (arr !is Array<*>) {\n typed[i] = js(\"[]\").slice.call(arr)\n } else {\n typed[i] = arr\n }\n }\n return js(\"[]\").concat.apply(js(\"[]\"), typed);\n}\n\n/** Concat regular Array's and TypedArray's into an Array.\n */\n@PublishedApi\n@JsName(\"arrayConcat\")\n@Suppress(\"UNUSED_PARAMETER\")\ninternal fun <T> arrayConcat(a: T, b: T): T {\n return concat(js(\"arguments\"))\n}\n\n/** Concat primitive arrays. Main use: prepare vararg arguments.\n * For compatibility with 1.1.0 the arguments may be a mixture of Array's and TypedArray's.\n *\n * If the first argument is TypedArray (Byte-, Short-, Char-, Int-, Float-, and DoubleArray) returns a TypedArray, otherwise an Array.\n * If the first argument has the $type$ property (Boolean-, Char-, and LongArray) copy its value to result.$type$.\n * If the first argument is a regular Array without the $type$ property default to arrayConcat.\n */\n@PublishedApi\n@JsName(\"primitiveArrayConcat\")\n@Suppress(\"UNUSED_PARAMETER\")\ninternal fun <T> primitiveArrayConcat(a: T, b: T): T {\n val args: Array<T> = js(\"arguments\")\n if (a is Array<*> && a.asDynamic().`$type$` === undefined) {\n return concat(args)\n } else {\n var size = 0\n for (i in args.indices) {\n size += args[i].asDynamic().length as Int\n }\n val result = js(\"new a.constructor(size)\")\n kotlin.copyArrayType(a, result)\n size = 0\n for (i in args.indices) {\n val arr = args[i].asDynamic()\n for (j in 0 until arr.length) {\n result[size++] = arr[j]\n }\n }\n return result\n }\n}\n\n@JsName(\"booleanArrayOf\")\ninternal fun booleanArrayOf() = withType(\"BooleanArray\", js(\"[].slice.call(arguments)\"))\n\n@JsName(\"charArrayOf\") // The arguments have to be slice'd here because of Rhino (see KT-16974)\ninternal fun charArrayOf() = withType(\"CharArray\", js(\"new Uint16Array([].slice.call(arguments))\"))\n\n@JsName(\"longArrayOf\")\ninternal fun longArrayOf() = withType(\"LongArray\", js(\"[].slice.call(arguments)\"))\n\n@JsName(\"withType\")\n@kotlin.internal.InlineOnly\ninternal inline fun withType(type: String, array: dynamic): dynamic {\n array.`$type$` = type\n return array\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\nimport kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED\n\n@SinceKotlin(\"1.3\")\n@JsName(\"CoroutineImpl\")\ninternal abstract class CoroutineImpl(private val resultContinuation: Continuation<Any?>) : Continuation<Any?> {\n protected var state = 0\n protected var exceptionState = 0\n protected var result: Any? = null\n protected var exception: Throwable? = null\n protected var finallyPath: Array<Int>? = null\n\n public override val context: CoroutineContext = resultContinuation.context\n\n private var intercepted_: Continuation<Any?>? = null\n\n public fun intercepted(): Continuation<Any?> =\n intercepted_\n ?: (context[ContinuationInterceptor]?.interceptContinuation(this) ?: this)\n .also { intercepted_ = it }\n\n override fun resumeWith(result: Result<Any?>) {\n var current = this\n var currentResult: Any? = result.getOrNull()\n var currentException: Throwable? = result.exceptionOrNull()\n\n // This loop unrolls recursion in current.resumeWith(param) to make saner and shorter stack traces on resume\n while (true) {\n with(current) {\n val completion = resultContinuation\n\n // Set result and exception fields in the current continuation\n if (currentException == null) {\n this.result = currentResult\n } else {\n state = exceptionState\n exception = currentException\n }\n\n try {\n val outcome = doResume()\n if (outcome === COROUTINE_SUSPENDED) return\n currentResult = outcome\n currentException = null\n } catch (exception: dynamic) { // Catch all exceptions\n currentResult = null\n currentException = exception.unsafeCast<Throwable>()\n }\n\n releaseIntercepted() // this state machine instance is terminating\n\n if (completion is CoroutineImpl) {\n // unrolling recursion via loop\n current = completion\n } else {\n // top-level completion reached -- invoke and return\n currentException?.let {\n completion.resumeWithException(it)\n } ?: completion.resume(currentResult)\n return\n }\n }\n }\n }\n\n private fun releaseIntercepted() {\n val intercepted = intercepted_\n if (intercepted != null && intercepted !== this) {\n context[ContinuationInterceptor]!!.releaseInterceptedContinuation(intercepted)\n }\n this.intercepted_ = CompletedContinuation // just in case\n }\n\n protected abstract fun doResume(): Any?\n}\n\ninternal object CompletedContinuation : Continuation<Any?> {\n override val context: CoroutineContext\n get() = error(\"This continuation is already complete\")\n\n override fun resumeWith(result: Result<Any?>) {\n error(\"This continuation is already complete\")\n }\n\n override fun toString(): String = \"This continuation is already complete\"\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:Suppress(\"UNCHECKED_CAST\", \"RedundantVisibilityModifier\")\n\npackage kotlin\n\nimport kotlin.contracts.*\nimport kotlin.internal.InlineOnly\nimport kotlin.jvm.JvmField\nimport kotlin.jvm.JvmName\n\n/**\n * A discriminated union that encapsulates a successful outcome with a value of type [T]\n * or a failure with an arbitrary [Throwable] exception.\n */\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\npublic inline class Result<out T> @PublishedApi internal constructor(\n @PublishedApi\n internal val value: Any?\n) : Serializable {\n // discovery\n\n /**\n * Returns `true` if this instance represents a successful outcome.\n * In this case [isFailure] returns `false`.\n */\n public val isSuccess: Boolean get() = value !is Failure\n\n /**\n * Returns `true` if this instance represents a failed outcome.\n * In this case [isSuccess] returns `false`.\n */\n public val isFailure: Boolean get() = value is Failure\n\n // value & exception retrieval\n\n /**\n * Returns the encapsulated value if this instance represents [success][Result.isSuccess] or `null`\n * if it is [failure][Result.isFailure].\n *\n * This function is a shorthand for `getOrElse { null }` (see [getOrElse]) or\n * `fold(onSuccess = { it }, onFailure = { null })` (see [fold]).\n */\n @InlineOnly\n public inline fun getOrNull(): T? =\n when {\n isFailure -> null\n else -> value as T\n }\n\n /**\n * Returns the encapsulated [Throwable] exception if this instance represents [failure][isFailure] or `null`\n * if it is [success][isSuccess].\n *\n * This function is a shorthand for `fold(onSuccess = { null }, onFailure = { it })` (see [fold]).\n */\n public fun exceptionOrNull(): Throwable? =\n when (value) {\n is Failure -> value.exception\n else -> null\n }\n\n /**\n * Returns a string `Success(v)` if this instance represents [success][Result.isSuccess]\n * where `v` is a string representation of the value or a string `Failure(x)` if\n * it is [failure][isFailure] where `x` is a string representation of the exception.\n */\n public override fun toString(): String =\n when (value) {\n is Failure -> value.toString() // \"Failure($exception)\"\n else -> \"Success($value)\"\n }\n\n // companion with constructors\n\n /**\n * Companion object for [Result] class that contains its constructor functions\n * [success] and [failure].\n */\n public companion object {\n /**\n * Returns an instance that encapsulates the given [value] as successful value.\n */\n @Suppress(\"INAPPLICABLE_JVM_NAME\")\n @InlineOnly\n @JvmName(\"success\")\n public inline fun <T> success(value: T): Result<T> =\n Result(value)\n\n /**\n * Returns an instance that encapsulates the given [Throwable] [exception] as failure.\n */\n @Suppress(\"INAPPLICABLE_JVM_NAME\")\n @InlineOnly\n @JvmName(\"failure\")\n public inline fun <T> failure(exception: Throwable): Result<T> =\n Result(createFailure(exception))\n }\n\n internal class Failure(\n @JvmField\n val exception: Throwable\n ) : Serializable {\n override fun equals(other: Any?): Boolean = other is Failure && exception == other.exception\n override fun hashCode(): Int = exception.hashCode()\n override fun toString(): String = \"Failure($exception)\"\n }\n}\n\n/**\n * Creates an instance of internal marker [Result.Failure] class to\n * make sure that this class is not exposed in ABI.\n */\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun createFailure(exception: Throwable): Any =\n Result.Failure(exception)\n\n/**\n * Throws exception if the result is failure. This internal function minimizes\n * inlined bytecode for [getOrThrow] and makes sure that in the future we can\n * add some exception-augmenting logic here (if needed).\n */\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun Result<*>.throwOnFailure() {\n if (value is Result.Failure) throw value.exception\n}\n\n/**\n * Calls the specified function [block] and returns its encapsulated result if invocation was successful,\n * catching any [Throwable] exception that was thrown from the [block] function execution and encapsulating it as a failure.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R> runCatching(block: () -> R): Result<R> {\n return try {\n Result.success(block())\n } catch (e: Throwable) {\n Result.failure(e)\n }\n}\n\n/**\n * Calls the specified function [block] with `this` value as its receiver and returns its encapsulated result if invocation was successful,\n * catching any [Throwable] exception that was thrown from the [block] function execution and encapsulating it as a failure.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <T, R> T.runCatching(block: T.() -> R): Result<R> {\n return try {\n Result.success(block())\n } catch (e: Throwable) {\n Result.failure(e)\n }\n}\n\n// -- extensions ---\n\n/**\n * Returns the encapsulated value if this instance represents [success][Result.isSuccess] or throws the encapsulated [Throwable] exception\n * if it is [failure][Result.isFailure].\n *\n * This function is a shorthand for `getOrElse { throw it }` (see [getOrElse]).\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <T> Result<T>.getOrThrow(): T {\n throwOnFailure()\n return value as T\n}\n\n/**\n * Returns the encapsulated value if this instance represents [success][Result.isSuccess] or the\n * result of [onFailure] function for the encapsulated [Throwable] exception if it is [failure][Result.isFailure].\n *\n * Note, that this function rethrows any [Throwable] exception thrown by [onFailure] function.\n *\n * This function is a shorthand for `fold(onSuccess = { it }, onFailure = onFailure)` (see [fold]).\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T : R> Result<T>.getOrElse(onFailure: (exception: Throwable) -> R): R {\n contract {\n callsInPlace(onFailure, InvocationKind.AT_MOST_ONCE)\n }\n return when (val exception = exceptionOrNull()) {\n null -> value as T\n else -> onFailure(exception)\n }\n}\n\n/**\n * Returns the encapsulated value if this instance represents [success][Result.isSuccess] or the\n * [defaultValue] if it is [failure][Result.isFailure].\n *\n * This function is a shorthand for `getOrElse { defaultValue }` (see [getOrElse]).\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T : R> Result<T>.getOrDefault(defaultValue: R): R {\n if (isFailure) return defaultValue\n return value as T\n}\n\n/**\n * Returns the result of [onSuccess] for the encapsulated value if this instance represents [success][Result.isSuccess]\n * or the result of [onFailure] function for the encapsulated [Throwable] exception if it is [failure][Result.isFailure].\n *\n * Note, that this function rethrows any [Throwable] exception thrown by [onSuccess] or by [onFailure] function.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T> Result<T>.fold(\n onSuccess: (value: T) -> R,\n onFailure: (exception: Throwable) -> R\n): R {\n contract {\n callsInPlace(onSuccess, InvocationKind.AT_MOST_ONCE)\n callsInPlace(onFailure, InvocationKind.AT_MOST_ONCE)\n }\n return when (val exception = exceptionOrNull()) {\n null -> onSuccess(value as T)\n else -> onFailure(exception)\n }\n}\n\n// transformation\n\n/**\n * Returns the encapsulated result of the given [transform] function applied to the encapsulated value\n * if this instance represents [success][Result.isSuccess] or the\n * original encapsulated [Throwable] exception if it is [failure][Result.isFailure].\n *\n * Note, that this function rethrows any [Throwable] exception thrown by [transform] function.\n * See [mapCatching] for an alternative that encapsulates exceptions.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T> Result<T>.map(transform: (value: T) -> R): Result<R> {\n contract {\n callsInPlace(transform, InvocationKind.AT_MOST_ONCE)\n }\n return when {\n isSuccess -> Result.success(transform(value as T))\n else -> Result(value)\n }\n}\n\n/**\n * Returns the encapsulated result of the given [transform] function applied to the encapsulated value\n * if this instance represents [success][Result.isSuccess] or the\n * original encapsulated [Throwable] exception if it is [failure][Result.isFailure].\n *\n * This function catches any [Throwable] exception thrown by [transform] function and encapsulates it as a failure.\n * See [map] for an alternative that rethrows exceptions from `transform` function.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T> Result<T>.mapCatching(transform: (value: T) -> R): Result<R> {\n return when {\n isSuccess -> runCatching { transform(value as T) }\n else -> Result(value)\n }\n}\n\n/**\n * Returns the encapsulated result of the given [transform] function applied to the encapsulated [Throwable] exception\n * if this instance represents [failure][Result.isFailure] or the\n * original encapsulated value if it is [success][Result.isSuccess].\n *\n * Note, that this function rethrows any [Throwable] exception thrown by [transform] function.\n * See [recoverCatching] for an alternative that encapsulates exceptions.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T : R> Result<T>.recover(transform: (exception: Throwable) -> R): Result<R> {\n contract {\n callsInPlace(transform, InvocationKind.AT_MOST_ONCE)\n }\n return when (val exception = exceptionOrNull()) {\n null -> this\n else -> Result.success(transform(exception))\n }\n}\n\n/**\n * Returns the encapsulated result of the given [transform] function applied to the encapsulated [Throwable] exception\n * if this instance represents [failure][Result.isFailure] or the\n * original encapsulated value if it is [success][Result.isSuccess].\n *\n * This function catches any [Throwable] exception thrown by [transform] function and encapsulates it as a failure.\n * See [recover] for an alternative that rethrows exceptions.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <R, T : R> Result<T>.recoverCatching(transform: (exception: Throwable) -> R): Result<R> {\n return when (val exception = exceptionOrNull()) {\n null -> this\n else -> runCatching { transform(exception) }\n }\n}\n\n// \"peek\" onto value/exception and pipe\n\n/**\n * Performs the given [action] on the encapsulated [Throwable] exception if this instance represents [failure][Result.isFailure].\n * Returns the original `Result` unchanged.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <T> Result<T>.onFailure(action: (exception: Throwable) -> Unit): Result<T> {\n contract {\n callsInPlace(action, InvocationKind.AT_MOST_ONCE)\n }\n exceptionOrNull()?.let { action(it) }\n return this\n}\n\n/**\n * Performs the given [action] on the encapsulated value if this instance represents [success][Result.isSuccess].\n * Returns the original `Result` unchanged.\n */\n@InlineOnly\n@SinceKotlin(\"1.3\")\npublic inline fun <T> Result<T>.onSuccess(action: (value: T) -> Unit): Result<T> {\n contract {\n callsInPlace(action, InvocationKind.AT_MOST_ONCE)\n }\n if (isSuccess) action(value as T)\n return this\n}\n\n// -------------------\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\nimport kotlin.contracts.*\nimport kotlin.coroutines.intrinsics.*\nimport kotlin.internal.InlineOnly\n\n/**\n * Interface representing a continuation after a suspension point that returns a value of type `T`.\n */\n@SinceKotlin(\"1.3\")\npublic interface Continuation<in T> {\n /**\n * The context of the coroutine that corresponds to this continuation.\n */\n public val context: CoroutineContext\n\n /**\n * Resumes the execution of the corresponding coroutine passing a successful or failed [result] as the\n * return value of the last suspension point.\n */\n public fun resumeWith(result: Result<T>)\n}\n\n/**\n * Classes and interfaces marked with this annotation are restricted when used as receivers for extension\n * `suspend` functions. These `suspend` extensions can only invoke other member or extension `suspend` functions on this particular\n * receiver and are restricted from calling arbitrary suspension functions.\n */\n@SinceKotlin(\"1.3\")\n@Target(AnnotationTarget.CLASS)\n@Retention(AnnotationRetention.BINARY)\npublic annotation class RestrictsSuspension\n\n/**\n * Resumes the execution of the corresponding coroutine passing [value] as the return value of the last suspension point.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic inline fun <T> Continuation<T>.resume(value: T): Unit =\n resumeWith(Result.success(value))\n\n/**\n * Resumes the execution of the corresponding coroutine so that the [exception] is re-thrown right after the\n * last suspension point.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic inline fun <T> Continuation<T>.resumeWithException(exception: Throwable): Unit =\n resumeWith(Result.failure(exception))\n\n\n/**\n * Creates a [Continuation] instance with the given [context] and implementation of [resumeWith] method.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic inline fun <T> Continuation(\n context: CoroutineContext,\n crossinline resumeWith: (Result<T>) -> Unit\n): Continuation<T> =\n object : Continuation<T> {\n override val context: CoroutineContext\n get() = context\n\n override fun resumeWith(result: Result<T>) =\n resumeWith(result)\n }\n\n/**\n * Creates a coroutine without a receiver and with result type [T].\n * This function creates a new, fresh instance of suspendable computation every time it is invoked.\n *\n * To start executing the created coroutine, invoke `resume(Unit)` on the returned [Continuation] instance.\n * The [completion] continuation is invoked when the coroutine completes with a result or an exception.\n * Subsequent invocation of any resume function on the resulting continuation will produce an [IllegalStateException].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"UNCHECKED_CAST\")\npublic fun <T> (suspend () -> T).createCoroutine(\n completion: Continuation<T>\n): Continuation<Unit> =\n SafeContinuation(createCoroutineUnintercepted(completion).intercepted(), COROUTINE_SUSPENDED)\n\n/**\n * Creates a coroutine with receiver type [R] and result type [T].\n * This function creates a new, fresh instance of suspendable computation every time it is invoked.\n *\n * To start executing the created coroutine, invoke `resume(Unit)` on the returned [Continuation] instance.\n * The [completion] continuation is invoked when the coroutine completes with a result or an exception.\n * Subsequent invocation of any resume function on the resulting continuation will produce an [IllegalStateException].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"UNCHECKED_CAST\")\npublic fun <R, T> (suspend R.() -> T).createCoroutine(\n receiver: R,\n completion: Continuation<T>\n): Continuation<Unit> =\n SafeContinuation(createCoroutineUnintercepted(receiver, completion).intercepted(), COROUTINE_SUSPENDED)\n\n/**\n * Starts a coroutine without a receiver and with result type [T].\n * This function creates and starts a new, fresh instance of suspendable computation every time it is invoked.\n * The [completion] continuation is invoked when the coroutine completes with a result or an exception.\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"UNCHECKED_CAST\")\npublic fun <T> (suspend () -> T).startCoroutine(\n completion: Continuation<T>\n) {\n createCoroutineUnintercepted(completion).intercepted().resume(Unit)\n}\n\n/**\n * Starts a coroutine with receiver type [R] and result type [T].\n * This function creates and starts a new, fresh instance of suspendable computation every time it is invoked.\n * The [completion] continuation is invoked when the coroutine completes with a result or an exception.\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"UNCHECKED_CAST\")\npublic fun <R, T> (suspend R.() -> T).startCoroutine(\n receiver: R,\n completion: Continuation<T>\n) {\n createCoroutineUnintercepted(receiver, completion).intercepted().resume(Unit)\n}\n\n/**\n * Obtains the current continuation instance inside suspend functions and suspends\n * the currently running coroutine.\n *\n * In this function both [Continuation.resume] and [Continuation.resumeWithException] can be used either synchronously in\n * the same stack-frame where the suspension function is run or asynchronously later in the same thread or\n * from a different thread of execution. Subsequent invocation of any resume function will produce an [IllegalStateException].\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic suspend inline fun <T> suspendCoroutine(crossinline block: (Continuation<T>) -> Unit): T {\n contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }\n return suspendCoroutineUninterceptedOrReturn { c: Continuation<T> ->\n val safe = SafeContinuation(c.intercepted())\n block(safe)\n safe.getOrThrow()\n }\n}\n\n/**\n * Returns the context of the current coroutine.\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"WRONG_MODIFIER_TARGET\")\n@InlineOnly\npublic suspend inline val coroutineContext: CoroutineContext\n get() {\n throw NotImplementedError(\"Implemented as intrinsic\")\n }\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines.intrinsics\n\nimport kotlin.coroutines.*\nimport kotlin.internal.InlineOnly\n\n/**\n * Starts an unintercepted coroutine without a receiver and with result type [T] and executes it until its first suspension.\n * Returns the result of the coroutine or throws its exception if it does not suspend or [COROUTINE_SUSPENDED] if it suspends.\n * In the latter case, the [completion] continuation is invoked when the coroutine completes with a result or an exception.\n *\n * The coroutine is started directly in the invoker's thread without going through the [ContinuationInterceptor] that might\n * be present in the completion's [CoroutineContext]. It is the invoker's responsibility to ensure that a proper invocation\n * context is established.\n *\n * This function is designed to be used from inside of [suspendCoroutineUninterceptedOrReturn] to resume the execution of the suspended\n * coroutine using a reference to the suspending function.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic actual inline fun <T> (suspend () -> T).startCoroutineUninterceptedOrReturn(\n completion: Continuation<T>\n): Any? = this.asDynamic()(completion, false)\n\n/**\n * Starts an unintercepted coroutine with receiver type [R] and result type [T] and executes it until its first suspension.\n * Returns the result of the coroutine or throws its exception if it does not suspend or [COROUTINE_SUSPENDED] if it suspends.\n * In the latter case, the [completion] continuation is invoked when the coroutine completes with a result or an exception.\n *\n * The coroutine is started directly in the invoker's thread without going through the [ContinuationInterceptor] that might\n * be present in the completion's [CoroutineContext]. It is the invoker's responsibility to ensure that a proper invocation\n * context is established.\n *\n * This function is designed to be used from inside of [suspendCoroutineUninterceptedOrReturn] to resume the execution of the suspended\n * coroutine using a reference to the suspending function.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic actual inline fun <R, T> (suspend R.() -> T).startCoroutineUninterceptedOrReturn(\n receiver: R,\n completion: Continuation<T>\n): Any? = this.asDynamic()(receiver, completion, false)\n\n@InlineOnly\ninternal actual inline fun <R, P, T> (suspend R.(P) -> T).startCoroutineUninterceptedOrReturn(\n receiver: R,\n param: P,\n completion: Continuation<T>\n): Any? = this.asDynamic()(receiver, param, completion, false)\n\n/**\n * Creates unintercepted coroutine without receiver and with result type [T].\n * This function creates a new, fresh instance of suspendable computation every time it is invoked.\n *\n * To start executing the created coroutine, invoke `resume(Unit)` on the returned [Continuation] instance.\n * The [completion] continuation is invoked when coroutine completes with result or exception.\n *\n * This function returns unintercepted continuation.\n * Invocation of `resume(Unit)` starts coroutine immediately in the invoker's call stack without going through the\n * [ContinuationInterceptor] that might be present in the completion's [CoroutineContext].\n * It is the invoker's responsibility to ensure that a proper invocation context is established.\n * Note that [completion] of this function may get invoked in an arbitrary context.\n *\n * [Continuation.intercepted] can be used to acquire the intercepted continuation.\n * Invocation of `resume(Unit)` on intercepted continuation guarantees that execution of\n * both the coroutine and [completion] happens in the invocation context established by\n * [ContinuationInterceptor].\n *\n * Repeated invocation of any resume function on the resulting continuation corrupts the\n * state machine of the coroutine and may result in arbitrary behaviour or exception.\n */\n@SinceKotlin(\"1.3\")\npublic actual fun <T> (suspend () -> T).createCoroutineUnintercepted(\n completion: Continuation<T>\n): Continuation<Unit> =\n // Kotlin/JS suspend lambdas have an extra parameter `suspended`\n if (this.asDynamic().length == 2) {\n // When `suspended` is true the continuation is created, but not executed\n this.asDynamic()(completion, true)\n } else {\n createCoroutineFromSuspendFunction(completion) {\n this.asDynamic()(completion)\n }\n }\n\n/**\n * Creates unintercepted coroutine with receiver type [R] and result type [T].\n * This function creates a new, fresh instance of suspendable computation every time it is invoked.\n *\n * To start executing the created coroutine, invoke `resume(Unit)` on the returned [Continuation] instance.\n * The [completion] continuation is invoked when coroutine completes with result or exception.\n *\n * This function returns unintercepted continuation.\n * Invocation of `resume(Unit)` starts coroutine immediately in the invoker's call stack without going through the\n * [ContinuationInterceptor] that might be present in the completion's [CoroutineContext].\n * It is the invoker's responsibility to ensure that a proper invocation context is established.\n * Note that [completion] of this function may get invoked in an arbitrary context.\n *\n * [Continuation.intercepted] can be used to acquire the intercepted continuation.\n * Invocation of `resume(Unit)` on intercepted continuation guarantees that execution of\n * both the coroutine and [completion] happens in the invocation context established by\n * [ContinuationInterceptor].\n *\n * Repeated invocation of any resume function on the resulting continuation corrupts the\n * state machine of the coroutine and may result in arbitrary behaviour or exception.\n */\n@SinceKotlin(\"1.3\")\npublic actual fun <R, T> (suspend R.() -> T).createCoroutineUnintercepted(\n receiver: R,\n completion: Continuation<T>\n): Continuation<Unit> =\n // Kotlin/JS suspend lambdas have an extra parameter `suspended`\n if (this.asDynamic().length == 3) {\n // When `suspended` is true the continuation is created, but not executed\n this.asDynamic()(receiver, completion, true)\n } else {\n createCoroutineFromSuspendFunction(completion) {\n this.asDynamic()(receiver, completion)\n }\n }\n\n/**\n * Intercepts this continuation with [ContinuationInterceptor].\n *\n * This function shall be used on the immediate result of [createCoroutineUnintercepted] or [suspendCoroutineUninterceptedOrReturn],\n * in which case it checks for [ContinuationInterceptor] in the continuation's [context][Continuation.context],\n * invokes [ContinuationInterceptor.interceptContinuation], caches and returns the result.\n *\n * If this function is invoked on other [Continuation] instances it returns `this` continuation unchanged.\n */\n@SinceKotlin(\"1.3\")\npublic actual fun <T> Continuation<T>.intercepted(): Continuation<T> =\n (this as? CoroutineImpl)?.intercepted() ?: this\n\n\nprivate inline fun <T> createCoroutineFromSuspendFunction(\n completion: Continuation<T>,\n crossinline block: () -> Any?\n): Continuation<Unit> {\n @Suppress(\"UNCHECKED_CAST\")\n return object : CoroutineImpl(completion as Continuation<Any?>) {\n override fun doResume(): Any? {\n exception?.let { throw it }\n return block()\n }\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\n// NOTE: Do not author your exceptions as they are written in this file, instead use this template:\n/*\npublic open class MyException : Exception {\n constructor() : super()\n constructor(message: String?) : super(message)\n constructor(message: String?, cause: Throwable?) : super(message, cause)\n constructor(cause: Throwable?) : super(cause)\n}\n*/\n\n\n// TODO: remove primary constructors, make all secondary KT-22055\n\n@Suppress(\"USELESS_ELVIS_RIGHT_IS_NULL\")\npublic actual open class Error actual constructor(message: String?, cause: Throwable?) : Throwable(message, cause ?: null) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\n@Suppress(\"USELESS_ELVIS_RIGHT_IS_NULL\")\npublic actual open class Exception actual constructor(message: String?, cause: Throwable?) : Throwable(message, cause ?: null) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class RuntimeException actual constructor(message: String?, cause: Throwable?) : Exception(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class IllegalArgumentException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class IllegalStateException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class IndexOutOfBoundsException actual constructor(message: String?) : RuntimeException(message) {\n actual constructor() : this(null)\n}\n\npublic actual open class ConcurrentModificationException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class UnsupportedOperationException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\n\npublic actual open class NumberFormatException actual constructor(message: String?) : IllegalArgumentException(message) {\n actual constructor() : this(null)\n}\n\n\npublic actual open class NullPointerException actual constructor(message: String?) : RuntimeException(message) {\n actual constructor() : this(null)\n}\n\npublic actual open class ClassCastException actual constructor(message: String?) : RuntimeException(message) {\n actual constructor() : this(null)\n}\n\npublic actual open class AssertionError\n@SinceKotlin(\"1.4\")\nconstructor(message: String?, cause: Throwable?) : Error(message, cause) {\n actual constructor() : this(null)\n constructor(message: String?) : this(message, null)\n actual constructor(message: Any?) : this(message.toString(), message as? Throwable)\n}\n\npublic actual open class NoSuchElementException actual constructor(message: String?) : RuntimeException(message) {\n actual constructor() : this(null)\n}\n\n@SinceKotlin(\"1.3\")\npublic actual open class ArithmeticException actual constructor(message: String?) : RuntimeException(message) {\n actual constructor() : this(null)\n}\n\npublic actual open class NoWhenBranchMatchedException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n\npublic actual open class UninitializedPropertyAccessException actual constructor(message: String?, cause: Throwable?) : RuntimeException(message, cause) {\n actual constructor() : this(null, null)\n actual constructor(message: String?) : this(message, null)\n actual constructor(cause: Throwable?) : this(undefined, cause)\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:Suppress(\"UNUSED_PARAMETER\", \"NOTHING_TO_INLINE\")\n\npackage kotlin\n\n/**\n * Returns an empty array of the specified type [T].\n */\npublic inline fun <T> emptyArray(): Array<T> = js(\"[]\")\n\n@library\npublic fun <T> arrayOf(vararg elements: T): Array<T> = definedExternally\n\n@library\npublic fun doubleArrayOf(vararg elements: Double): DoubleArray = definedExternally\n\n@library\npublic fun floatArrayOf(vararg elements: Float): FloatArray = definedExternally\n\n@library\npublic fun longArrayOf(vararg elements: Long): LongArray = definedExternally\n\n@library\npublic fun intArrayOf(vararg elements: Int): IntArray = definedExternally\n\n@library\npublic fun charArrayOf(vararg elements: Char): CharArray = definedExternally\n\n@library\npublic fun shortArrayOf(vararg elements: Short): ShortArray = definedExternally\n\n@library\npublic fun byteArrayOf(vararg elements: Byte): ByteArray = definedExternally\n\n@library\npublic fun booleanArrayOf(vararg elements: Boolean): BooleanArray = definedExternally\n\n/**\n * Creates a new instance of the [Lazy] that uses the specified initialization function [initializer].\n */\npublic actual fun <T> lazy(initializer: () -> T): Lazy<T> = UnsafeLazyImpl(initializer)\n\n/**\n * Creates a new instance of the [Lazy] that uses the specified initialization function [initializer].\n *\n * The [mode] parameter is ignored. */\npublic actual fun <T> lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy<T> = UnsafeLazyImpl(initializer)\n\n/**\n * Creates a new instance of the [Lazy] that uses the specified initialization function [initializer].\n *\n * The [lock] parameter is ignored.\n */\npublic actual fun <T> lazy(lock: Any?, initializer: () -> T): Lazy<T> = UnsafeLazyImpl(initializer)\n\n\ninternal fun fillFrom(src: dynamic, dst: dynamic): dynamic {\n val srcLen: Int = src.length\n val dstLen: Int = dst.length\n var index: Int = 0\n while (index < srcLen && index < dstLen) dst[index] = src[index++]\n return dst\n}\n\n\ninternal fun arrayCopyResize(source: dynamic, newSize: Int, defaultValue: Any?): dynamic {\n val result = source.slice(0, newSize)\n copyArrayType(source, result)\n var index: Int = source.length\n if (newSize > index) {\n result.length = newSize\n while (index < newSize) result[index++] = defaultValue\n }\n return result\n}\n\ninternal fun <T> arrayPlusCollection(array: dynamic, collection: Collection<T>): dynamic {\n val result = array.slice()\n result.length += collection.size\n copyArrayType(array, result)\n var index: Int = array.length\n for (element in collection) result[index++] = element\n return result\n}\n\ninternal fun <T> fillFromCollection(dst: dynamic, startIndex: Int, collection: Collection<T>): dynamic {\n var index = startIndex\n for (element in collection) dst[index++] = element\n return dst\n}\n\ninternal inline fun copyArrayType(from: dynamic, to: dynamic) {\n if (from.`$type$` !== undefined) {\n to.`$type$` = from.`$type$`\n }\n}\n\ninternal inline fun jsIsType(obj: dynamic, jsClass: dynamic) = js(\"Kotlin\").isType(obj, jsClass)","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n/**\n * Returns a string representation of this [Long] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Long.toString(radix: Int): String = asDynamic().toString(checkRadix(radix))","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.js.*\nimport primitiveArrayConcat\nimport withType\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun <T> Array<out T>.elementAt(index: Int): T {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun ByteArray.elementAt(index: Int): Byte {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun ShortArray.elementAt(index: Int): Short {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun IntArray.elementAt(index: Int): Int {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun LongArray.elementAt(index: Int): Long {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun FloatArray.elementAt(index: Int): Float {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun DoubleArray.elementAt(index: Int): Double {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun BooleanArray.elementAt(index: Int): Boolean {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic actual fun CharArray.elementAt(index: Int): Char {\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, size: $size}\") }\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic actual fun <T> Array<out T>.asList(): List<T> {\n return ArrayList<T>(this.unsafeCast<Array<Any?>>())\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun ByteArray.asList(): List<Byte> {\n return this.unsafeCast<Array<Byte>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun ShortArray.asList(): List<Short> {\n return this.unsafeCast<Array<Short>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun IntArray.asList(): List<Int> {\n return this.unsafeCast<Array<Int>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun LongArray.asList(): List<Long> {\n return this.unsafeCast<Array<Long>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun FloatArray.asList(): List<Float> {\n return this.unsafeCast<Array<Float>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun DoubleArray.asList(): List<Double> {\n return this.unsafeCast<Array<Double>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun BooleanArray.asList(): List<Boolean> {\n return this.unsafeCast<Array<Boolean>>().asList()\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\npublic actual fun CharArray.asList(): List<Char> {\n return object : AbstractList<Char>(), RandomAccess {\n override val size: Int get() = this@asList.size\n override fun isEmpty(): Boolean = this@asList.isEmpty()\n override fun contains(element: Char): Boolean = this@asList.contains(element)\n override fun get(index: Int): Char {\n AbstractList.checkElementIndex(index, size)\n return this@asList[index]\n }\n override fun indexOf(element: Char): Int {\n @Suppress(\"USELESS_CAST\")\n if ((element as Any?) !is Char) return -1\n return this@asList.indexOf(element)\n }\n override fun lastIndexOf(element: Char): Int {\n @Suppress(\"USELESS_CAST\")\n if ((element as Any?) !is Char) return -1\n return this@asList.lastIndexOf(element)\n }\n }\n}\n\n/**\n * Returns `true` if the two specified arrays are *deeply* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * If two corresponding elements are nested arrays, they are also compared deeply.\n * If any of arrays contains itself on any nesting level the behavior is undefined.\n * \n * The elements of other types are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic actual infix fun <T> Array<out T>.contentDeepEquals(other: Array<out T>): Boolean {\n return this.contentDeepEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *deeply* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The specified arrays are also considered deeply equal if both are `null`.\n * \n * If two corresponding elements are nested arrays, they are also compared deeply.\n * If any of arrays contains itself on any nesting level the behavior is undefined.\n * \n * The elements of other types are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayDeepEquals\")\npublic actual infix fun <T> Array<out T>?.contentDeepEquals(other: Array<out T>?): Boolean {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level the behavior is undefined.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic actual fun <T> Array<out T>.contentDeepHashCode(): Int {\n return this.contentDeepHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level the behavior is undefined.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayDeepHashCode\")\npublic actual fun <T> Array<out T>?.contentDeepHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of this array as if it is a [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level that reference\n * is rendered as `\"[...]\"` to prevent recursion.\n * \n * @sample samples.collections.Arrays.ContentOperations.contentDeepToString\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.LowPriorityInOverloadResolution\npublic actual fun <T> Array<out T>.contentDeepToString(): String {\n return this.contentDeepToString()\n}\n\n/**\n * Returns a string representation of the contents of this array as if it is a [List].\n * Nested arrays are treated as lists too.\n * \n * If any of arrays contains itself on any nesting level that reference\n * is rendered as `\"[...]\"` to prevent recursion.\n * \n * @sample samples.collections.Arrays.ContentOperations.contentDeepToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayDeepToString\")\npublic actual fun <T> Array<out T>?.contentDeepToString(): String {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun <T> Array<out T>.contentEquals(other: Array<out T>): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun ByteArray.contentEquals(other: ByteArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun ShortArray.contentEquals(other: ShortArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun IntArray.contentEquals(other: IntArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun LongArray.contentEquals(other: LongArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun FloatArray.contentEquals(other: FloatArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun DoubleArray.contentEquals(other: DoubleArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun BooleanArray.contentEquals(other: BooleanArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual infix fun CharArray.contentEquals(other: CharArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun <T> Array<out T>?.contentEquals(other: Array<out T>?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun ByteArray?.contentEquals(other: ByteArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun ShortArray?.contentEquals(other: ShortArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun IntArray?.contentEquals(other: IntArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun LongArray?.contentEquals(other: LongArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun FloatArray?.contentEquals(other: FloatArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun DoubleArray?.contentEquals(other: DoubleArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun BooleanArray?.contentEquals(other: BooleanArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n * \n * The elements are compared for equality with the [equals][Any.equals] function.\n * For floating point numbers it means that `NaN` is equal to itself and `-0.0` is not equal to `0.0`.\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayEquals\")\npublic actual infix fun CharArray?.contentEquals(other: CharArray?): Boolean {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun <T> Array<out T>.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun ByteArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun ShortArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun IntArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun LongArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun FloatArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun DoubleArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun BooleanArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun CharArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun <T> Array<out T>?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun ByteArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun ShortArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun IntArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun LongArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun FloatArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun DoubleArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun BooleanArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayHashCode\")\npublic actual fun CharArray?.contentHashCode(): Int {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun <T> Array<out T>.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun ByteArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun ShortArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun IntArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun LongArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun FloatArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun DoubleArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun BooleanArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.1\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\npublic actual fun CharArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun <T> Array<out T>?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun ByteArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun ShortArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun IntArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun LongArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun FloatArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun DoubleArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun BooleanArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@library(\"arrayToString\")\npublic actual fun CharArray?.contentToString(): String {\n definedExternally\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun <T> Array<out T>.copyInto(destination: Array<T>, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): Array<T> {\n arrayCopy(this, destination, destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun ByteArray.copyInto(destination: ByteArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): ByteArray {\n arrayCopy(this.unsafeCast<Array<Byte>>(), destination.unsafeCast<Array<Byte>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun ShortArray.copyInto(destination: ShortArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): ShortArray {\n arrayCopy(this.unsafeCast<Array<Short>>(), destination.unsafeCast<Array<Short>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun IntArray.copyInto(destination: IntArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): IntArray {\n arrayCopy(this.unsafeCast<Array<Int>>(), destination.unsafeCast<Array<Int>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun LongArray.copyInto(destination: LongArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): LongArray {\n arrayCopy(this.unsafeCast<Array<Long>>(), destination.unsafeCast<Array<Long>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun FloatArray.copyInto(destination: FloatArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): FloatArray {\n arrayCopy(this.unsafeCast<Array<Float>>(), destination.unsafeCast<Array<Float>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun DoubleArray.copyInto(destination: DoubleArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): DoubleArray {\n arrayCopy(this.unsafeCast<Array<Double>>(), destination.unsafeCast<Array<Double>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun BooleanArray.copyInto(destination: BooleanArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): BooleanArray {\n arrayCopy(this.unsafeCast<Array<Boolean>>(), destination.unsafeCast<Array<Boolean>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun CharArray.copyInto(destination: CharArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): CharArray {\n arrayCopy(this.unsafeCast<Array<Char>>(), destination.unsafeCast<Array<Char>>(), destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"NOTHING_TO_INLINE\")\npublic actual inline fun <T> Array<out T>.copyOf(): Array<T> {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun ByteArray.copyOf(): ByteArray {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun ShortArray.copyOf(): ShortArray {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun IntArray.copyOf(): IntArray {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic actual fun LongArray.copyOf(): LongArray {\n return withType(\"LongArray\", this.asDynamic().slice())\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun FloatArray.copyOf(): FloatArray {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun DoubleArray.copyOf(): DoubleArray {\n return this.asDynamic().slice()\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic actual fun BooleanArray.copyOf(): BooleanArray {\n return withType(\"BooleanArray\", this.asDynamic().slice())\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\npublic actual fun CharArray.copyOf(): CharArray {\n return withType(\"CharArray\", this.asDynamic().slice())\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun ByteArray.copyOf(newSize: Int): ByteArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return fillFrom(this, ByteArray(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun ShortArray.copyOf(newSize: Int): ShortArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return fillFrom(this, ShortArray(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun IntArray.copyOf(newSize: Int): IntArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return fillFrom(this, IntArray(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun LongArray.copyOf(newSize: Int): LongArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return withType(\"LongArray\", arrayCopyResize(this, newSize, 0L))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun FloatArray.copyOf(newSize: Int): FloatArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return fillFrom(this, FloatArray(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun DoubleArray.copyOf(newSize: Int): DoubleArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return fillFrom(this, DoubleArray(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with `false` values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with `false` values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun BooleanArray.copyOf(newSize: Int): BooleanArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return withType(\"BooleanArray\", arrayCopyResize(this, newSize, false))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with null char (`\\u0000`) values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with null char (`\\u0000`) values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizedPrimitiveCopyOf\n */\npublic actual fun CharArray.copyOf(newSize: Int): CharArray {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return withType(\"CharArray\", fillFrom(this, CharArray(newSize)))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with `null` values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with `null` values.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.resizingCopyOf\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\")\npublic actual fun <T> Array<out T>.copyOf(newSize: Int): Array<T?> {\n require(newSize >= 0) { \"Invalid new array size: $newSize.\" }\n return arrayCopyResize(this, newSize, null)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\")\npublic actual fun <T> Array<out T>.copyOfRange(fromIndex: Int, toIndex: Int): Array<T> {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return withType(\"LongArray\", this.asDynamic().slice(fromIndex, toIndex))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return this.asDynamic().slice(fromIndex, toIndex)\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return withType(\"BooleanArray\", this.asDynamic().slice(fromIndex, toIndex))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\npublic actual fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n return withType(\"CharArray\", this.asDynamic().slice(fromIndex, toIndex))\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun <T> Array<T>.fill(element: T, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun ByteArray.fill(element: Byte, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun ShortArray.fill(element: Short, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun IntArray.fill(element: Int, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun LongArray.fill(element: Long, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun FloatArray.fill(element: Float, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun DoubleArray.fill(element: Double, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun BooleanArray.fill(element: Boolean, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun CharArray.fill(element: Char, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n this.asDynamic().fill(element, fromIndex, toIndex);\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"NOTHING_TO_INLINE\")\npublic actual inline operator fun <T> Array<out T>.plus(element: T): Array<T> {\n return this.asDynamic().concat(arrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun ByteArray.plus(element: Byte): ByteArray {\n return plus(byteArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun ShortArray.plus(element: Short): ShortArray {\n return plus(shortArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun IntArray.plus(element: Int): IntArray {\n return plus(intArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun LongArray.plus(element: Long): LongArray {\n return plus(longArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun FloatArray.plus(element: Float): FloatArray {\n return plus(floatArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun DoubleArray.plus(element: Double): DoubleArray {\n return plus(doubleArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun BooleanArray.plus(element: Boolean): BooleanArray {\n return plus(booleanArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun CharArray.plus(element: Char): CharArray {\n return plus(charArrayOf(element))\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\")\npublic actual operator fun <T> Array<out T>.plus(elements: Collection<T>): Array<T> {\n return arrayPlusCollection(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun ByteArray.plus(elements: Collection<Byte>): ByteArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun ShortArray.plus(elements: Collection<Short>): ShortArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun IntArray.plus(elements: Collection<Int>): IntArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun LongArray.plus(elements: Collection<Long>): LongArray {\n return arrayPlusCollection(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun FloatArray.plus(elements: Collection<Float>): FloatArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun DoubleArray.plus(elements: Collection<Double>): DoubleArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun BooleanArray.plus(elements: Collection<Boolean>): BooleanArray {\n return arrayPlusCollection(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\npublic actual operator fun CharArray.plus(elements: Collection<Char>): CharArray {\n return fillFromCollection(this.copyOf(size + elements.size), this.size, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"NOTHING_TO_INLINE\")\npublic actual inline operator fun <T> Array<out T>.plus(elements: Array<out T>): Array<T> {\n return this.asDynamic().concat(elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun ByteArray.plus(elements: ByteArray): ByteArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun ShortArray.plus(elements: ShortArray): ShortArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun IntArray.plus(elements: IntArray): IntArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun LongArray.plus(elements: LongArray): LongArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun FloatArray.plus(elements: FloatArray): FloatArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun DoubleArray.plus(elements: DoubleArray): DoubleArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun BooleanArray.plus(elements: BooleanArray): BooleanArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline operator fun CharArray.plus(elements: CharArray): CharArray {\n return primitiveArrayConcat(this, elements)\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"NOTHING_TO_INLINE\")\npublic actual inline fun <T> Array<out T>.plusElement(element: T): Array<T> {\n return this.asDynamic().concat(arrayOf(element))\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun IntArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\npublic actual fun LongArray.sort(): Unit {\n if (size > 1) sort { a: Long, b: Long -> a.compareTo(b) }\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun ByteArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun ShortArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun DoubleArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun FloatArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@library(\"primitiveArraySort\")\npublic actual fun CharArray.sort(): Unit {\n definedExternally\n}\n\n/**\n * Sorts the array in-place according to the natural order of its elements.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @sample samples.collections.Arrays.Sorting.sortArrayOfComparable\n */\npublic actual fun <T : Comparable<T>> Array<out T>.sort(): Unit {\n if (size > 1) sortArray(this)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T> Array<out T>.sort(comparison: (a: T, b: T) -> Int): Unit {\n if (size > 1) sortArrayWith(this, comparison)\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArrayOfComparable\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun <T : Comparable<T>> Array<out T>.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArrayWith(this, fromIndex, toIndex, naturalOrder())\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun ByteArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<ByteArray>()\n subarray.sort()\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun ShortArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<ShortArray>()\n subarray.sort()\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun IntArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<IntArray>()\n subarray.sort()\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun LongArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArrayWith(this.unsafeCast<Array<Long>>(), fromIndex, toIndex, naturalOrder())\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun FloatArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<FloatArray>()\n subarray.sort()\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun DoubleArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<DoubleArray>()\n subarray.sort()\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun CharArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n val subarray = this.asDynamic().subarray(fromIndex, toIndex).unsafeCast<CharArray>()\n subarray.sort()\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.sort(noinline comparison: (a: Byte, b: Byte) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.sort(noinline comparison: (a: Short, b: Short) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.sort(noinline comparison: (a: Int, b: Int) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.sort(noinline comparison: (a: Long, b: Long) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun FloatArray.sort(noinline comparison: (a: Float, b: Float) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun DoubleArray.sort(noinline comparison: (a: Double, b: Double) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparison] function.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharArray.sort(noinline comparison: (a: Char, b: Char) -> Int): Unit {\n asDynamic().sort(comparison)\n}\n\n/**\n * Sorts the array in-place according to the order specified by the given [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic actual fun <T> Array<out T>.sortWith(comparator: Comparator<in T>): Unit {\n if (size > 1) sortArrayWith(this, comparator)\n}\n\n/**\n * Sorts a range in the array in-place with the given [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun <T> Array<out T>.sortWith(comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArrayWith(this, fromIndex, toIndex, comparator)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun ByteArray.toTypedArray(): Array<Byte> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun ShortArray.toTypedArray(): Array<Short> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun IntArray.toTypedArray(): Array<Int> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun LongArray.toTypedArray(): Array<Long> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun FloatArray.toTypedArray(): Array<Float> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun DoubleArray.toTypedArray(): Array<Double> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun BooleanArray.toTypedArray(): Array<Boolean> {\n return js(\"[]\").slice.call(this)\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\npublic actual fun CharArray.toTypedArray(): Array<Char> {\n return Array(size) { index -> this[index] }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.js.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Reverses elements in the list in-place.\n */\npublic actual fun <T> MutableList<T>.reverse(): Unit {\n val midPoint = (size / 2) - 1\n if (midPoint < 0) return\n var reverseIndex = lastIndex\n for (index in 0..midPoint) {\n val tmp = this[index]\n this[index] = this[reverseIndex]\n this[reverseIndex] = tmp\n reverseIndex--\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the [MutableCollection] interface.\n *\n * @param E the type of elements contained in the collection. The collection is invariant in its element type.\n */\npublic actual abstract class AbstractMutableCollection<E> protected actual constructor() : AbstractCollection<E>(), MutableCollection<E> {\n\n actual abstract override fun add(element: E): Boolean\n\n actual override fun remove(element: E): Boolean {\n checkIsMutable()\n val iterator = iterator()\n while (iterator.hasNext()) {\n if (iterator.next() == element) {\n iterator.remove()\n return true\n }\n }\n return false\n }\n\n actual override fun addAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n var modified = false\n for (element in elements) {\n if (add(element)) modified = true\n }\n return modified\n }\n\n actual override fun removeAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n return (this as MutableIterable<E>).removeAll { it in elements }\n }\n\n actual override fun retainAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n return (this as MutableIterable<E>).removeAll { it !in elements }\n }\n\n actual override fun clear(): Unit {\n checkIsMutable()\n val iterator = this.iterator()\n while (iterator.hasNext()) {\n iterator.next()\n iterator.remove()\n }\n }\n\n @JsName(\"toJSON\")\n open fun toJSON(): Any = this.toArray()\n\n\n /**\n * This method is called every time when a mutating method is called on this mutable collection.\n * Mutable collections that are built (frozen) must throw `UnsupportedOperationException`.\n */\n internal open fun checkIsMutable(): Unit { }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT AbstractList\n * Copyright 2007 Google Inc.\n*/\n\n\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the [MutableList] interface.\n *\n * @param E the type of elements contained in the list. The list is invariant in its element type.\n */\npublic actual abstract class AbstractMutableList<E> protected actual constructor() : AbstractMutableCollection<E>(), MutableList<E> {\n protected var modCount: Int = 0\n\n abstract override fun add(index: Int, element: E): Unit\n abstract override fun removeAt(index: Int): E\n abstract override fun set(index: Int, element: E): E\n\n /**\n * Adds the specified element to the end of this list.\n *\n * @return `true` because the list is always modified as the result of this operation.\n */\n actual override fun add(element: E): Boolean {\n checkIsMutable()\n add(size, element)\n return true\n }\n\n actual override fun addAll(index: Int, elements: Collection<E>): Boolean {\n checkIsMutable()\n var _index = index\n var changed = false\n for (e in elements) {\n add(_index++, e)\n changed = true\n }\n return changed\n }\n\n actual override fun clear() {\n checkIsMutable()\n removeRange(0, size)\n }\n\n actual override fun removeAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n return removeAll { it in elements }\n }\n\n actual override fun retainAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n return removeAll { it !in elements }\n }\n\n\n actual override fun iterator(): MutableIterator<E> = IteratorImpl()\n\n actual override fun contains(element: E): Boolean = indexOf(element) >= 0\n\n actual override fun indexOf(element: E): Int {\n for (index in 0..lastIndex) {\n if (get(index) == element) {\n return index\n }\n }\n return -1\n }\n\n actual override fun lastIndexOf(element: E): Int {\n for (index in lastIndex downTo 0) {\n if (get(index) == element) {\n return index\n }\n }\n return -1\n }\n\n actual override fun listIterator(): MutableListIterator<E> = listIterator(0)\n actual override fun listIterator(index: Int): MutableListIterator<E> = ListIteratorImpl(index)\n\n\n actual override fun subList(fromIndex: Int, toIndex: Int): MutableList<E> = SubList(this, fromIndex, toIndex)\n\n /**\n * Removes the range of elements from this list starting from [fromIndex] and ending with but not including [toIndex].\n */\n protected open fun removeRange(fromIndex: Int, toIndex: Int) {\n val iterator = listIterator(fromIndex)\n repeat(toIndex - fromIndex) {\n iterator.next()\n iterator.remove()\n }\n }\n\n /**\n * Compares this list with another list instance with the ordered structural equality.\n *\n * @return true, if [other] instance is a [List] of the same size, which contains the same elements in the same order.\n */\n override fun equals(other: Any?): Boolean {\n if (other === this) return true\n if (other !is List<*>) return false\n\n return AbstractList.orderedEquals(this, other)\n }\n\n /**\n * Returns the hash code value for this list.\n */\n override fun hashCode(): Int = AbstractList.orderedHashCode(this)\n\n\n private open inner class IteratorImpl : MutableIterator<E> {\n /** the index of the item that will be returned on the next call to [next]`()` */\n protected var index = 0\n /** the index of the item that was returned on the previous call to [next]`()`\n * or [ListIterator.previous]`()` (for `ListIterator`),\n * -1 if no such item exists\n */\n protected var last = -1\n\n override fun hasNext(): Boolean = index < size\n\n override fun next(): E {\n if (!hasNext()) throw NoSuchElementException()\n last = index++\n return get(last)\n }\n\n override fun remove() {\n check(last != -1) { \"Call next() or previous() before removing element from the iterator.\" }\n\n removeAt(last)\n index = last\n last = -1\n }\n }\n\n /**\n * Implementation of `MutableListIterator` for abstract lists.\n */\n private inner class ListIteratorImpl(index: Int) : IteratorImpl(), MutableListIterator<E> {\n\n init {\n AbstractList.checkPositionIndex(index, this@AbstractMutableList.size)\n this.index = index\n }\n\n override fun hasPrevious(): Boolean = index > 0\n\n override fun nextIndex(): Int = index\n\n override fun previous(): E {\n if (!hasPrevious()) throw NoSuchElementException()\n\n last = --index\n return get(last)\n }\n\n override fun previousIndex(): Int = index - 1\n\n override fun add(element: E) {\n add(index, element)\n index++\n last = -1\n }\n\n override fun set(element: E) {\n check(last != -1) { \"Call next() or previous() before updating element value with the iterator.\" }\n set(last, element)\n }\n }\n\n private class SubList<E>(private val list: AbstractMutableList<E>, private val fromIndex: Int, toIndex: Int) : AbstractMutableList<E>(), RandomAccess {\n private var _size: Int = 0\n\n init {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, list.size)\n this._size = toIndex - fromIndex\n }\n\n override fun add(index: Int, element: E) {\n AbstractList.checkPositionIndex(index, _size)\n\n list.add(fromIndex + index, element)\n _size++\n }\n\n override fun get(index: Int): E {\n AbstractList.checkElementIndex(index, _size)\n\n return list[fromIndex + index]\n }\n\n override fun removeAt(index: Int): E {\n AbstractList.checkElementIndex(index, _size)\n\n val result = list.removeAt(fromIndex + index)\n _size--\n return result\n }\n\n override fun set(index: Int, element: E): E {\n AbstractList.checkElementIndex(index, _size)\n\n return list.set(fromIndex + index, element)\n }\n\n override val size: Int get() = _size\n\n internal override fun checkIsMutable(): Unit = list.checkIsMutable()\n }\n\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT AbstractMap\n * Copyright 2007 Google Inc.\n */\n\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the [MutableMap] interface.\n *\n * The implementor is required to implement [entries] property, which should return mutable set of map entries, and [put] function.\n *\n * @param K the type of map keys. The map is invariant in its key type.\n * @param V the type of map values. The map is invariant in its value type.\n */\npublic actual abstract class AbstractMutableMap<K, V> protected actual constructor() : AbstractMap<K, V>(), MutableMap<K, V> {\n\n /**\n * A mutable [Map.Entry] shared by several [Map] implementations.\n */\n internal open class SimpleEntry<K, V>(override val key: K, value: V) : MutableMap.MutableEntry<K, V> {\n constructor(entry: Map.Entry<K, V>) : this(entry.key, entry.value)\n\n private var _value = value\n\n override val value: V get() = _value\n\n override fun setValue(newValue: V): V {\n // Should check if the map containing this entry is mutable.\n // However, to not increase entry memory footprint it might be worthwhile not to check it here and\n // force subclasses that implement `build()` (freezing) operation to implement their own `MutableEntry`.\n// this@AbstractMutableMap.checkIsMutable()\n val oldValue = this._value\n this._value = newValue\n return oldValue\n }\n\n override fun hashCode(): Int = entryHashCode(this)\n override fun toString(): String = entryToString(this)\n override fun equals(other: Any?): Boolean = entryEquals(this, other)\n\n }\n\n // intermediate abstract class to workaround KT-43321\n internal abstract class AbstractEntrySet<E : Map.Entry<K, V>, K, V> : AbstractMutableSet<E>() {\n final override fun contains(element: E): Boolean = containsEntry(element)\n abstract fun containsEntry(element: Map.Entry<K, V>): Boolean\n }\n\n actual override fun clear() {\n entries.clear()\n }\n\n private var _keys: MutableSet<K>? = null\n actual override val keys: MutableSet<K>\n get() {\n if (_keys == null) {\n _keys = object : AbstractMutableSet<K>() {\n override fun add(element: K): Boolean = throw UnsupportedOperationException(\"Add is not supported on keys\")\n override fun clear() {\n this@AbstractMutableMap.clear()\n }\n\n override operator fun contains(element: K): Boolean = containsKey(element)\n\n override operator fun iterator(): MutableIterator<K> {\n val entryIterator = entries.iterator()\n return object : MutableIterator<K> {\n override fun hasNext(): Boolean = entryIterator.hasNext()\n override fun next(): K = entryIterator.next().key\n override fun remove() = entryIterator.remove()\n }\n }\n\n override fun remove(element: K): Boolean {\n checkIsMutable()\n if (containsKey(element)) {\n this@AbstractMutableMap.remove(element)\n return true\n }\n return false\n }\n\n override val size: Int get() = this@AbstractMutableMap.size\n\n override fun checkIsMutable(): Unit = this@AbstractMutableMap.checkIsMutable()\n }\n }\n return _keys!!\n }\n\n actual abstract override fun put(key: K, value: V): V?\n\n actual override fun putAll(from: Map<out K, V>) {\n checkIsMutable()\n for ((key, value) in from) {\n put(key, value)\n }\n }\n\n private var _values: MutableCollection<V>? = null\n actual override val values: MutableCollection<V>\n get() {\n if (_values == null) {\n _values = object : AbstractMutableCollection<V>() {\n override fun add(element: V): Boolean = throw UnsupportedOperationException(\"Add is not supported on values\")\n override fun clear() = this@AbstractMutableMap.clear()\n\n override operator fun contains(element: V): Boolean = containsValue(element)\n\n override operator fun iterator(): MutableIterator<V> {\n val entryIterator = entries.iterator()\n return object : MutableIterator<V> {\n override fun hasNext(): Boolean = entryIterator.hasNext()\n override fun next(): V = entryIterator.next().value\n override fun remove() = entryIterator.remove()\n }\n }\n\n override val size: Int get() = this@AbstractMutableMap.size\n\n // TODO: should we implement them this way? Currently it's unspecified in JVM\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (other !is Collection<*>) return false\n return AbstractList.orderedEquals(this, other)\n }\n\n override fun hashCode(): Int = AbstractList.orderedHashCode(this)\n\n override fun checkIsMutable(): Unit = this@AbstractMutableMap.checkIsMutable()\n }\n }\n return _values!!\n }\n\n actual override fun remove(key: K): V? {\n checkIsMutable()\n val iter = entries.iterator()\n while (iter.hasNext()) {\n val entry = iter.next()\n val k = entry.key\n if (key == k) {\n val value = entry.value\n iter.remove()\n return value\n }\n }\n return null\n }\n\n\n /**\n * This method is called every time when a mutating method is called on this mutable map.\n * Mutable maps that are built (frozen) must throw `UnsupportedOperationException`.\n */\n internal open fun checkIsMutable(): Unit {}\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the [MutableSet] interface.\n *\n * @param E the type of elements contained in the set. The set is invariant in its element type.\n */\npublic actual abstract class AbstractMutableSet<E> protected actual constructor() : AbstractMutableCollection<E>(), MutableSet<E> {\n\n /**\n * Compares this set with another set instance with the unordered structural equality.\n *\n * @return `true`, if [other] instance is a [Set] of the same size, all elements of which are contained in this set.\n */\n override fun equals(other: Any?): Boolean {\n if (other === this) return true\n if (other !is Set<*>) return false\n return AbstractSet.setEquals(this, other)\n }\n\n /**\n * Returns the hash code value for this set.\n */\n override fun hashCode(): Int = AbstractSet.unorderedHashCode(this)\n\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n/**\n * Provides a [MutableList] implementation, which uses a resizable array as its backing storage.\n *\n * This implementation doesn't provide a way to manage capacity, as backing JS array is resizeable itself.\n * There is no speed advantage to pre-allocating array sizes in JavaScript, so this implementation does not include any of the\n * capacity and \"growth increment\" concepts.\n */\npublic actual open class ArrayList<E> internal constructor(private var array: Array<Any?>) : AbstractMutableList<E>(), MutableList<E>, RandomAccess {\n private var isReadOnly: Boolean = false\n\n /**\n * Creates an empty [ArrayList].\n */\n public actual constructor() : this(emptyArray()) {}\n\n /**\n * Creates an empty [ArrayList].\n * @param initialCapacity initial capacity (ignored)\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n public actual constructor(initialCapacity: Int = 0) : this(emptyArray()) {}\n\n /**\n * Creates an [ArrayList] filled from the [elements] collection.\n */\n public actual constructor(elements: Collection<E>) : this(elements.toTypedArray<Any?>()) {}\n\n @PublishedApi\n internal fun build(): List<E> {\n checkIsMutable()\n isReadOnly = true\n return this\n }\n\n /** Does nothing in this ArrayList implementation. */\n public actual fun trimToSize() {}\n\n /** Does nothing in this ArrayList implementation. */\n public actual fun ensureCapacity(minCapacity: Int) {}\n\n actual override val size: Int get() = array.size\n @Suppress(\"UNCHECKED_CAST\")\n actual override fun get(index: Int): E = array[rangeCheck(index)] as E\n actual override fun set(index: Int, element: E): E {\n checkIsMutable()\n rangeCheck(index)\n @Suppress(\"UNCHECKED_CAST\")\n return array[index].apply { array[index] = element } as E\n }\n\n actual override fun add(element: E): Boolean {\n checkIsMutable()\n array.asDynamic().push(element)\n modCount++\n return true\n }\n\n actual override fun add(index: Int, element: E): Unit {\n checkIsMutable()\n array.asDynamic().splice(insertionRangeCheck(index), 0, element)\n modCount++\n }\n\n actual override fun addAll(elements: Collection<E>): Boolean {\n checkIsMutable()\n if (elements.isEmpty()) return false\n\n array += elements.toTypedArray<Any?>()\n modCount++\n return true\n }\n\n actual override fun addAll(index: Int, elements: Collection<E>): Boolean {\n checkIsMutable()\n insertionRangeCheck(index)\n\n if (index == size) return addAll(elements)\n if (elements.isEmpty()) return false\n when (index) {\n size -> return addAll(elements)\n 0 -> array = elements.toTypedArray<Any?>() + array\n else -> array = array.copyOfRange(0, index).asDynamic().concat(elements.toTypedArray<Any?>(), array.copyOfRange(index, size))\n }\n\n modCount++\n return true\n }\n\n actual override fun removeAt(index: Int): E {\n checkIsMutable()\n rangeCheck(index)\n modCount++\n return if (index == lastIndex)\n array.asDynamic().pop()\n else\n array.asDynamic().splice(index, 1)[0]\n }\n\n actual override fun remove(element: E): Boolean {\n checkIsMutable()\n for (index in array.indices) {\n if (array[index] == element) {\n array.asDynamic().splice(index, 1)\n modCount++\n return true\n }\n }\n return false\n }\n\n override fun removeRange(fromIndex: Int, toIndex: Int) {\n checkIsMutable()\n modCount++\n array.asDynamic().splice(fromIndex, toIndex - fromIndex)\n }\n\n actual override fun clear() {\n checkIsMutable()\n array = emptyArray()\n modCount++\n }\n\n\n actual override fun indexOf(element: E): Int = array.indexOf(element)\n\n actual override fun lastIndexOf(element: E): Int = array.lastIndexOf(element)\n\n override fun toString() = arrayToString(array)\n override fun toArray(): Array<Any?> = js(\"[]\").slice.call(array)\n\n\n internal override fun checkIsMutable() {\n if (isReadOnly) throw UnsupportedOperationException()\n }\n\n private fun rangeCheck(index: Int) = index.apply {\n AbstractList.checkElementIndex(index, size)\n }\n\n private fun insertionRangeCheck(index: Int) = index.apply {\n AbstractList.checkPositionIndex(index, size)\n }\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\ninternal fun <T> sortArrayWith(array: Array<out T>, comparison: (T, T) -> Int) {\n if (getStableSortingIsSupported()) {\n array.asDynamic().sort(comparison)\n } else {\n mergeSort(array.unsafeCast<Array<T>>(), 0, array.lastIndex, Comparator(comparison))\n }\n}\n\ninternal fun <T> sortArrayWith(array: Array<out T>, comparator: Comparator<in T>) {\n if (getStableSortingIsSupported()) {\n val comparison = { a: T, b: T -> comparator.compare(a, b) }\n array.asDynamic().sort(comparison)\n } else {\n mergeSort(array.unsafeCast<Array<T>>(), 0, array.lastIndex, comparator)\n }\n}\n\ninternal fun <T> sortArrayWith(array: Array<out T>, fromIndex: Int, toIndex: Int, comparator: Comparator<in T>) {\n if (fromIndex < toIndex - 1) {\n mergeSort(array.unsafeCast<Array<T>>(), fromIndex, toIndex - 1, comparator)\n }\n}\n\ninternal fun <T : Comparable<T>> sortArray(array: Array<out T>) {\n if (getStableSortingIsSupported()) {\n val comparison = { a: T, b: T -> a.compareTo(b) }\n array.asDynamic().sort(comparison)\n } else {\n mergeSort(array.unsafeCast<Array<T>>(), 0, array.lastIndex, naturalOrder())\n }\n}\n\nprivate var _stableSortingIsSupported: Boolean? = null\nprivate fun getStableSortingIsSupported(): Boolean {\n _stableSortingIsSupported?.let { return it }\n _stableSortingIsSupported = false\n\n val array = js(\"[]\").unsafeCast<Array<Int>>()\n // known implementations may use stable sort for arrays of up to 512 elements\n // so we create slightly more elements to test stability\n for (index in 0 until 600) array.asDynamic().push(index)\n val comparison = { a: Int, b: Int -> (a and 3) - (b and 3) }\n array.asDynamic().sort(comparison)\n for (index in 1 until array.size) {\n val a = array[index - 1]\n val b = array[index]\n if ((a and 3) == (b and 3) && a >= b) return false\n }\n _stableSortingIsSupported = true\n return true\n}\n\n\nprivate fun <T> mergeSort(array: Array<T>, start: Int, endInclusive: Int, comparator: Comparator<in T>) {\n val buffer = arrayOfNulls<Any?>(array.size).unsafeCast<Array<T>>()\n val result = mergeSort(array, buffer, start, endInclusive, comparator)\n if (result !== array) {\n for (i in start..endInclusive) array[i] = result[i]\n }\n}\n\n// Both start and end are inclusive indices.\nprivate fun <T> mergeSort(array: Array<T>, buffer: Array<T>, start: Int, end: Int, comparator: Comparator<in T>): Array<T> {\n if (start == end) {\n return array\n }\n\n val median = (start + end) / 2\n val left = mergeSort(array, buffer, start, median, comparator)\n val right = mergeSort(array, buffer, median + 1, end, comparator)\n\n val target = if (left === buffer) array else buffer\n\n // Merge.\n var leftIndex = start\n var rightIndex = median + 1\n for (i in start..end) {\n when {\n leftIndex <= median && rightIndex <= end -> {\n val leftValue = left[leftIndex]\n val rightValue = right[rightIndex]\n\n if (comparator.compare(leftValue, rightValue) <= 0) {\n target[i] = leftValue\n leftIndex++\n } else {\n target[i] = rightValue\n rightIndex++\n }\n }\n leftIndex <= median -> {\n target[i] = left[leftIndex]\n leftIndex++\n }\n else /* rightIndex <= end */ -> {\n target[i] = right[rightIndex]\n rightIndex++\n Unit // TODO: Fix KT-31506\n }\n }\n }\n\n return target\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\ninternal interface EqualityComparator {\n /**\n * Subclasses must override to return a value indicating\n * whether or not two keys or values are equal.\n */\n abstract fun equals(value1: Any?, value2: Any?): Boolean\n\n /**\n * Subclasses must override to return the hash code of a given key.\n */\n abstract fun getHashCode(value: Any?): Int\n\n\n object HashCode : EqualityComparator {\n override fun equals(value1: Any?, value2: Any?): Boolean = value1 == value2\n\n override fun getHashCode(value: Any?): Int = value?.hashCode() ?: 0\n }\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\n\npublic actual fun interface Comparator<T> {\n @JsName(\"compare\")\n public actual fun compare(a: T, b: T): Int\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT AbstractHashMap\n * Copyright 2008 Google Inc.\n */\n\npackage kotlin.collections\n\nimport kotlin.collections.MutableMap.MutableEntry\n\n/**\n * Hash table based implementation of the [MutableMap] interface.\n *\n * This implementation makes no guarantees regarding the order of enumeration of [keys], [values] and [entries] collections.\n */\n// Classes that extend HashMap and implement `build()` (freezing) operation\n// have to make sure mutating methods check `checkIsMutable`.\npublic actual open class HashMap<K, V> : AbstractMutableMap<K, V>, MutableMap<K, V> {\n\n private inner class EntrySet : AbstractEntrySet<MutableEntry<K, V>, K, V>() {\n\n override fun add(element: MutableEntry<K, V>): Boolean = throw UnsupportedOperationException(\"Add is not supported on entries\")\n override fun clear() {\n this@HashMap.clear()\n }\n\n override fun containsEntry(element: Map.Entry<K, V>): Boolean = this@HashMap.containsEntry(element)\n\n override operator fun iterator(): MutableIterator<MutableEntry<K, V>> = internalMap.iterator()\n\n override fun remove(element: MutableEntry<K, V>): Boolean {\n if (contains(element)) {\n this@HashMap.remove(element.key)\n return true\n }\n return false\n }\n\n override val size: Int get() = this@HashMap.size\n }\n\n\n /**\n * Internal implementation of the map: either string-based or hashcode-based.\n */\n private val internalMap: InternalMap<K, V>\n\n private val equality: EqualityComparator\n\n internal constructor(internalMap: InternalMap<K, V>) : super() {\n this.internalMap = internalMap\n this.equality = internalMap.equality\n }\n\n /**\n * Constructs an empty [HashMap] instance.\n */\n actual constructor() : this(InternalHashCodeMap(EqualityComparator.HashCode))\n\n /**\n * Constructs an empty [HashMap] instance.\n *\n * @param initialCapacity the initial capacity (ignored)\n * @param loadFactor the load factor (ignored)\n *\n * @throws IllegalArgumentException if the initial capacity or load factor are negative\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n actual constructor(initialCapacity: Int, loadFactor: Float = 0.0f) : this() {\n // This implementation of HashMap has no need of load factors or capacities.\n require(initialCapacity >= 0) { \"Negative initial capacity: $initialCapacity\" }\n require(loadFactor >= 0) { \"Non-positive load factor: $loadFactor\" }\n }\n\n actual constructor(initialCapacity: Int) : this(initialCapacity, 0.0f)\n\n\n /**\n * Constructs an instance of [HashMap] filled with the contents of the specified [original] map.\n */\n actual constructor(original: Map<out K, V>) : this() {\n this.putAll(original)\n }\n\n actual override fun clear() {\n internalMap.clear()\n// structureChanged(this)\n }\n\n actual override fun containsKey(key: K): Boolean = internalMap.contains(key)\n\n actual override fun containsValue(value: V): Boolean = internalMap.any { equality.equals(it.value, value) }\n\n private var _entries: MutableSet<MutableMap.MutableEntry<K, V>>? = null\n actual override val entries: MutableSet<MutableMap.MutableEntry<K, V>>\n get() {\n if (_entries == null) {\n _entries = createEntrySet()\n }\n return _entries!!\n }\n\n protected open fun createEntrySet(): MutableSet<MutableMap.MutableEntry<K, V>> = EntrySet()\n\n actual override operator fun get(key: K): V? = internalMap.get(key)\n\n actual override fun put(key: K, value: V): V? = internalMap.put(key, value)\n\n actual override fun remove(key: K): V? = internalMap.remove(key)\n\n actual override val size: Int get() = internalMap.size\n\n}\n\n/**\n * Constructs the specialized implementation of [HashMap] with [String] keys, which stores the keys as properties of\n * JS object without hashing them.\n */\npublic fun <V> stringMapOf(vararg pairs: Pair<String, V>): HashMap<String, V> {\n return HashMap<String, V>(InternalStringMap(EqualityComparator.HashCode)).apply { putAll(pairs) }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n/*\n * Based on GWT HashSet\n * Copyright 2008 Google Inc.\n */\n\npackage kotlin.collections\n\n/**\n * The implementation of the [MutableSet] interface, backed by a [HashMap] instance.\n */\n// Classes that extend HashSet and implement `build()` (freezing) operation\n// have to make sure mutating methods check `checkIsMutable`.\npublic actual open class HashSet<E> : AbstractMutableSet<E>, MutableSet<E> {\n\n internal val map: HashMap<E, Any>\n\n /**\n * Constructs a new empty [HashSet].\n */\n actual constructor() {\n map = HashMap<E, Any>()\n }\n\n /**\n * Constructs a new [HashSet] filled with the elements of the specified collection.\n */\n actual constructor(elements: Collection<E>) {\n map = HashMap<E, Any>(elements.size)\n addAll(elements)\n }\n\n /**\n * Constructs a new empty [HashSet].\n *\n * @param initialCapacity the initial capacity (ignored)\n * @param loadFactor the load factor (ignored)\n *\n * @throws IllegalArgumentException if the initial capacity or load factor are negative\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n actual constructor(initialCapacity: Int, loadFactor: Float = 0.0f) {\n map = HashMap<E, Any>(initialCapacity, loadFactor)\n }\n\n actual constructor(initialCapacity: Int) : this(initialCapacity, 0.0f)\n\n /**\n * Protected constructor to specify the underlying map. This is used by\n * LinkedHashSet.\n\n * @param map underlying map to use.\n */\n internal constructor(map: HashMap<E, Any>) {\n this.map = map\n }\n\n actual override fun add(element: E): Boolean {\n val old = map.put(element, this)\n return old == null\n }\n\n actual override fun clear() {\n map.clear()\n }\n\n// public override fun clone(): Any {\n// return HashSet<E>(this)\n// }\n\n actual override operator fun contains(element: E): Boolean = map.containsKey(element)\n\n actual override fun isEmpty(): Boolean = map.isEmpty()\n\n actual override fun iterator(): MutableIterator<E> = map.keys.iterator()\n\n actual override fun remove(element: E): Boolean = map.remove(element) != null\n\n actual override val size: Int get() = map.size\n\n}\n\n/**\n * Creates a new instance of the specialized implementation of [HashSet] with the specified [String] elements,\n * which elements the keys as properties of JS object without hashing them.\n */\npublic fun stringSetOf(vararg elements: String): HashSet<String> {\n return HashSet(stringMapOf<Any>()).apply { addAll(elements) }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n/*\n * Based on GWT InternalHashCodeMap\n * Copyright 2008 Google Inc.\n */\n\npackage kotlin.collections\n\nimport kotlin.collections.MutableMap.MutableEntry\nimport kotlin.collections.AbstractMutableMap.SimpleEntry\n\n/**\n * A simple wrapper around JavaScriptObject to provide [java.util.Map]-like semantics for any\n * key type.\n *\n *\n * Implementation notes:\n *\n *\n * A key's hashCode is the index in backingMap which should contain that key. Since several keys may\n * have the same hash, each value in hashCodeMap is actually an array containing all entries whose\n * keys share the same hash.\n */\ninternal class InternalHashCodeMap<K, V>(override val equality: EqualityComparator) : InternalMap<K, V> {\n\n private var backingMap: dynamic = createJsMap()\n override var size: Int = 0\n private set\n\n override fun put(key: K, value: V): V? {\n val hashCode = equality.getHashCode(key)\n val chainOrEntry = getChainOrEntryOrNull(hashCode)\n if (chainOrEntry == null) {\n // This is a new chain, put it to the map.\n backingMap[hashCode] = SimpleEntry(key, value)\n } else {\n if (chainOrEntry !is Array<*>) {\n // It is an entry\n val entry: SimpleEntry<K, V> = chainOrEntry\n if (equality.equals(entry.key, key)) {\n return entry.setValue(value)\n } else {\n backingMap[hashCode] = arrayOf(entry, SimpleEntry(key, value))\n size++\n return null\n }\n } else {\n // Chain already exists, perhaps key also exists.\n val chain: Array<MutableEntry<K, V>> = chainOrEntry\n val entry = chain.findEntryInChain(key)\n if (entry != null) {\n return entry.setValue(value)\n }\n chain.asDynamic().push(SimpleEntry(key, value))\n }\n }\n size++\n// structureChanged(host)\n return null\n }\n\n override fun remove(key: K): V? {\n val hashCode = equality.getHashCode(key)\n val chainOrEntry = getChainOrEntryOrNull(hashCode) ?: return null\n if (chainOrEntry !is Array<*>) {\n val entry: MutableEntry<K, V> = chainOrEntry\n if (equality.equals(entry.key, key)) {\n jsDeleteProperty(backingMap, hashCode)\n size--\n return entry.value\n } else {\n return null\n }\n } else {\n val chain: Array<MutableEntry<K, V>> = chainOrEntry\n for (index in chain.indices) {\n val entry = chain[index]\n if (equality.equals(key, entry.key)) {\n if (chain.size == 1) {\n chain.asDynamic().length = 0\n // remove the whole array\n jsDeleteProperty(backingMap, hashCode)\n } else {\n // splice out the entry we're removing\n chain.asDynamic().splice(index, 1)\n }\n size--\n// structureChanged(host)\n return entry.value\n }\n }\n }\n return null\n }\n\n override fun clear() {\n backingMap = createJsMap()\n size = 0\n }\n\n override fun contains(key: K): Boolean = getEntry(key) != null\n\n override fun get(key: K): V? = getEntry(key)?.value\n\n private fun getEntry(key: K): MutableEntry<K, V>? {\n val chainOrEntry = getChainOrEntryOrNull(equality.getHashCode(key)) ?: return null\n if (chainOrEntry !is Array<*>) {\n val entry: MutableEntry<K, V> = chainOrEntry\n if (equality.equals(entry.key, key)) {\n return entry\n } else {\n return null\n }\n } else {\n val chain: Array<MutableEntry<K, V>> = chainOrEntry\n return chain.findEntryInChain(key)\n }\n }\n\n private fun Array<MutableEntry<K, V>>.findEntryInChain(key: K): MutableEntry<K, V>? =\n firstOrNull { entry -> equality.equals(entry.key, key) }\n\n override fun iterator(): MutableIterator<MutableEntry<K, V>> {\n\n return object : MutableIterator<MutableEntry<K, V>> {\n var state = -1 // -1 not ready, 0 - ready, 1 - done\n\n val keys: Array<String> = js(\"Object\").keys(backingMap)\n var keyIndex = -1\n\n var chainOrEntry: dynamic = null\n var isChain = false\n var itemIndex = -1\n var lastEntry: MutableEntry<K, V>? = null\n\n private fun computeNext(): Int {\n if (chainOrEntry != null && isChain) {\n val chainSize: Int = chainOrEntry.unsafeCast<Array<MutableEntry<K, V>>>().size\n if (++itemIndex < chainSize)\n return 0\n }\n\n if (++keyIndex < keys.size) {\n chainOrEntry = backingMap[keys[keyIndex]]\n isChain = chainOrEntry is Array<*>\n itemIndex = 0\n return 0\n } else {\n chainOrEntry = null\n return 1\n }\n }\n\n override fun hasNext(): Boolean {\n if (state == -1)\n state = computeNext()\n return state == 0\n }\n\n override fun next(): MutableEntry<K, V> {\n if (!hasNext()) throw NoSuchElementException()\n val lastEntry = if (isChain) {\n chainOrEntry.unsafeCast<Array<MutableEntry<K, V>>>()[itemIndex]\n } else {\n chainOrEntry.unsafeCast<MutableEntry<K, V>>()\n }\n this.lastEntry = lastEntry\n state = -1\n return lastEntry\n }\n\n override fun remove() {\n checkNotNull(lastEntry)\n this@InternalHashCodeMap.remove(lastEntry!!.key)\n lastEntry = null\n // the chain being iterated just got modified by InternalHashCodeMap.remove\n itemIndex--\n }\n }\n }\n\n private fun getChainOrEntryOrNull(hashCode: Int): dynamic {\n val chainOrEntry = backingMap[hashCode]\n return if (chainOrEntry === undefined) null else chainOrEntry\n }\n\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n/*\n * Based on GWT InternalStringMap\n * Copyright 2008 Google Inc.\n */\npackage kotlin.collections\n\nimport kotlin.collections.MutableMap.MutableEntry\n\n/**\n * A simple wrapper around JavaScript Map for key type is string.\n *\n * Though this map is instantiated only with K=String, the K type is not fixed to String statically,\n * because we want to have it erased to Any? in order not to generate type-safe override bridges for\n * [get], [contains], [remove] etc, if they ever are generated.\n */\ninternal class InternalStringMap<K, V>(override val equality: EqualityComparator) : InternalMap<K, V> {\n\n private var backingMap: dynamic = createJsMap()\n override var size: Int = 0\n private set\n\n// /**\n// * A mod count to track 'value' replacements in map to ensure that the 'value' that we have in the\n// * iterator entry is guaranteed to be still correct.\n// * This is to optimize for the common scenario where the values are not modified during\n// * iterations where the entries are never stale.\n// */\n// private var valueMod: Int = 0\n\n override operator fun contains(key: K): Boolean {\n if (key !is String) return false\n return backingMap[key] !== undefined\n }\n\n override operator fun get(key: K): V? {\n if (key !is String) return null\n val value = backingMap[key]\n return if (value !== undefined) value.unsafeCast<V>() else null\n }\n\n\n override fun put(key: K, value: V): V? {\n require(key is String)\n val oldValue = backingMap[key]\n backingMap[key] = value\n\n if (oldValue === undefined) {\n size++\n// structureChanged(host)\n return null\n } else {\n// valueMod++\n return oldValue.unsafeCast<V>()\n }\n }\n\n override fun remove(key: K): V? {\n if (key !is String) return null\n val value = backingMap[key]\n if (value !== undefined) {\n jsDeleteProperty(backingMap, key)\n size--\n// structureChanged(host)\n return value.unsafeCast<V>()\n } else {\n// valueMod++\n return null\n }\n }\n\n\n override fun clear() {\n backingMap = createJsMap()\n size = 0\n }\n\n\n override fun iterator(): MutableIterator<MutableEntry<K, V>> {\n return object : MutableIterator<MutableEntry<K, V>> {\n private val keys: Array<String> = js(\"Object\").keys(backingMap)\n private val iterator = keys.iterator()\n private var lastKey: String? = null\n\n override fun hasNext(): Boolean = iterator.hasNext()\n\n override fun next(): MutableEntry<K, V> {\n val key = iterator.next()\n lastKey = key\n @Suppress(\"UNCHECKED_CAST\")\n return newMapEntry(key as K)\n }\n\n override fun remove() {\n @Suppress(\"UNCHECKED_CAST\")\n this@InternalStringMap.remove(checkNotNull(lastKey) as K)\n }\n }\n }\n\n private fun newMapEntry(key: K): MutableEntry<K, V> = object : MutableEntry<K, V> {\n override val key: K get() = key\n override val value: V get() = this@InternalStringMap[key].unsafeCast<V>()\n\n override fun setValue(newValue: V): V = this@InternalStringMap.put(key, newValue).unsafeCast<V>()\n\n override fun hashCode(): Int = AbstractMap.entryHashCode(this)\n override fun toString(): String = AbstractMap.entryToString(this)\n override fun equals(other: Any?): Boolean = AbstractMap.entryEquals(this, other)\n }\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT LinkedHashMap\n * Copyright 2008 Google Inc.\n */\npackage kotlin.collections\n\nimport kotlin.collections.MutableMap.MutableEntry\n\n/**\n * Hash table based implementation of the [MutableMap] interface, which additionally preserves the insertion order\n * of entries during the iteration.\n *\n * The insertion order is preserved by maintaining a doubly-linked list of all of its entries.\n */\npublic actual open class LinkedHashMap<K, V> : HashMap<K, V>, MutableMap<K, V> {\n\n /**\n * The entry we use includes next/prev pointers for a doubly-linked circular\n * list with a head node. This reduces the special cases we have to deal with\n * in the list operations.\n\n * Note that we duplicate the key from the underlying hash map so we can find\n * the eldest entry. The alternative would have been to modify HashMap so more\n * of the code was directly usable here, but this would have added some\n * overhead to HashMap, or to reimplement most of the HashMap code here with\n * small modifications. Paying a small storage cost only if you use\n * LinkedHashMap and minimizing code size seemed like a better tradeoff\n */\n private inner class ChainEntry<K, V>(key: K, value: V) : AbstractMutableMap.SimpleEntry<K, V>(key, value) {\n internal var next: ChainEntry<K, V>? = null\n internal var prev: ChainEntry<K, V>? = null\n\n override fun setValue(newValue: V): V {\n this@LinkedHashMap.checkIsMutable()\n return super.setValue(newValue)\n }\n }\n\n private inner class EntrySet : AbstractEntrySet<MutableEntry<K, V>, K, V>() {\n\n private inner class EntryIterator : MutableIterator<MutableEntry<K, V>> {\n // The last entry that was returned from this iterator.\n private var last: ChainEntry<K, V>? = null\n\n // The next entry to return from this iterator.\n private var next: ChainEntry<K, V>? = null\n\n init {\n next = head\n// recordLastKnownStructure(map, this)\n }\n\n override fun hasNext(): Boolean {\n return next !== null\n }\n\n override fun next(): MutableEntry<K, V> {\n// checkStructuralChange(map, this)\n if (!hasNext()) throw NoSuchElementException()\n\n val current = next!!\n last = current\n next = current.next.takeIf { it !== head }\n return current\n }\n\n override fun remove() {\n check(last != null)\n this@EntrySet.checkIsMutable()\n// checkStructuralChange(map, this)\n\n last!!.remove()\n map.remove(last!!.key)\n// recordLastKnownStructure(map, this)\n last = null\n }\n }\n\n override fun add(element: MutableEntry<K, V>): Boolean = throw UnsupportedOperationException(\"Add is not supported on entries\")\n override fun clear() {\n this@LinkedHashMap.clear()\n }\n\n override fun containsEntry(element: Map.Entry<K, V>): Boolean = this@LinkedHashMap.containsEntry(element)\n\n override operator fun iterator(): MutableIterator<MutableEntry<K, V>> = EntryIterator()\n\n override fun remove(element: MutableEntry<K, V>): Boolean {\n checkIsMutable()\n if (contains(element)) {\n this@LinkedHashMap.remove(element.key)\n return true\n }\n return false\n }\n\n override val size: Int get() = this@LinkedHashMap.size\n\n override fun checkIsMutable(): Unit = this@LinkedHashMap.checkIsMutable()\n }\n\n\n /*\n * The head of the insert order chain, which is a doubly-linked circular\n * list.\n *\n * The most recently inserted node is at the end of the chain, ie.\n * chain.prev.\n */\n private var head: ChainEntry<K, V>? = null\n\n /**\n * Add this node to the end of the chain.\n */\n private fun ChainEntry<K, V>.addToEnd() {\n // This entry is not in the list.\n check(next == null && prev == null)\n\n val _head = head\n if (_head == null) {\n head = this\n next = this\n prev = this\n } else {\n // Chain is valid.\n val _tail = checkNotNull(_head.prev)\n // Update me.\n prev = _tail\n next = _head\n // Update my new siblings: current head and old tail\n _head.prev = this\n _tail.next = this\n }\n }\n\n /**\n * Remove this node from the chain it is a part of.\n */\n private fun ChainEntry<K, V>.remove() {\n if (this.next === this) {\n // if this is single element, remove head\n head = null\n } else {\n if (head === this) {\n // if this is first element, move head to next\n head = next\n }\n next!!.prev = prev\n prev!!.next = next\n }\n next = null\n prev = null\n }\n\n /*\n * The hashmap that keeps track of our entries and the chain. Note that we\n * duplicate the key here to eliminate changes to HashMap and minimize the\n * code here, at the expense of additional space.\n */\n private val map: HashMap<K, ChainEntry<K, V>>\n\n private var isReadOnly: Boolean = false\n\n /**\n * Constructs an empty [LinkedHashMap] instance.\n */\n actual constructor() : super() {\n map = HashMap<K, ChainEntry<K, V>>()\n }\n\n internal constructor(backingMap: HashMap<K, Any>) : super() {\n @Suppress(\"UNCHECKED_CAST\") // expected to work due to erasure\n map = backingMap as HashMap<K, ChainEntry<K, V>>\n }\n\n /**\n * Constructs an empty [LinkedHashMap] instance.\n *\n * @param initialCapacity the initial capacity (ignored)\n * @param loadFactor the load factor (ignored)\n *\n * @throws IllegalArgumentException if the initial capacity or load factor are negative\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n actual constructor(initialCapacity: Int, loadFactor: Float = 0.0f) : super(initialCapacity, loadFactor) {\n map = HashMap<K, ChainEntry<K, V>>()\n }\n\n actual constructor(initialCapacity: Int) : this(initialCapacity, 0.0f)\n\n /**\n * Constructs an instance of [LinkedHashMap] filled with the contents of the specified [original] map.\n */\n actual constructor(original: Map<out K, V>) {\n map = HashMap<K, ChainEntry<K, V>>()\n this.putAll(original)\n }\n\n @PublishedApi\n internal fun build(): Map<K, V> {\n checkIsMutable()\n isReadOnly = true\n return this\n }\n\n actual override fun clear() {\n checkIsMutable()\n map.clear()\n head = null\n }\n\n\n// override fun clone(): Any {\n// return LinkedHashMap(this)\n// }\n\n\n actual override fun containsKey(key: K): Boolean = map.containsKey(key)\n\n actual override fun containsValue(value: V): Boolean {\n var node: ChainEntry<K, V> = head ?: return false\n do {\n if (node.value == value) {\n return true\n }\n node = node.next!!\n } while (node !== head)\n return false\n }\n\n\n override fun createEntrySet(): MutableSet<MutableMap.MutableEntry<K, V>> = EntrySet()\n\n actual override operator fun get(key: K): V? = map.get(key)?.value\n\n actual override fun put(key: K, value: V): V? {\n checkIsMutable()\n\n val old = map.get(key)\n if (old == null) {\n val newEntry = ChainEntry(key, value)\n map.put(key, newEntry)\n newEntry.addToEnd()\n return null\n } else {\n return old.setValue(value)\n }\n }\n\n actual override fun remove(key: K): V? {\n checkIsMutable()\n\n val entry = map.remove(key)\n if (entry != null) {\n entry.remove()\n return entry.value\n }\n return null\n }\n\n actual override val size: Int get() = map.size\n\n internal override fun checkIsMutable() {\n if (isReadOnly) throw UnsupportedOperationException()\n }\n}\n\n/**\n * Constructs the specialized implementation of [LinkedHashMap] with [String] keys, which stores the keys as properties of\n * JS object without hashing them.\n */\npublic fun <V> linkedStringMapOf(vararg pairs: Pair<String, V>): LinkedHashMap<String, V> {\n return LinkedHashMap<String, V>(stringMapOf<Any>()).apply { putAll(pairs) }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n/*\n * Based on GWT LinkedHashSet\n * Copyright 2008 Google Inc.\n */\n\npackage kotlin.collections\n\n/**\n * The implementation of the [MutableSet] interface, backed by a [LinkedHashMap] instance.\n *\n * This implementation preserves the insertion order of elements during the iteration.\n */\npublic actual open class LinkedHashSet<E> : HashSet<E>, MutableSet<E> {\n\n internal constructor(map: LinkedHashMap<E, Any>) : super(map)\n\n /**\n * Constructs a new empty [LinkedHashSet].\n */\n actual constructor() : super(LinkedHashMap<E, Any>())\n\n /**\n * Constructs a new [LinkedHashSet] filled with the elements of the specified collection.\n */\n actual constructor(elements: Collection<E>) : super(LinkedHashMap<E, Any>()) {\n addAll(elements)\n }\n\n /**\n * Constructs a new empty [LinkedHashSet].\n *\n * @param initialCapacity the initial capacity (ignored)\n * @param loadFactor the load factor (ignored)\n *\n * @throws IllegalArgumentException if the initial capacity or load factor are negative\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n actual constructor(initialCapacity: Int, loadFactor: Float = 0.0f) : super(LinkedHashMap<E, Any>(initialCapacity, loadFactor))\n\n actual constructor(initialCapacity: Int) : this(initialCapacity, 0.0f)\n\n @PublishedApi\n internal fun build(): Set<E> {\n (map as LinkedHashMap<E, Any>).build()\n return this\n }\n\n internal override fun checkIsMutable(): Unit = map.checkIsMutable()\n\n// public override fun clone(): Any {\n// return LinkedHashSet(this)\n// }\n\n}\n\n/**\n * Creates a new instance of the specialized implementation of [LinkedHashSet] with the specified [String] elements,\n * which elements the keys as properties of JS object without hashing them.\n */\npublic fun linkedStringSetOf(vararg elements: String): LinkedHashSet<String> {\n return LinkedHashSet(linkedStringMapOf<Any>()).apply { addAll(elements) }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.io\n\ninternal abstract class BaseOutput {\n open fun println() {\n print(\"\\n\")\n }\n\n open fun println(message: Any?) {\n print(message)\n println()\n }\n\n abstract fun print(message: Any?)\n\n open fun flush() {}\n}\n\n/** JsName used to make the declaration available outside of module to test it */\n@JsName(\"NodeJsOutput\")\ninternal class NodeJsOutput(val outputStream: dynamic) : BaseOutput() {\n override fun print(message: Any?) {\n // TODO: Using local variable because of bug in block decomposition lowering in IR backend\n val messageString = String(message)\n outputStream.write(messageString)\n }\n}\n\n/** JsName used to make the declaration available outside of module to test it */\n@JsName(\"OutputToConsoleLog\")\ninternal class OutputToConsoleLog : BaseOutput() {\n override fun print(message: Any?) {\n console.log(message)\n }\n\n override fun println(message: Any?) {\n console.log(message)\n }\n\n override fun println() {\n console.log(\"\")\n }\n}\n\n/** JsName used to make the declaration available outside of module to test it and use at try.kotl.in */\n@JsName(\"BufferedOutput\")\ninternal open class BufferedOutput : BaseOutput() {\n var buffer = \"\"\n\n override fun print(message: Any?) {\n buffer += String(message)\n }\n\n override fun flush() {\n buffer = \"\"\n }\n}\n\n/** JsName used to make the declaration available outside of module to test it */\n@JsName(\"BufferedOutputToConsoleLog\")\ninternal class BufferedOutputToConsoleLog : BufferedOutput() {\n override fun print(message: Any?) {\n var s = String(message)\n val i = s.nativeLastIndexOf(\"\\n\", 0)\n if (i >= 0) {\n buffer += s.substring(0, i)\n flush()\n s = s.substring(i + 1)\n }\n buffer += s\n }\n\n override fun flush() {\n console.log(buffer)\n buffer = \"\"\n }\n}\n\n/** JsName used to make the declaration available outside of module to test it and use at try.kotl.in */\n@JsName(\"output\")\ninternal var output = run {\n val isNode: Boolean = js(\"typeof process !== 'undefined' && process.versions && !!process.versions.node\")\n if (isNode) NodeJsOutput(js(\"process.stdout\")) else BufferedOutputToConsoleLog()\n}\n\n@kotlin.internal.InlineOnly\nprivate inline fun String(value: Any?): String = js(\"String\")(value)\n\n/** Prints the line separator to the standard output stream. */\npublic actual fun println() {\n output.println()\n}\n\n/** Prints the given [message] and the line separator to the standard output stream. */\npublic actual fun println(message: Any?) {\n output.println(message)\n}\n\n/** Prints the given [message] to the standard output stream. */\npublic actual fun print(message: Any?) {\n output.print(message)\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\nimport kotlin.coroutines.intrinsics.CoroutineSingletons.*\nimport kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal actual class SafeContinuation<in T>\ninternal actual constructor(\n private val delegate: Continuation<T>,\n initialResult: Any?\n) : Continuation<T> {\n @PublishedApi\n internal actual constructor(delegate: Continuation<T>) : this(delegate, UNDECIDED)\n\n public actual override val context: CoroutineContext\n get() = delegate.context\n\n private var result: Any? = initialResult\n\n public actual override fun resumeWith(result: Result<T>) {\n val cur = this.result\n when {\n cur === UNDECIDED -> {\n this.result = result.value\n }\n cur === COROUTINE_SUSPENDED -> {\n this.result = RESUMED\n delegate.resumeWith(result)\n }\n else -> throw IllegalStateException(\"Already resumed\")\n }\n }\n\n @PublishedApi\n internal actual fun getOrThrow(): Any? {\n if (result === UNDECIDED) {\n result = COROUTINE_SUSPENDED\n return COROUTINE_SUSPENDED\n }\n val result = this.result\n return when {\n result === RESUMED -> COROUTINE_SUSPENDED // already called continuation, indicate COROUTINE_SUSPENDED upstream\n result is Result.Failure -> throw result.exception\n else -> result // either COROUTINE_SUSPENDED or data\n }\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// a package is omitted to get declarations directly under the module\n\n@JsName(\"throwNPE\")\ninternal fun throwNPE(message: String) {\n throw NullPointerException(message)\n}\n\n@JsName(\"throwCCE\")\ninternal fun throwCCE() {\n throw ClassCastException(\"Illegal cast\")\n}\n\n@JsName(\"throwISE\")\ninternal fun throwISE(message: String) {\n throw IllegalStateException(message)\n}\n\n@JsName(\"throwUPAE\")\ninternal fun throwUPAE(propertyName: String) {\n throw UninitializedPropertyAccessException(\"lateinit property ${propertyName} has not been initialized\")\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.js\n\n/**\n * An interface for indexing access to a collection of key-value pairs, where type of key is [String] and type of value is [Any?][Any].\n */\npublic external interface Json {\n /**\n * Calls to the function will be translated to indexing operation (square brackets) on the receiver with [propertyName] as the argument.\n *\n * E.g. for next code:\n * ```kotlin\n * fun test(j: Json, p: String) = j[\"prop\"] + j.get(p)\n * ```\n *\n * will be generated:\n * ```js\n * function test(j, p) {\n * return j[\"prop\"] + j[p];\n * }\n * ```\n */\n operator fun get(propertyName: String): Any?\n\n /**\n * Calls of the function will be translated to an assignment of [value] to the receiver indexed (with square brackets/index operation) with [propertyName].\n *\n * E.g. for the following code:\n * ```kotlin\n * fun test(j: Json, p: String, newValue: Any) {\n * j[\"prop\"] = 1\n * j.set(p, newValue)\n * }\n * ```\n *\n * will be generated:\n * ```js\n * function test(j, p, newValue) {\n * j[\"prop\"] = 1;\n * j[p] = newValue;\n * }\n * }\n * ```\n */\n operator fun set(propertyName: String, value: Any?): Unit\n}\n\n/**\n * Returns a simple JavaScript object (as [Json]) using provided key-value pairs as names and values of its properties.\n */\npublic fun json(vararg pairs: Pair<String, Any?>): Json {\n val res: dynamic = js(\"({})\")\n for ((name, value) in pairs) {\n res[name] = value\n }\n return res\n}\n\n/**\n * Adds key-value pairs from [other] to [this].\n * Returns the original receiver.\n */\npublic fun Json.add(other: Json): Json {\n val keys: Array<String> = js(\"Object\").keys(other)\n for (key in keys) {\n if (other.asDynamic().hasOwnProperty(key)) {\n this[key] = other[key];\n }\n }\n return this\n}\n\n/**\n * Exposes the JavaScript [JSON object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) to Kotlin.\n */\n@Suppress(\"NOT_DOCUMENTED\")\npublic external object JSON {\n public fun stringify(o: Any?): String\n public fun stringify(o: Any?, replacer: ((key: String, value: Any?) -> Any?)): String\n public fun stringify(o: Any?, replacer: ((key: String, value: Any?) -> Any?)? = definedExternally, space: Int): String\n public fun stringify(o: Any?, replacer: ((key: String, value: Any?) -> Any?)? = definedExternally, space: String): String\n public fun stringify(o: Any?, replacer: Array<String>): String\n public fun stringify(o: Any?, replacer: Array<String>, space: Int): String\n public fun stringify(o: Any?, replacer: Array<String>, space: String): String\n\n public fun <T> parse(text: String): T\n public fun <T> parse(text: String, reviver: ((key: String, value: Any?) -> Any?)): T\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n@file:Suppress(\"DEPRECATION_ERROR\")\npackage kotlin.math\n\n\nimport kotlin.internal.InlineOnly\nimport kotlin.js.Math as nativeMath\n\n\n// region ================ Double Math ========================================\n\n/** Computes the sine of the angle [x] given in radians.\n *\n * Special cases:\n * - `sin(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sin(x: Double): Double = nativeMath.sin(x)\n\n/** Computes the cosine of the angle [x] given in radians.\n *\n * Special cases:\n * - `cos(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun cos(x: Double): Double = nativeMath.cos(x)\n\n/** Computes the tangent of the angle [x] given in radians.\n *\n * Special cases:\n * - `tan(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun tan(x: Double): Double = nativeMath.tan(x)\n\n/**\n * Computes the arc sine of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `asin(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun asin(x: Double): Double = nativeMath.asin(x)\n\n/**\n * Computes the arc cosine of the value [x];\n * the returned value is an angle in the range from `0.0` to `PI` radians.\n *\n * Special cases:\n * - `acos(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun acos(x: Double): Double = nativeMath.acos(x)\n\n/**\n * Computes the arc tangent of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `atan(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atan(x: Double): Double = nativeMath.atan(x)\n\n/**\n * Returns the angle `theta` of the polar coordinates `(r, theta)` that correspond\n * to the rectangular coordinates `(x, y)` by computing the arc tangent of the value [y] / [x];\n * the returned value is an angle in the range from `-PI` to `PI` radians.\n *\n * Special cases:\n * - `atan2(0.0, 0.0)` is `0.0`\n * - `atan2(0.0, x)` is `0.0` for `x > 0` and `PI` for `x < 0`\n * - `atan2(-0.0, x)` is `-0.0` for 'x > 0` and `-PI` for `x < 0`\n * - `atan2(y, +Inf)` is `0.0` for `0 < y < +Inf` and `-0.0` for '-Inf < y < 0`\n * - `atan2(y, -Inf)` is `PI` for `0 < y < +Inf` and `-PI` for `-Inf < y < 0`\n * - `atan2(y, 0.0)` is `PI/2` for `y > 0` and `-PI/2` for `y < 0`\n * - `atan2(+Inf, x)` is `PI/2` for finite `x`y\n * - `atan2(-Inf, x)` is `-PI/2` for finite `x`\n * - `atan2(NaN, x)` and `atan2(y, NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atan2(y: Double, x: Double): Double = nativeMath.atan2(y, x)\n\n/**\n * Computes the hyperbolic sine of the value [x].\n *\n * Special cases:\n * - `sinh(NaN)` is `NaN`\n * - `sinh(+Inf)` is `+Inf`\n * - `sinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sinh(x: Double): Double = nativeMath.sinh(x)\n\n/**\n * Computes the hyperbolic cosine of the value [x].\n *\n * Special cases:\n * - `cosh(NaN)` is `NaN`\n * - `cosh(+Inf|-Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun cosh(x: Double): Double = nativeMath.cosh(x)\n\n/**\n * Computes the hyperbolic tangent of the value [x].\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(+Inf)` is `1.0`\n * - `tanh(-Inf)` is `-1.0`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun tanh(x: Double): Double = nativeMath.tanh(x)\n\n/**\n * Computes the inverse hyperbolic sine of the value [x].\n *\n * The returned value is `y` such that `sinh(y) == x`.\n *\n * Special cases:\n * - `asinh(NaN)` is `NaN`\n * - `asinh(+Inf)` is `+Inf`\n * - `asinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun asinh(x: Double): Double = nativeMath.asinh(x)\n\n/**\n * Computes the inverse hyperbolic cosine of the value [x].\n *\n * The returned value is positive `y` such that `cosh(y) == x`.\n *\n * Special cases:\n * - `acosh(NaN)` is `NaN`\n * - `acosh(x)` is `NaN` when `x < 1`\n * - `acosh(+Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun acosh(x: Double): Double = nativeMath.acosh(x)\n\n/**\n * Computes the inverse hyperbolic tangent of the value [x].\n *\n * The returned value is `y` such that `tanh(y) == x`.\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(x)` is `NaN` when `x > 1` or `x < -1`\n * - `tanh(1.0)` is `+Inf`\n * - `tanh(-1.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atanh(x: Double): Double = nativeMath.atanh(x)\n\n/**\n * Computes `sqrt(x^2 + y^2)` without intermediate overflow or underflow.\n *\n * Special cases:\n * - returns `+Inf` if any of arguments is infinite\n * - returns `NaN` if any of arguments is `NaN` and the other is not infinite\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun hypot(x: Double, y: Double): Double = nativeMath.hypot(x, y)\n\n/**\n * Computes the positive square root of the value [x].\n *\n * Special cases:\n * - `sqrt(x)` is `NaN` when `x < 0` or `x` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sqrt(x: Double): Double = nativeMath.sqrt(x)\n\n/**\n * Computes Euler's number `e` raised to the power of the value [x].\n *\n * Special cases:\n * - `exp(NaN)` is `NaN`\n * - `exp(+Inf)` is `+Inf`\n * - `exp(-Inf)` is `0.0`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun exp(x: Double): Double = nativeMath.exp(x)\n\n/**\n * Computes `exp(x) - 1`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `expm1(NaN)` is `NaN`\n * - `expm1(+Inf)` is `+Inf`\n * - `expm1(-Inf)` is `-1.0`\n *\n * @see [exp] function.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun expm1(x: Double): Double = nativeMath.expm1(x)\n\n/**\n * Computes the logarithm of the value [x] to the given [base].\n *\n * Special cases:\n * - `log(x, b)` is `NaN` if either `x` or `b` are `NaN`\n * - `log(x, b)` is `NaN` when `x < 0` or `b <= 0` or `b == 1.0`\n * - `log(+Inf, +Inf)` is `NaN`\n * - `log(+Inf, b)` is `+Inf` for `b > 1` and `-Inf` for `b < 1`\n * - `log(0.0, b)` is `-Inf` for `b > 1` and `+Inf` for `b > 1`\n *\n * See also logarithm functions for common fixed bases: [ln], [log10] and [log2].\n */\n@SinceKotlin(\"1.2\")\npublic actual fun log(x: Double, base: Double): Double {\n if (base <= 0.0 || base == 1.0) return Double.NaN\n return nativeMath.log(x) / nativeMath.log(base)\n}\n\n/**\n * Computes the natural logarithm (base `E`) of the value [x].\n *\n * Special cases:\n * - `ln(NaN)` is `NaN`\n * - `ln(x)` is `NaN` when `x < 0.0`\n * - `ln(+Inf)` is `+Inf`\n * - `ln(0.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ln(x: Double): Double = nativeMath.log(x)\n\n/**\n * Computes the common logarithm (base 10) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun log10(x: Double): Double = nativeMath.log10(x)\n\n/**\n * Computes the binary logarithm (base 2) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun log2(x: Double): Double = nativeMath.log2(x)\n\n/**\n * Computes `ln(x + 1)`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `ln1p(NaN)` is `NaN`\n * - `ln1p(x)` is `NaN` where `x < -1.0`\n * - `ln1p(-1.0)` is `-Inf`\n * - `ln1p(+Inf)` is `+Inf`\n *\n * @see [ln] function\n * @see [expm1] function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ln1p(x: Double): Double = nativeMath.log1p(x)\n\n/**\n * Rounds the given value [x] to an integer towards positive infinity.\n\n * @return the smallest double value that is greater than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `ceil(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ceil(x: Double): Double = nativeMath.ceil(x).unsafeCast<Double>() // TODO: Remove unsafe cast after removing public js.math\n\n/**\n * Rounds the given value [x] to an integer towards negative infinity.\n\n * @return the largest double value that is smaller than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `floor(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun floor(x: Double): Double = nativeMath.floor(x).unsafeCast<Double>()\n\n/**\n * Rounds the given value [x] to an integer towards zero.\n *\n * @return the value [x] having its fractional part truncated.\n *\n * Special cases:\n * - `truncate(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun truncate(x: Double): Double = nativeMath.trunc(x)\n\n/**\n * Rounds the given value [x] towards the closest integer with ties rounded towards even integer.\n *\n * Special cases:\n * - `round(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun round(x: Double): Double {\n if (x % 0.5 != 0.0) {\n return nativeMath.round(x).unsafeCast<Double>()\n }\n val floor = floor(x)\n return if (floor % 2 == 0.0) floor else ceil(x)\n}\n\n/**\n * Returns the absolute value of the given value [x].\n *\n * Special cases:\n * - `abs(NaN)` is `NaN`\n *\n * @see absoluteValue extension property for [Double]\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun abs(x: Double): Double = nativeMath.abs(x)\n\n/**\n * Returns the sign of the given value [x]:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `sign(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sign(x: Double): Double = nativeMath.sign(x)\n\n\n/**\n * Returns the smaller of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun min(a: Double, b: Double): Double = nativeMath.min(a, b)\n\n/**\n * Returns the greater of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun max(a: Double, b: Double): Double = nativeMath.max(a, b)\n\n// extensions\n\n/**\n * Raises this value to the power [x].\n *\n * Special cases:\n * - `b.pow(0.0)` is `1.0`\n * - `b.pow(1.0) == b`\n * - `b.pow(NaN)` is `NaN`\n * - `NaN.pow(x)` is `NaN` for `x != 0.0`\n * - `b.pow(Inf)` is `NaN` for `abs(b) == 1.0`\n * - `b.pow(x)` is `NaN` for `b < 0` and `x` is finite and not an integer\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Double.pow(x: Double): Double = nativeMath.pow(this, x)\n\n/**\n * Raises this value to the integer power [n].\n *\n * See the other overload of [pow] for details.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Double.pow(n: Int): Double = nativeMath.pow(this, n.toDouble())\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `NaN.absoluteValue` is `NaN`\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Double.absoluteValue: Double get() = nativeMath.abs(this)\n\n/**\n * Returns the sign of this value:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `NaN.sign` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Double.sign: Double get() = nativeMath.sign(this)\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Double.withSign(sign: Int): Double = this.withSign(sign.toDouble())\n\n/**\n * Returns the ulp (unit in the last place) of this value.\n *\n * An ulp is a positive distance between this value and the next nearest [Double] value larger in magnitude.\n *\n * Special Cases:\n * - `NaN.ulp` is `NaN`\n * - `x.ulp` is `+Inf` when `x` is `+Inf` or `-Inf`\n * - `0.0.ulp` is `Double.MIN_VALUE`\n */\n@SinceKotlin(\"1.2\")\npublic actual val Double.ulp: Double get() = when {\n this < 0 -> (-this).ulp\n this.isNaN() || this == Double.POSITIVE_INFINITY -> this\n this == Double.MAX_VALUE -> this - this.nextDown()\n else -> this.nextUp() - this\n}\n\n/**\n * Returns the [Double] value nearest to this value in direction of positive infinity.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Double.nextUp(): Double = when {\n this.isNaN() || this == Double.POSITIVE_INFINITY -> this\n this == 0.0 -> Double.MIN_VALUE\n else -> Double.fromBits(this.toRawBits() + if (this > 0) 1 else -1)\n}\n\n/**\n * Returns the [Double] value nearest to this value in direction of negative infinity.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Double.nextDown(): Double = when {\n this.isNaN() || this == Double.NEGATIVE_INFINITY -> this\n this == 0.0 -> -Double.MIN_VALUE\n else -> Double.fromBits(this.toRawBits() + if (this > 0) -1 else 1)\n}\n\n\n/**\n * Returns the [Double] value nearest to this value in direction from this value towards the value [to].\n *\n * Special cases:\n * - `x.nextTowards(y)` is `NaN` if either `x` or `y` are `NaN`\n * - `x.nextTowards(x) == x`\n *\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Double.nextTowards(to: Double): Double = when {\n this.isNaN() || to.isNaN() -> Double.NaN\n to == this -> to\n to > this -> this.nextUp()\n else /* to < this */ -> this.nextDown()\n}\n\n\n/**\n * Rounds this [Double] value to the nearest integer and converts the result to [Int].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToInt() == Int.MAX_VALUE` when `x > Int.MAX_VALUE`\n * - `x.roundToInt() == Int.MIN_VALUE` when `x < Int.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Double.roundToInt(): Int = when {\n isNaN() -> throw IllegalArgumentException(\"Cannot round NaN value.\")\n this > Int.MAX_VALUE -> Int.MAX_VALUE\n this < Int.MIN_VALUE -> Int.MIN_VALUE\n else -> nativeMath.round(this).unsafeCast<Double>().toInt()\n}\n\n/**\n * Rounds this [Double] value to the nearest integer and converts the result to [Long].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToLong() == Long.MAX_VALUE` when `x > Long.MAX_VALUE`\n * - `x.roundToLong() == Long.MIN_VALUE` when `x < Long.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Double.roundToLong(): Long = when {\n isNaN() -> throw IllegalArgumentException(\"Cannot round NaN value.\")\n this > Long.MAX_VALUE -> Long.MAX_VALUE\n this < Long.MIN_VALUE -> Long.MIN_VALUE\n else -> nativeMath.round(this).unsafeCast<Double>().toLong()\n}\n\n// endregion\n\n\n\n// region ================ Float Math ========================================\n\n/** Computes the sine of the angle [x] given in radians.\n *\n * Special cases:\n * - `sin(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sin(x: Float): Float = nativeMath.sin(x.toDouble()).toFloat()\n\n/** Computes the cosine of the angle [x] given in radians.\n *\n * Special cases:\n * - `cos(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun cos(x: Float): Float = nativeMath.cos(x.toDouble()).toFloat()\n\n/** Computes the tangent of the angle [x] given in radians.\n *\n * Special cases:\n * - `tan(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun tan(x: Float): Float = nativeMath.tan(x.toDouble()).toFloat()\n\n/**\n * Computes the arc sine of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `asin(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun asin(x: Float): Float = nativeMath.asin(x.toDouble()).toFloat()\n\n/**\n * Computes the arc cosine of the value [x];\n * the returned value is an angle in the range from `0.0` to `PI` radians.\n *\n * Special cases:\n * - `acos(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun acos(x: Float): Float = nativeMath.acos(x.toDouble()).toFloat()\n\n/**\n * Computes the arc tangent of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `atan(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atan(x: Float): Float = nativeMath.atan(x.toDouble()).toFloat()\n\n/**\n * Returns the angle `theta` of the polar coordinates `(r, theta)` that correspond\n * to the rectangular coordinates `(x, y)` by computing the arc tangent of the value [y] / [x];\n * the returned value is an angle in the range from `-PI` to `PI` radians.\n *\n * Special cases:\n * - `atan2(0.0, 0.0)` is `0.0`\n * - `atan2(0.0, x)` is `0.0` for `x > 0` and `PI` for `x < 0`\n * - `atan2(-0.0, x)` is `-0.0` for 'x > 0` and `-PI` for `x < 0`\n * - `atan2(y, +Inf)` is `0.0` for `0 < y < +Inf` and `-0.0` for '-Inf < y < 0`\n * - `atan2(y, -Inf)` is `PI` for `0 < y < +Inf` and `-PI` for `-Inf < y < 0`\n * - `atan2(y, 0.0)` is `PI/2` for `y > 0` and `-PI/2` for `y < 0`\n * - `atan2(+Inf, x)` is `PI/2` for finite `x`y\n * - `atan2(-Inf, x)` is `-PI/2` for finite `x`\n * - `atan2(NaN, x)` and `atan2(y, NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atan2(y: Float, x: Float): Float = nativeMath.atan2(y.toDouble(), x.toDouble()).toFloat()\n\n/**\n * Computes the hyperbolic sine of the value [x].\n *\n * Special cases:\n * - `sinh(NaN)` is `NaN`\n * - `sinh(+Inf)` is `+Inf`\n * - `sinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sinh(x: Float): Float = nativeMath.sinh(x.toDouble()).toFloat()\n\n/**\n * Computes the hyperbolic cosine of the value [x].\n *\n * Special cases:\n * - `cosh(NaN)` is `NaN`\n * - `cosh(+Inf|-Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun cosh(x: Float): Float = nativeMath.cosh(x.toDouble()).toFloat()\n\n/**\n * Computes the hyperbolic tangent of the value [x].\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(+Inf)` is `1.0`\n * - `tanh(-Inf)` is `-1.0`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun tanh(x: Float): Float = nativeMath.tanh(x.toDouble()).toFloat()\n\n/**\n * Computes the inverse hyperbolic sine of the value [x].\n *\n * The returned value is `y` such that `sinh(y) == x`.\n *\n * Special cases:\n * - `asinh(NaN)` is `NaN`\n * - `asinh(+Inf)` is `+Inf`\n * - `asinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun asinh(x: Float): Float = nativeMath.asinh(x.toDouble()).toFloat()\n\n/**\n * Computes the inverse hyperbolic cosine of the value [x].\n *\n * The returned value is positive `y` such that `cosh(y) == x`.\n *\n * Special cases:\n * - `acosh(NaN)` is `NaN`\n * - `acosh(x)` is `NaN` when `x < 1`\n * - `acosh(+Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun acosh(x: Float): Float = nativeMath.acosh(x.toDouble()).toFloat()\n\n/**\n * Computes the inverse hyperbolic tangent of the value [x].\n *\n * The returned value is `y` such that `tanh(y) == x`.\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(x)` is `NaN` when `x > 1` or `x < -1`\n * - `tanh(1.0)` is `+Inf`\n * - `tanh(-1.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun atanh(x: Float): Float = nativeMath.atanh(x.toDouble()).toFloat()\n\n/**\n * Computes `sqrt(x^2 + y^2)` without intermediate overflow or underflow.\n *\n * Special cases:\n * - returns `+Inf` if any of arguments is infinite\n * - returns `NaN` if any of arguments is `NaN` and the other is not infinite\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun hypot(x: Float, y: Float): Float = nativeMath.hypot(x.toDouble(), y.toDouble()).toFloat()\n\n/**\n * Computes the positive square root of the value [x].\n *\n * Special cases:\n * - `sqrt(x)` is `NaN` when `x < 0` or `x` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sqrt(x: Float): Float = nativeMath.sqrt(x.toDouble()).toFloat()\n\n/**\n * Computes Euler's number `e` raised to the power of the value [x].\n *\n * Special cases:\n * - `exp(NaN)` is `NaN`\n * - `exp(+Inf)` is `+Inf`\n * - `exp(-Inf)` is `0.0`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun exp(x: Float): Float = nativeMath.exp(x.toDouble()).toFloat()\n\n/**\n * Computes `exp(x) - 1`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `expm1(NaN)` is `NaN`\n * - `expm1(+Inf)` is `+Inf`\n * - `expm1(-Inf)` is `-1.0`\n *\n * @see [exp] function.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun expm1(x: Float): Float = nativeMath.expm1(x.toDouble()).toFloat()\n\n/**\n * Computes the logarithm of the value [x] to the given [base].\n *\n * Special cases:\n * - `log(x, b)` is `NaN` if either `x` or `b` are `NaN`\n * - `log(x, b)` is `NaN` when `x < 0` or `b <= 0` or `b == 1.0`\n * - `log(+Inf, +Inf)` is `NaN`\n * - `log(+Inf, b)` is `+Inf` for `b > 1` and `-Inf` for `b < 1`\n * - `log(0.0, b)` is `-Inf` for `b > 1` and `+Inf` for `b > 1`\n *\n * See also logarithm functions for common fixed bases: [ln], [log10] and [log2].\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun log(x: Float, base: Float): Float = log(x.toDouble(), base.toDouble()).toFloat()\n\n/**\n * Computes the natural logarithm (base `E`) of the value [x].\n *\n * Special cases:\n * - `ln(NaN)` is `NaN`\n * - `ln(x)` is `NaN` when `x < 0.0`\n * - `ln(+Inf)` is `+Inf`\n * - `ln(0.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ln(x: Float): Float = nativeMath.log(x.toDouble()).toFloat()\n\n/**\n * Computes the common logarithm (base 10) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun log10(x: Float): Float = nativeMath.log10(x.toDouble()).toFloat()\n\n/**\n * Computes the binary logarithm (base 2) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun log2(x: Float): Float = nativeMath.log2(x.toDouble()).toFloat()\n\n/**\n * Computes `ln(a + 1)`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `ln1p(NaN)` is `NaN`\n * - `ln1p(x)` is `NaN` where `x < -1.0`\n * - `ln1p(-1.0)` is `-Inf`\n * - `ln1p(+Inf)` is `+Inf`\n *\n * @see [ln] function\n * @see [expm1] function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ln1p(x: Float): Float = nativeMath.log1p(x.toDouble()).toFloat()\n\n/**\n * Rounds the given value [x] to an integer towards positive infinity.\n\n * @return the smallest Float value that is greater than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `ceil(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun ceil(x: Float): Float = nativeMath.ceil(x.toDouble()).toFloat()\n\n/**\n * Rounds the given value [x] to an integer towards negative infinity.\n\n * @return the largest Float value that is smaller than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `floor(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun floor(x: Float): Float = nativeMath.floor(x.toDouble()).toFloat()\n\n/**\n * Rounds the given value [x] to an integer towards zero.\n *\n * @return the value [x] having its fractional part truncated.\n *\n * Special cases:\n * - `truncate(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun truncate(x: Float): Float = truncate(x.toDouble()).toFloat()\n\n/**\n * Rounds the given value [x] towards the closest integer with ties rounded towards even integer.\n *\n * Special cases:\n * - `round(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun round(x: Float): Float = round(x.toDouble()).toFloat()\n\n\n/**\n * Returns the absolute value of the given value [x].\n *\n * Special cases:\n * - `abs(NaN)` is `NaN`\n *\n * @see absoluteValue extension property for [Float]\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun abs(x: Float): Float = nativeMath.abs(x.toDouble()).toFloat()\n\n/**\n * Returns the sign of the given value [x]:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `sign(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun sign(x: Float): Float = nativeMath.sign(x.toDouble()).toFloat()\n\n\n\n/**\n * Returns the smaller of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun min(a: Float, b: Float): Float = nativeMath.min(a, b)\n\n/**\n * Returns the greater of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun max(a: Float, b: Float): Float = nativeMath.max(a, b)\n\n// extensions\n\n\n/**\n * Raises this value to the power [x].\n *\n * Special cases:\n * - `b.pow(0.0)` is `1.0`\n * - `b.pow(1.0) == b`\n * - `b.pow(NaN)` is `NaN`\n * - `NaN.pow(x)` is `NaN` for `x != 0.0`\n * - `b.pow(Inf)` is `NaN` for `abs(b) == 1.0`\n * - `b.pow(x)` is `NaN` for `b < 0` and `x` is finite and not an integer\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.pow(x: Float): Float = nativeMath.pow(this.toDouble(), x.toDouble()).toFloat()\n\n/**\n * Raises this value to the integer power [n].\n *\n * See the other overload of [pow] for details.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.pow(n: Int): Float = nativeMath.pow(this.toDouble(), n.toDouble()).toFloat()\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `NaN.absoluteValue` is `NaN`\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Float.absoluteValue: Float get() = nativeMath.abs(this.toDouble()).toFloat()\n\n/**\n * Returns the sign of this value:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `NaN.sign` is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Float.sign: Float get() = nativeMath.sign(this.toDouble()).toFloat()\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n *\n * If [sign] is `NaN` the sign of the result is undefined.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.withSign(sign: Float): Float = this.toDouble().withSign(sign.toDouble()).toFloat()\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.withSign(sign: Int): Float = this.toDouble().withSign(sign.toDouble()).toFloat()\n\n\n/**\n * Rounds this [Float] value to the nearest integer and converts the result to [Int].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToInt() == Int.MAX_VALUE` when `x > Int.MAX_VALUE`\n * - `x.roundToInt() == Int.MIN_VALUE` when `x < Int.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.roundToInt(): Int = toDouble().roundToInt()\n\n/**\n * Rounds this [Float] value to the nearest integer and converts the result to [Long].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToLong() == Long.MAX_VALUE` when `x > Long.MAX_VALUE`\n * - `x.roundToLong() == Long.MIN_VALUE` when `x < Long.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun Float.roundToLong(): Long = toDouble().roundToLong()\n\n\n// endregion\n\n// region ================ Integer Math ========================================\n\n\n/**\n * Returns the absolute value of the given value [n].\n *\n * Special cases:\n * - `abs(Int.MIN_VALUE)` is `Int.MIN_VALUE` due to an overflow\n *\n * @see absoluteValue extension property for [Int]\n */\n// TODO: remove manual 'or' when KT-19290 is fixed\n@SinceKotlin(\"1.2\")\npublic actual fun abs(n: Int): Int = if (n < 0) (-n or 0) else n\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun min(a: Int, b: Int): Int = nativeMath.min(a, b)\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline fun max(a: Int, b: Int): Int = nativeMath.max(a, b)\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `Int.MIN_VALUE.absoluteValue` is `Int.MIN_VALUE` due to an overflow\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Int.absoluteValue: Int get() = abs(this)\n\n/**\n * Returns the sign of this value:\n * - `-1` if the value is negative,\n * - `0` if the value is zero,\n * - `1` if the value is positive\n */\n@SinceKotlin(\"1.2\")\npublic actual val Int.sign: Int get() = when {\n this < 0 -> -1\n this > 0 -> 1\n else -> 0\n}\n\n\n\n/**\n * Returns the absolute value of the given value [n].\n *\n * Special cases:\n * - `abs(Long.MIN_VALUE)` is `Long.MIN_VALUE` due to an overflow\n *\n * @see absoluteValue extension property for [Long]\n */\n@SinceKotlin(\"1.2\")\npublic actual fun abs(n: Long): Long = if (n < 0) -n else n\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.2\")\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun min(a: Long, b: Long): Long = if (a <= b) a else b\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.2\")\n@Suppress(\"NOTHING_TO_INLINE\")\npublic actual inline fun max(a: Long, b: Long): Long = if (a >= b) a else b\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `Long.MIN_VALUE.absoluteValue` is `Long.MIN_VALUE` due to an overflow\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\n@InlineOnly\npublic actual inline val Long.absoluteValue: Long get() = abs(this)\n\n/**\n * Returns the sign of this value:\n * - `-1` if the value is negative,\n * - `0` if the value is zero,\n * - `1` if the value is positive\n */\n@SinceKotlin(\"1.2\")\npublic actual val Long.sign: Int get() = when {\n this < 0 -> -1\n this > 0 -> 1\n else -> 0\n}\n\n\n// endregion\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\n\n/**\n * Returns a bit representation of the specified floating-point value as [Long]\n * according to the IEEE 754 floating-point \"double format\" bit layout.\n */\n@SinceKotlin(\"1.2\")\n@library(\"doubleToBits\")\npublic actual fun Double.toBits(): Long = definedExternally\n\n/**\n * Returns a bit representation of the specified floating-point value as [Long]\n * according to the IEEE 754 floating-point \"double format\" bit layout,\n * preserving `NaN` values exact layout.\n */\n@SinceKotlin(\"1.2\")\n@library(\"doubleToRawBits\")\npublic actual fun Double.toRawBits(): Long = definedExternally\n\n/**\n * Returns the [Double] value corresponding to a given bit representation.\n */\n@SinceKotlin(\"1.2\")\n@kotlin.internal.InlineOnly\npublic actual inline fun Double.Companion.fromBits(bits: Long): Double = js(\"Kotlin\").doubleFromBits(bits).unsafeCast<Double>()\n\n/**\n * Returns a bit representation of the specified floating-point value as [Int]\n * according to the IEEE 754 floating-point \"single format\" bit layout.\n *\n * Note that in Kotlin/JS [Float] range is wider than \"single format\" bit layout can represent,\n * so some [Float] values may overflow, underflow or loose their accuracy after conversion to bits and back.\n */\n@SinceKotlin(\"1.2\")\n@library(\"floatToBits\")\npublic actual fun Float.toBits(): Int = definedExternally\n\n/**\n * Returns a bit representation of the specified floating-point value as [Int]\n * according to the IEEE 754 floating-point \"single format\" bit layout,\n * preserving `NaN` values exact layout.\n *\n * Note that in Kotlin/JS [Float] range is wider than \"single format\" bit layout can represent,\n * so some [Float] values may overflow, underflow or loose their accuracy after conversion to bits and back.\n */\n@SinceKotlin(\"1.2\")\n@library(\"floatToRawBits\")\npublic actual fun Float.toRawBits(): Int = definedExternally\n\n/**\n * Returns the [Float] value corresponding to a given bit representation.\n */\n@SinceKotlin(\"1.2\")\n@kotlin.internal.InlineOnly\npublic actual inline fun Float.Companion.fromBits(bits: Int): Float = js(\"Kotlin\").floatFromBits(bits).unsafeCast<Float>()\n\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Long(low: Int, high: Int) = js(\"Kotlin\").Long.fromBits(low, high).unsafeCast<Long>()\ninternal inline val Long.low: Int get() = this.asDynamic().getLowBits().unsafeCast<Int>()\ninternal inline val Long.high: Int get() = this.asDynamic().getHighBits().unsafeCast<Int>()\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\n/**\n * Returns `true` if the specified number is a\n * Not-a-Number (NaN) value, `false` otherwise.\n */\npublic actual fun Double.isNaN(): Boolean = this != this\n\n/**\n * Returns `true` if the specified number is a\n * Not-a-Number (NaN) value, `false` otherwise.\n */\npublic actual fun Float.isNaN(): Boolean = this != this\n\n/**\n * Returns `true` if this value is infinitely large in magnitude.\n */\npublic actual fun Double.isInfinite(): Boolean = this == Double.POSITIVE_INFINITY || this == Double.NEGATIVE_INFINITY\n\n/**\n * Returns `true` if this value is infinitely large in magnitude.\n */\npublic actual fun Float.isInfinite(): Boolean = this == Float.POSITIVE_INFINITY || this == Float.NEGATIVE_INFINITY\n\n/**\n * Returns `true` if the argument is a finite floating-point value; returns `false` otherwise (for `NaN` and infinity arguments).\n */\npublic actual fun Double.isFinite(): Boolean = !isInfinite() && !isNaN()\n\n/**\n * Returns `true` if the argument is a finite floating-point value; returns `false` otherwise (for `NaN` and infinity arguments).\n */\npublic actual fun Float.isFinite(): Boolean = !isInfinite() && !isNaN()\n\n\n/**\n * Counts the number of set bits in the binary representation of this [Int] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Int.countOneBits(): Int {\n // Hacker's Delight 5-1 algorithm\n var v = this\n v = (v and 0x55555555) + (v.ushr(1) and 0x55555555)\n v = (v and 0x33333333) + (v.ushr(2) and 0x33333333)\n v = (v and 0x0F0F0F0F) + (v.ushr(4) and 0x0F0F0F0F)\n v = (v and 0x00FF00FF) + (v.ushr(8) and 0x00FF00FF)\n v = (v and 0x0000FFFF) + (v.ushr(16))\n return v\n}\n\n/**\n * Counts the number of consecutive most significant bits that are zero in the binary representation of this [Int] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"DEPRECATION_ERROR\")\n@kotlin.internal.InlineOnly\npublic actual inline fun Int.countLeadingZeroBits(): Int = kotlin.js.Math.clz32(this)\n\n/**\n * Counts the number of consecutive least significant bits that are zero in the binary representation of this [Int] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Int.countTrailingZeroBits(): Int =\n // Hacker's Delight 5-4 algorithm for expressing countTrailingZeroBits with countLeadingZeroBits\n Int.SIZE_BITS - (this or -this).inv().countLeadingZeroBits()\n\n/**\n * Returns a number having a single bit set in the position of the most significant set bit of this [Int] number,\n * or zero, if this number is zero.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Int.takeHighestOneBit(): Int =\n if (this == 0) 0 else 1.shl(Int.SIZE_BITS - 1 - countLeadingZeroBits())\n\n/**\n * Returns a number having a single bit set in the position of the least significant set bit of this [Int] number,\n * or zero, if this number is zero.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Int.takeLowestOneBit(): Int =\n // Hacker's Delight 2-1 algorithm for isolating rightmost 1-bit\n this and -this\n\n/**\n * Rotates the binary representation of this [Int] number left by the specified [bitCount] number of bits.\n * The most significant bits pushed out from the left side reenter the number as the least significant bits on the right side.\n *\n * Rotating the number left by a negative bit count is the same as rotating it right by the negated bit count:\n * `number.rotateLeft(-n) == number.rotateRight(n)`\n *\n * Rotating by a multiple of [Int.SIZE_BITS] (32) returns the same number, or more generally\n * `number.rotateLeft(n) == number.rotateLeft(n % 32)`\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic actual fun Int.rotateLeft(bitCount: Int): Int =\n shl(bitCount) or ushr(Int.SIZE_BITS - bitCount)\n\n\n/**\n * Rotates the binary representation of this [Int] number right by the specified [bitCount] number of bits.\n * The least significant bits pushed out from the right side reenter the number as the most significant bits on the left side.\n *\n * Rotating the number right by a negative bit count is the same as rotating it left by the negated bit count:\n * `number.rotateRight(-n) == number.rotateLeft(n)`\n *\n * Rotating by a multiple of [Int.SIZE_BITS] (32) returns the same number, or more generally\n * `number.rotateRight(n) == number.rotateRight(n % 32)`\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic actual fun Int.rotateRight(bitCount: Int): Int =\n shl(Int.SIZE_BITS - bitCount) or ushr(bitCount)\n\n\n/**\n * Counts the number of set bits in the binary representation of this [Long] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Long.countOneBits(): Int =\n high.countOneBits() + low.countOneBits()\n\n/**\n * Counts the number of consecutive most significant bits that are zero in the binary representation of this [Long] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Long.countLeadingZeroBits(): Int =\n when (val high = this.high) {\n 0 -> Int.SIZE_BITS + low.countLeadingZeroBits()\n else -> high.countLeadingZeroBits()\n }\n\n/**\n * Counts the number of consecutive least significant bits that are zero in the binary representation of this [Long] number.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Long.countTrailingZeroBits(): Int =\n when (val low = this.low) {\n 0 -> Int.SIZE_BITS + high.countTrailingZeroBits()\n else -> low.countTrailingZeroBits()\n }\n\n/**\n * Returns a number having a single bit set in the position of the most significant set bit of this [Long] number,\n * or zero, if this number is zero.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Long.takeHighestOneBit(): Long =\n when (val high = this.high) {\n 0 -> Long(low.takeHighestOneBit(), 0)\n else -> Long(0, high.takeHighestOneBit())\n }\n\n/**\n * Returns a number having a single bit set in the position of the least significant set bit of this [Long] number,\n * or zero, if this number is zero.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual fun Long.takeLowestOneBit(): Long =\n when (val low = this.low) {\n 0 -> Long(0, high.takeLowestOneBit())\n else -> Long(low.takeLowestOneBit(), 0)\n }\n\n/**\n * Rotates the binary representation of this [Long] number left by the specified [bitCount] number of bits.\n * The most significant bits pushed out from the left side reenter the number as the least significant bits on the right side.\n *\n * Rotating the number left by a negative bit count is the same as rotating it right by the negated bit count:\n * `number.rotateLeft(-n) == number.rotateRight(n)`\n *\n * Rotating by a multiple of [Long.SIZE_BITS] (64) returns the same number, or more generally\n * `number.rotateLeft(n) == number.rotateLeft(n % 64)`\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic actual fun Long.rotateLeft(bitCount: Int): Long {\n if ((bitCount and 31) != 0) {\n val low = this.low\n val high = this.high\n val newLow = low.shl(bitCount) or high.ushr(-bitCount)\n val newHigh = high.shl(bitCount) or low.ushr(-bitCount)\n return if ((bitCount and 32) == 0) Long(newLow, newHigh) else Long(newHigh, newLow)\n } else {\n return if ((bitCount and 32) == 0) this else Long(high, low)\n }\n}\n\n\n/**\n * Rotates the binary representation of this [Long] number right by the specified [bitCount] number of bits.\n * The least significant bits pushed out from the right side reenter the number as the most significant bits on the left side.\n *\n * Rotating the number right by a negative bit count is the same as rotating it left by the negated bit count:\n * `number.rotateRight(-n) == number.rotateLeft(n)`\n *\n * Rotating by a multiple of [Long.SIZE_BITS] (64) returns the same number, or more generally\n * `number.rotateRight(n) == number.rotateRight(n % 64)`\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun Long.rotateRight(bitCount: Int): Long = rotateLeft(-bitCount)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.random\n\nimport kotlin.math.pow\n\ninternal actual fun defaultPlatformRandom(): Random =\n Random(js(\"(Math.random() * Math.pow(2, 32)) | 0\").unsafeCast<Int>())\n\n\nprivate val INV_2_26: Double = 2.0.pow(-26)\nprivate val INV_2_53: Double = 2.0.pow(-53)\ninternal actual fun doubleFromParts(hi26: Int, low27: Int): Double =\n hi26 * INV_2_26 + low27 * INV_2_53","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect.js.internal\n\nimport kotlin.reflect.*\n\ninternal abstract class KClassImpl<T : Any>(\n internal open val jClass: JsClass<T>\n) : KClass<T> {\n\n override val qualifiedName: String?\n get() = TODO()\n\n override fun equals(other: Any?): Boolean {\n return other is KClassImpl<*> && jClass == other.jClass\n }\n\n // TODO: use FQN\n override fun hashCode(): Int = simpleName?.hashCode() ?: 0\n\n override fun toString(): String {\n // TODO: use FQN\n return \"class $simpleName\"\n }\n}\n\ninternal class SimpleKClassImpl<T : Any>(jClass: JsClass<T>) : KClassImpl<T>(jClass) {\n override val simpleName: String? = jClass.asDynamic().`$metadata$`?.simpleName.unsafeCast<String?>()\n\n override fun isInstance(value: Any?): Boolean {\n return jsIsType(value, jClass)\n }\n}\n\ninternal class PrimitiveKClassImpl<T : Any>(\n jClass: JsClass<T>,\n private val givenSimpleName: String,\n private val isInstanceFunction: (Any?) -> Boolean\n) : KClassImpl<T>(jClass) {\n override fun equals(other: Any?): Boolean {\n if (other !is PrimitiveKClassImpl<*>) return false\n return super.equals(other) && givenSimpleName == other.givenSimpleName\n }\n\n override val simpleName: String? get() = givenSimpleName\n\n override fun isInstance(value: Any?): Boolean {\n return isInstanceFunction(value)\n }\n}\n\ninternal object NothingKClassImpl : KClassImpl<Nothing>(js(\"Object\")) {\n override val simpleName: String = \"Nothing\"\n\n override fun isInstance(value: Any?): Boolean = false\n\n override val jClass: JsClass<Nothing>\n get() = throw UnsupportedOperationException(\"There's no native JS class for Nothing type\")\n\n override fun equals(other: Any?): Boolean = other === this\n\n override fun hashCode(): Int = 0\n}\n\ninternal class ErrorKClass : KClass<Nothing> {\n override val simpleName: String? get() = error(\"Unknown simpleName for ErrorKClass\")\n override val qualifiedName: String? get() = error(\"Unknown qualifiedName for ErrorKClass\")\n\n override fun isInstance(value: Any?): Boolean = error(\"Can's check isInstance on ErrorKClass\")\n\n override fun equals(other: Any?): Boolean = other === this\n\n override fun hashCode(): Int = 0\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n/**\n * The common interface of [InternalStringMap] and [InternalHashCodeMap].\n */\ninternal interface InternalMap<K, V> : MutableIterable<MutableMap.MutableEntry<K, V>> {\n val equality: EqualityComparator\n val size: Int\n operator fun contains(key: K): Boolean\n operator fun get(key: K): V?\n\n fun put(key: K, value: V): V?\n fun remove(key: K): V?\n fun clear(): Unit\n\n fun createJsMap(): dynamic {\n val result = js(\"Object.create(null)\")\n // force to switch object representation to dictionary mode\n result[\"foo\"] = 1\n jsDeleteProperty(result, \"foo\")\n return result\n }\n}\n","/*\n * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license\n * that can be found in the license/LICENSE.txt file.\n */\n\n\n@file:Suppress(\"UNUSED_PARAMETER\")\n\npackage kotlin.js\n\n@kotlin.internal.InlineOnly\ninternal inline fun jsDeleteProperty(obj: Any, property: Any) {\n js(\"delete obj[property]\")\n}\n\n@kotlin.internal.InlineOnly\ninternal inline fun jsBitwiseOr(lhs: Any?, rhs: Any?): Int =\n js(\"lhs | rhs\").unsafeCast<Int>()","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect.js.internal\n\nimport kotlin.reflect.*\n\ninternal class KTypeImpl(\n override val classifier: KClassifier,\n override val arguments: List<KTypeProjection>,\n override val isMarkedNullable: Boolean\n) : KType {\n override fun equals(other: Any?): Boolean =\n other is KTypeImpl &&\n classifier == other.classifier && arguments == other.arguments && isMarkedNullable == other.isMarkedNullable\n\n override fun hashCode(): Int =\n (classifier.hashCode() * 31 + arguments.hashCode()) * 31 + isMarkedNullable.hashCode()\n\n override fun toString(): String {\n val kClass = (classifier as? KClass<*>)\n val classifierName = when {\n kClass == null -> classifier.toString()\n kClass.simpleName != null -> kClass.simpleName\n else -> \"(non-denotable type)\"\n }\n\n val args =\n if (arguments.isEmpty()) \"\"\n else arguments.joinToString(\", \", \"<\", \">\") { it.asString() }\n val nullable = if (isMarkedNullable) \"?\" else \"\"\n\n return classifierName + args + nullable\n }\n\n // TODO: this should be the implementation of KTypeProjection.toString, see KT-30071\n private fun KTypeProjection.asString(): String {\n if (variance == null) return \"*\"\n return variance.prefixString() + type.toString()\n }\n}\n\ninternal object DynamicKType : KType {\n override val classifier: KClassifier? = null\n override val arguments: List<KTypeProjection> = emptyList()\n override val isMarkedNullable: Boolean = false\n override fun toString(): String = \"dynamic\"\n}\n\ninternal fun KVariance.prefixString() =\n when (this) {\n KVariance.INVARIANT -> \"\"\n KVariance.IN -> \"in \"\n KVariance.OUT -> \"out \"\n }\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect.js.internal\n\nimport kotlin.js.JsClass\n\n@JsName(\"PrimitiveClasses\")\ninternal object PrimitiveClasses {\n @JsName(\"anyClass\")\n val anyClass = PrimitiveKClassImpl(js(\"Object\").unsafeCast<JsClass<Any>>(), \"Any\", { it is Any })\n\n @JsName(\"numberClass\")\n val numberClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Number>>(), \"Number\", { it is Number })\n\n @JsName(\"nothingClass\")\n val nothingClass = NothingKClassImpl\n\n @JsName(\"booleanClass\")\n val booleanClass = PrimitiveKClassImpl(js(\"Boolean\").unsafeCast<JsClass<Boolean>>(), \"Boolean\", { it is Boolean })\n\n @JsName(\"byteClass\")\n val byteClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Byte>>(), \"Byte\", { it is Byte })\n\n @JsName(\"shortClass\")\n val shortClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Short>>(), \"Short\", { it is Short })\n\n @JsName(\"intClass\")\n val intClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Int>>(), \"Int\", { it is Int })\n\n @JsName(\"floatClass\")\n val floatClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Float>>(), \"Float\", { it is Float })\n\n @JsName(\"doubleClass\")\n val doubleClass = PrimitiveKClassImpl(js(\"Number\").unsafeCast<JsClass<Double>>(), \"Double\", { it is Double })\n\n @JsName(\"arrayClass\")\n val arrayClass = PrimitiveKClassImpl(js(\"Array\").unsafeCast<JsClass<Array<*>>>(), \"Array\", { it is Array<*> })\n\n @JsName(\"stringClass\")\n val stringClass = PrimitiveKClassImpl(js(\"String\").unsafeCast<JsClass<String>>(), \"String\", { it is String })\n\n @JsName(\"throwableClass\")\n val throwableClass = PrimitiveKClassImpl(js(\"Error\").unsafeCast<JsClass<Throwable>>(), \"Throwable\", { it is Throwable })\n\n @JsName(\"booleanArrayClass\")\n val booleanArrayClass = PrimitiveKClassImpl(js(\"Array\").unsafeCast<JsClass<BooleanArray>>(), \"BooleanArray\", { it is BooleanArray })\n\n @JsName(\"charArrayClass\")\n val charArrayClass = PrimitiveKClassImpl(js(\"Uint16Array\").unsafeCast<JsClass<CharArray>>(), \"CharArray\", { it is CharArray })\n\n @JsName(\"byteArrayClass\")\n val byteArrayClass = PrimitiveKClassImpl(js(\"Int8Array\").unsafeCast<JsClass<ByteArray>>(), \"ByteArray\", { it is ByteArray })\n\n @JsName(\"shortArrayClass\")\n val shortArrayClass = PrimitiveKClassImpl(js(\"Int16Array\").unsafeCast<JsClass<ShortArray>>(), \"ShortArray\", { it is ShortArray })\n\n @JsName(\"intArrayClass\")\n val intArrayClass = PrimitiveKClassImpl(js(\"Int32Array\").unsafeCast<JsClass<IntArray>>(), \"IntArray\", { it is IntArray })\n\n @JsName(\"longArrayClass\")\n val longArrayClass = PrimitiveKClassImpl(js(\"Array\").unsafeCast<JsClass<LongArray>>(), \"LongArray\", { it is LongArray })\n\n @JsName(\"floatArrayClass\")\n val floatArrayClass = PrimitiveKClassImpl(js(\"Float32Array\").unsafeCast<JsClass<FloatArray>>(), \"FloatArray\", { it is FloatArray })\n\n @JsName(\"doubleArrayClass\")\n val doubleArrayClass = PrimitiveKClassImpl(js(\"Float64Array\").unsafeCast<JsClass<DoubleArray>>(), \"DoubleArray\", { it is DoubleArray })\n\n @JsName(\"functionClass\")\n fun functionClass(arity: Int): KClassImpl<Any> {\n return functionClasses.get(arity) ?: run {\n val result = PrimitiveKClassImpl(js(\"Function\").unsafeCast<JsClass<Any>>(), \"Function$arity\",\n { jsTypeOf(it) === \"function\" && it.asDynamic().length === arity })\n functionClasses.asDynamic()[arity] = result\n result\n }\n }\n}\n\nprivate val functionClasses = arrayOfNulls<KClassImpl<Any>>(0)","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// a package is omitted to get declarations directly under the module\n\nimport kotlin.reflect.*\nimport kotlin.reflect.js.internal.*\n\n@JsName(\"getKClass\")\ninternal fun <T : Any> getKClass(jClass: Any /* JsClass<T> | Array<JsClass<T>> */): KClass<T> {\n return if (js(\"Array\").isArray(jClass)) {\n getKClassM(jClass.unsafeCast<Array<JsClass<T>>>())\n } else {\n getKClass1(jClass.unsafeCast<JsClass<T>>())\n }\n}\n\n@JsName(\"getKClassM\")\ninternal fun <T : Any> getKClassM(jClasses: Array<JsClass<T>>): KClass<T> = when (jClasses.size) {\n 1 -> getKClass1(jClasses[0])\n 0 -> NothingKClassImpl.unsafeCast<KClass<T>>()\n else -> ErrorKClass().unsafeCast<KClass<T>>()\n}\n\n@JsName(\"getKClassFromExpression\")\ninternal fun <T : Any> getKClassFromExpression(e: T): KClass<T> =\n when (jsTypeOf(e)) {\n \"string\" -> PrimitiveClasses.stringClass\n \"number\" -> if (jsBitwiseOr(e, 0).asDynamic() === e) PrimitiveClasses.intClass else PrimitiveClasses.doubleClass\n \"boolean\" -> PrimitiveClasses.booleanClass\n \"function\" -> PrimitiveClasses.functionClass(e.asDynamic().length)\n else -> {\n when {\n e is BooleanArray -> PrimitiveClasses.booleanArrayClass\n e is CharArray -> PrimitiveClasses.charArrayClass\n e is ByteArray -> PrimitiveClasses.byteArrayClass\n e is ShortArray -> PrimitiveClasses.shortArrayClass\n e is IntArray -> PrimitiveClasses.intArrayClass\n e is LongArray -> PrimitiveClasses.longArrayClass\n e is FloatArray -> PrimitiveClasses.floatArrayClass\n e is DoubleArray -> PrimitiveClasses.doubleArrayClass\n e is KClass<*> -> KClass::class\n e is Array<*> -> PrimitiveClasses.arrayClass\n else -> {\n val constructor = js(\"Object\").getPrototypeOf(e).constructor\n when {\n constructor === js(\"Object\") -> PrimitiveClasses.anyClass\n constructor === js(\"Error\") -> PrimitiveClasses.throwableClass\n else -> {\n val jsClass: JsClass<T> = constructor\n getKClass1(jsClass)\n }\n }\n }\n }\n }\n }.unsafeCast<KClass<T>>()\n\n@JsName(\"getKClass1\")\ninternal fun <T : Any> getKClass1(jClass: JsClass<T>): KClass<T> {\n if (jClass === js(\"String\")) return PrimitiveClasses.stringClass.unsafeCast<KClass<T>>()\n\n val metadata = jClass.asDynamic().`$metadata$`\n\n return if (metadata != null) {\n if (metadata.`$kClass$` == null) {\n val kClass = SimpleKClassImpl(jClass)\n metadata.`$kClass$` = kClass\n kClass\n } else {\n metadata.`$kClass$`\n }\n } else {\n SimpleKClassImpl(jClass)\n }\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.js\n\n/**\n * Exposes the JavaScript [RegExp object](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp) to Kotlin.\n */\n@Suppress(\"NOT_DOCUMENTED\")\npublic external class RegExp(pattern: String, flags: String? = definedExternally) {\n\n public fun test(str: String): Boolean\n\n public fun exec(str: String): RegExpMatch?\n\n public override fun toString(): String\n\n /**\n * The lastIndex is a read/write integer property of regular expressions that specifies the index at which to start the next match.\n */\n public var lastIndex: Int\n\n public val global: Boolean\n public val ignoreCase: Boolean\n public val multiline: Boolean\n}\n\n/**\n * Resets the regular expression so that subsequent [RegExp.test] and [RegExp.exec] calls will match starting with the beginning of the input string.\n */\npublic fun RegExp.reset() {\n lastIndex = 0\n}\n\n// TODO: Inherit from array or introduce asArray() extension\n/**\n * Represents the return value of [RegExp.exec].\n */\n@Suppress(\"NOT_DOCUMENTED\")\npublic external interface RegExpMatch {\n public val index: Int\n public val input: String\n public val length: Int\n}\n\n/**\n * Returns the entire text matched by [RegExp.exec] if the [index] parameter is 0, or the text matched by the capturing parenthesis\n * at the given index.\n */\npublic inline operator fun RegExpMatch.get(index: Int): String? = asDynamic()[index]\n\n/**\n * Converts the result of [RegExp.exec] to an array where the first element contains the entire matched text and each subsequent\n * element is the text matched by each capturing parenthesis.\n */\npublic inline fun RegExpMatch.asArray(): Array<out String?> = unsafeCast<Array<out String?>>()\n","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n/**\n * The exception thrown when a character encoding or decoding error occurs.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic actual open class CharacterCodingException(message: String?) : Exception(message) {\n actual constructor() : this(null)\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n/**\n * A mutable sequence of characters.\n *\n * String builder can be used to efficiently perform multiple string manipulation operations.\n */\npublic actual class StringBuilder actual constructor(content: String) : Appendable, CharSequence {\n /**\n * Constructs an empty string builder with the specified initial [capacity].\n *\n * In Kotlin/JS implementation of StringBuilder the initial capacity has no effect on the further performance of operations.\n */\n actual constructor(capacity: Int) : this() {\n }\n\n /** Constructs a string builder that contains the same characters as the specified [content] char sequence. */\n actual constructor(content: CharSequence) : this(content.toString()) {}\n\n /** Constructs an empty string builder. */\n actual constructor() : this(\"\")\n\n private var string: String = if (content !== undefined) content else \"\"\n\n actual override val length: Int\n get() = string.asDynamic().length\n\n actual override fun get(index: Int): Char =\n string.getOrElse(index) { throw IndexOutOfBoundsException(\"index: $index, length: $length}\") }\n\n actual override fun subSequence(startIndex: Int, endIndex: Int): CharSequence = string.substring(startIndex, endIndex)\n\n actual override fun append(value: Char): StringBuilder {\n string += value\n return this\n }\n\n actual override fun append(value: CharSequence?): StringBuilder {\n string += value.toString()\n return this\n }\n\n actual override fun append(value: CharSequence?, startIndex: Int, endIndex: Int): StringBuilder =\n this.appendRange(value ?: \"null\", startIndex, endIndex)\n\n /**\n * Reverses the contents of this string builder and returns this instance.\n *\n * Surrogate pairs included in this string builder are treated as single characters.\n * Therefore, the order of the high-low surrogates is never reversed.\n *\n * Note that the reverse operation may produce new surrogate pairs that were unpaired low-surrogates and high-surrogates before the operation.\n * For example, reversing `\"\\uDC00\\uD800\"` produces `\"\\uD800\\uDC00\"` which is a valid surrogate pair.\n */\n actual fun reverse(): StringBuilder {\n var reversed = \"\"\n var index = string.length - 1\n while (index >= 0) {\n val low = string[index--]\n if (low.isLowSurrogate() && index >= 0) {\n val high = string[index--]\n if (high.isHighSurrogate()) {\n reversed = reversed + high + low\n } else {\n reversed = reversed + low + high\n }\n } else {\n reversed += low\n }\n }\n string = reversed\n return this\n }\n\n /**\n * Appends the string representation of the specified object [value] to this string builder and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was appended to this string builder.\n */\n actual fun append(value: Any?): StringBuilder {\n string += value.toString()\n return this\n }\n\n /**\n * Appends the string representation of the specified boolean [value] to this string builder and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was appended to this string builder.\n */\n @SinceKotlin(\"1.3\")\n actual fun append(value: Boolean): StringBuilder {\n string += value\n return this\n }\n\n /**\n * Appends characters in the specified character array [value] to this string builder and returns this instance.\n *\n * Characters are appended in order, starting at the index 0.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun append(value: CharArray): StringBuilder {\n @OptIn(ExperimentalStdlibApi::class)\n string += value.concatToString()\n return this\n }\n\n @Deprecated(\"Provided for binary compatibility.\", level = DeprecationLevel.HIDDEN)\n fun append(value: String): StringBuilder = append(value)\n\n /**\n * Appends the specified string [value] to this string builder and returns this instance.\n *\n * If [value] is `null`, then the four characters `\"null\"` are appended.\n */\n @SinceKotlin(\"1.3\")\n actual fun append(value: String?): StringBuilder {\n this.string += value ?: \"null\"\n return this\n }\n\n /**\n * Returns the current capacity of this string builder.\n *\n * The capacity is the maximum length this string builder can have before an allocation occurs.\n *\n * In Kotlin/JS implementation of StringBuilder the value returned from this method may not indicate the actual size of the backing storage.\n */\n @SinceKotlin(\"1.3\")\n// @ExperimentalStdlibApi\n @Deprecated(\"Obtaining StringBuilder capacity is not supported in JS and common code.\", level = DeprecationLevel.ERROR)\n actual fun capacity(): Int = length\n\n /**\n * Ensures that the capacity of this string builder is at least equal to the specified [minimumCapacity].\n *\n * If the current capacity is less than the [minimumCapacity], a new backing storage is allocated with greater capacity.\n * Otherwise, this method takes no action and simply returns.\n *\n * In Kotlin/JS implementation of StringBuilder the size of the backing storage is not extended to comply the given [minimumCapacity],\n * thus calling this method has no effect on the further performance of operations.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun ensureCapacity(minimumCapacity: Int) {\n }\n\n /**\n * Returns the index within this string builder of the first occurrence of the specified [string].\n *\n * Returns `-1` if the specified [string] does not occur in this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun indexOf(string: String): Int = this.string.asDynamic().indexOf(string)\n\n /**\n * Returns the index within this string builder of the first occurrence of the specified [string],\n * starting at the specified [startIndex].\n *\n * Returns `-1` if the specified [string] does not occur in this string builder starting at the specified [startIndex].\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun indexOf(string: String, startIndex: Int): Int = this.string.asDynamic().indexOf(string, startIndex)\n\n /**\n * Returns the index within this string builder of the last occurrence of the specified [string].\n * The last occurrence of empty string `\"\"` is considered to be at the index equal to `this.length`.\n *\n * Returns `-1` if the specified [string] does not occur in this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun lastIndexOf(string: String): Int = this.string.asDynamic().lastIndexOf(string)\n\n /**\n * Returns the index within this string builder of the last occurrence of the specified [string],\n * starting from the specified [startIndex] toward the beginning.\n *\n * Returns `-1` if the specified [string] does not occur in this string builder starting at the specified [startIndex].\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun lastIndexOf(string: String, startIndex: Int): Int {\n if (string.isEmpty() && startIndex < 0) return -1\n return this.string.asDynamic().lastIndexOf(string, startIndex)\n }\n\n /**\n * Inserts the string representation of the specified boolean [value] into this string builder at the specified [index] and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was inserted into this string builder at the specified [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: Boolean): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n string = string.substring(0, index) + value + string.substring(index)\n return this\n }\n\n /**\n * Inserts the specified character [value] into this string builder at the specified [index] and returns this instance.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: Char): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n string = string.substring(0, index) + value + string.substring(index)\n return this\n }\n\n /**\n * Inserts characters in the specified character array [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in same order as in the [value] character array, starting at [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: CharArray): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n @OptIn(ExperimentalStdlibApi::class)\n string = string.substring(0, index) + value.concatToString() + string.substring(index)\n return this\n }\n\n /**\n * Inserts characters in the specified character sequence [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in the same order as in the [value] character sequence, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the character sequence from which characters are inserted. If [value] is `null`, then the four characters `\"null\"` are inserted.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: CharSequence?): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n string = string.substring(0, index) + value.toString() + string.substring(index)\n return this\n }\n\n /**\n * Inserts the string representation of the specified object [value] into this string builder at the specified [index] and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was inserted into this string builder at the specified [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: Any?): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n string = string.substring(0, index) + value.toString() + string.substring(index)\n return this\n }\n\n @Deprecated(\"Provided for binary compatibility.\", level = DeprecationLevel.HIDDEN)\n fun insert(index: Int, value: String): StringBuilder = insert(index, value)\n\n /**\n * Inserts the string [value] into this string builder at the specified [index] and returns this instance.\n *\n * If [value] is `null`, then the four characters `\"null\"` are inserted.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun insert(index: Int, value: String?): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n val toInsert = value ?: \"null\"\n this.string = this.string.substring(0, index) + toInsert + this.string.substring(index)\n return this\n }\n\n /**\n * Sets the length of this string builder to the specified [newLength].\n *\n * If the [newLength] is less than the current length, it is changed to the specified [newLength].\n * Otherwise, null characters '\\u0000' are appended to this string builder until its length is less than the [newLength].\n *\n * Note that in Kotlin/JS [set] operator function has non-constant execution time complexity.\n * Therefore, increasing length of this string builder and then updating each character by index may slow down your program.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] if [newLength] is less than zero.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun setLength(newLength: Int) {\n if (newLength < 0) {\n throw IllegalArgumentException(\"Negative new length: $newLength.\")\n }\n\n if (newLength <= length) {\n string = string.substring(0, newLength)\n } else {\n for (i in length until newLength) {\n string += '\\u0000'\n }\n }\n }\n\n /**\n * Returns a new [String] that contains characters in this string builder at [startIndex] (inclusive) and up to the [length] (exclusive).\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun substring(startIndex: Int): String {\n AbstractList.checkPositionIndex(startIndex, length)\n\n return string.substring(startIndex)\n }\n\n /**\n * Returns a new [String] that contains characters in this string builder at [startIndex] (inclusive) and up to the [endIndex] (exclusive).\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun substring(startIndex: Int, endIndex: Int): String {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, length)\n\n return string.substring(startIndex, endIndex)\n }\n\n /**\n * Attempts to reduce storage used for this string builder.\n *\n * If the backing storage of this string builder is larger than necessary to hold its current contents,\n * then it may be resized to become more space efficient.\n * Calling this method may, but is not required to, affect the value of the [capacity] property.\n *\n * In Kotlin/JS implementation of StringBuilder the size of the backing storage is always equal to the length of the string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n actual fun trimToSize() {\n }\n\n override fun toString(): String = string\n\n /**\n * Clears the content of this string builder making it empty and returns this instance.\n *\n * @sample samples.text.Strings.clearStringBuilder\n */\n @SinceKotlin(\"1.3\")\n public fun clear(): StringBuilder {\n string = \"\"\n return this\n }\n\n /**\n * Sets the character at the specified [index] to the specified [value].\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public operator fun set(index: Int, value: Char) {\n AbstractList.checkElementIndex(index, length)\n\n string = string.substring(0, index) + value + string.substring(index + 1)\n }\n\n /**\n * Replaces characters in the specified range of this string builder with characters in the specified string [value] and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to replace.\n * @param endIndex the end (exclusive) of the range to replace.\n * @param value the string to replace with.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] if [startIndex] is less than zero, greater than the length of this string builder, or `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun setRange(startIndex: Int, endIndex: Int, value: String): StringBuilder {\n checkReplaceRange(startIndex, endIndex, length)\n\n this.string = this.string.substring(0, startIndex) + value + this.string.substring(endIndex)\n return this\n }\n\n private fun checkReplaceRange(startIndex: Int, endIndex: Int, length: Int) {\n if (startIndex < 0 || startIndex > length) {\n throw IndexOutOfBoundsException(\"startIndex: $startIndex, length: $length\")\n }\n if (startIndex > endIndex) {\n throw IllegalArgumentException(\"startIndex($startIndex) > endIndex($endIndex)\")\n }\n }\n\n /**\n * Removes the character at the specified [index] from this string builder and returns this instance.\n *\n * If the `Char` at the specified [index] is part of a supplementary code point, this method does not remove the entire supplementary character.\n *\n * @param index the index of `Char` to remove.\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun deleteAt(index: Int): StringBuilder {\n AbstractList.checkElementIndex(index, length)\n\n string = string.substring(0, index) + string.substring(index + 1)\n return this\n }\n\n /**\n * Removes characters in the specified range from this string builder and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to remove.\n * @param endIndex the end (exclusive) of the range to remove.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun deleteRange(startIndex: Int, endIndex: Int): StringBuilder {\n checkReplaceRange(startIndex, endIndex, length)\n\n string = string.substring(0, startIndex) + string.substring(endIndex)\n return this\n }\n\n /**\n * Copies characters from this string builder into the [destination] character array.\n *\n * @param destination the array to copy to.\n * @param destinationOffset the position in the array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the range to copy, 0 by default.\n * @param endIndex the end (exclusive) of the range to copy, length of this string builder by default.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun toCharArray(destination: CharArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = this.length) {\n AbstractList.checkBoundsIndexes(startIndex, endIndex, length)\n AbstractList.checkBoundsIndexes(destinationOffset, destinationOffset + endIndex - startIndex, destination.size)\n\n var dstIndex = destinationOffset\n for (index in startIndex until endIndex) {\n destination[dstIndex++] = string[index]\n }\n }\n\n /**\n * Appends characters in a subarray of the specified character array [value] to this string builder and returns this instance.\n *\n * Characters are appended in order, starting at specified [startIndex].\n *\n * @param value the array from which characters are appended.\n * @param startIndex the beginning (inclusive) of the subarray to append.\n * @param endIndex the end (exclusive) of the subarray to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun appendRange(value: CharArray, startIndex: Int, endIndex: Int): StringBuilder {\n @OptIn(ExperimentalStdlibApi::class)\n string += value.concatToString(startIndex, endIndex)\n return this\n }\n\n /**\n * Appends a subsequence of the specified character sequence [value] to this string builder and returns this instance.\n *\n * @param value the character sequence from which a subsequence is appended.\n * @param startIndex the beginning (inclusive) of the subsequence to append.\n * @param endIndex the end (exclusive) of the subsequence to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun appendRange(value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder {\n val stringCsq = value.toString()\n AbstractList.checkBoundsIndexes(startIndex, endIndex, stringCsq.length)\n\n string += stringCsq.substring(startIndex, endIndex)\n return this\n }\n\n /**\n * Inserts characters in a subarray of the specified character array [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in same order as in the [value] array, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the array from which characters are inserted.\n * @param startIndex the beginning (inclusive) of the subarray to insert.\n * @param endIndex the end (exclusive) of the subarray to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun insertRange(index: Int, value: CharArray, startIndex: Int, endIndex: Int): StringBuilder {\n AbstractList.checkPositionIndex(index, this.length)\n\n @OptIn(ExperimentalStdlibApi::class)\n string = string.substring(0, index) + value.concatToString(startIndex, endIndex) + string.substring(index)\n return this\n }\n\n /**\n * Inserts characters in a subsequence of the specified character sequence [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in the same order as in the [value] character sequence, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the character sequence from which a subsequence is inserted.\n * @param startIndex the beginning (inclusive) of the subsequence to insert.\n * @param endIndex the end (exclusive) of the subsequence to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n public fun insertRange(index: Int, value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder {\n AbstractList.checkPositionIndex(index, length)\n\n val stringCsq = value.toString()\n AbstractList.checkBoundsIndexes(startIndex, endIndex, stringCsq.length)\n\n string = string.substring(0, index) + stringCsq.substring(startIndex, endIndex) + string.substring(index)\n return this\n }\n}\n\n\n/**\n * Clears the content of this string builder making it empty and returns this instance.\n *\n * @sample samples.text.Strings.clearStringBuilder\n */\n@SinceKotlin(\"1.3\")\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.clear(): StringBuilder = this.clear()\n\n/**\n * Sets the character at the specified [index] to the specified [value].\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline operator fun StringBuilder.set(index: Int, value: Char) = this.set(index, value)\n\n/**\n * Replaces characters in the specified range of this string builder with characters in the specified string [value] and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to replace.\n * @param endIndex the end (exclusive) of the range to replace.\n * @param value the string to replace with.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] if [startIndex] is less than zero, greater than the length of this string builder, or `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.setRange(startIndex: Int, endIndex: Int, value: String): StringBuilder =\n this.setRange(startIndex, endIndex, value)\n\n/**\n * Removes the character at the specified [index] from this string builder and returns this instance.\n *\n * If the `Char` at the specified [index] is part of a supplementary code point, this method does not remove the entire supplementary character.\n *\n * @param index the index of `Char` to remove.\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.deleteAt(index: Int): StringBuilder = this.deleteAt(index)\n\n/**\n * Removes characters in the specified range from this string builder and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to remove.\n * @param endIndex the end (exclusive) of the range to remove.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.deleteRange(startIndex: Int, endIndex: Int): StringBuilder = this.deleteRange(startIndex, endIndex)\n\n/**\n * Copies characters from this string builder into the [destination] character array.\n *\n * @param destination the array to copy to.\n * @param destinationOffset the position in the array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the range to copy, 0 by default.\n * @param endIndex the end (exclusive) of the range to copy, length of this string builder by default.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\", \"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual inline fun StringBuilder.toCharArray(destination: CharArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = this.length) =\n this.toCharArray(destination, destinationOffset, startIndex, endIndex)\n\n/**\n * Appends characters in a subarray of the specified character array [value] to this string builder and returns this instance.\n *\n * Characters are appended in order, starting at specified [startIndex].\n *\n * @param value the array from which characters are appended.\n * @param startIndex the beginning (inclusive) of the subarray to append.\n * @param endIndex the end (exclusive) of the subarray to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.appendRange(value: CharArray, startIndex: Int, endIndex: Int): StringBuilder =\n this.appendRange(value, startIndex, endIndex)\n\n/**\n * Appends a subsequence of the specified character sequence [value] to this string builder and returns this instance.\n *\n * @param value the character sequence from which a subsequence is appended.\n * @param startIndex the beginning (inclusive) of the subsequence to append.\n * @param endIndex the end (exclusive) of the subsequence to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.appendRange(value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder =\n this.appendRange(value, startIndex, endIndex)\n\n/**\n * Inserts characters in a subarray of the specified character array [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in same order as in the [value] array, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the array from which characters are inserted.\n * @param startIndex the beginning (inclusive) of the subarray to insert.\n * @param endIndex the end (exclusive) of the subarray to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.insertRange(index: Int, value: CharArray, startIndex: Int, endIndex: Int): StringBuilder =\n this.insertRange(index, value, startIndex, endIndex)\n\n/**\n * Inserts characters in a subsequence of the specified character sequence [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in the same order as in the [value] character sequence, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the character sequence from which a subsequence is inserted.\n * @param startIndex the beginning (inclusive) of the subsequence to insert.\n * @param endIndex the end (exclusive) of the subsequence to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"NOTHING_TO_INLINE\")\npublic actual inline fun StringBuilder.insertRange(index: Int, value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder =\n this.insertRange(index, value, startIndex, endIndex)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n// actually \\s is enough to match all whitespace, but \\xA0 added because of different regexp behavior of Rhino used in Selenium tests\npublic actual fun Char.isWhitespace(): Boolean = toString().matches(\"[\\\\s\\\\xA0]\")\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n */\n@OptIn(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic actual inline fun Char.toLowerCase(): Char = lowercaseChar()\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function performs one-to-one character mapping.\n * To support one-to-many character mapping use the [lowercase] function.\n * If this character has no mapping equivalent, the character itself is returned.\n *\n * @sample samples.text.Chars.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun Char.lowercaseChar(): Char = toString().asDynamic().toLowerCase().charCodeAt(0).unsafeCast<Int>().toChar()\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.\n * For example, `'\\u0130'.lowercase()` returns `\"\\u0069\\u0307\"`,\n * where `'\\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).\n * If this character has no lower case mapping, the result of `toString()` of this char is returned.\n *\n * @sample samples.text.Chars.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun Char.lowercase(): String = toString().asDynamic().toLowerCase() as String\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n */\n@OptIn(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic actual inline fun Char.toUpperCase(): Char = uppercaseChar()\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function performs one-to-one character mapping.\n * To support one-to-many character mapping use the [uppercase] function.\n * If this character has no mapping equivalent, the character itself is returned.\n *\n * @sample samples.text.Chars.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic actual fun Char.uppercaseChar(): Char {\n val uppercase = uppercase()\n return if (uppercase.length > 1) this else uppercase[0]\n}\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.\n * For example, `'\\uFB00'.uppercase()` returns `\"\\u0046\\u0046\"`,\n * where `'\\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).\n * If this character has no upper case mapping, the result of `toString()` of this char is returned.\n *\n * @sample samples.text.Chars.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic actual inline fun Char.uppercase(): String = toString().asDynamic().toUpperCase() as String\n\n/**\n * Returns `true` if this character is a Unicode high-surrogate code unit (also known as leading-surrogate code unit).\n */\npublic actual fun Char.isHighSurrogate(): Boolean = this in Char.MIN_HIGH_SURROGATE..Char.MAX_HIGH_SURROGATE\n\n/**\n * Returns `true` if this character is a Unicode low-surrogate code unit (also known as trailing-surrogate code unit).\n */\npublic actual fun Char.isLowSurrogate(): Boolean = this in Char.MIN_LOW_SURROGATE..Char.MAX_LOW_SURROGATE\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n\n/**\n * Returns `true` if the content of this string is equal to the word \"true\", ignoring case, and `false` otherwise.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@kotlin.internal.InlineOnly\npublic actual inline fun String.toBoolean(): Boolean = this.toBoolean()\n\n/**\n * Returns `true` if this string is not `null` and its content is equal to the word \"true\", ignoring case, and `false` otherwise.\n */\n@OptIn(ExperimentalStdlibApi::class)\n@SinceKotlin(\"1.4\")\npublic actual fun String?.toBoolean(): Boolean = this != null && this.lowercase() == \"true\"\n\n/**\n * Parses the string as a signed [Byte] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\npublic actual fun String.toByte(): Byte = toByteOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a signed [Byte] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\npublic actual fun String.toByte(radix: Int): Byte = toByteOrNull(radix) ?: numberFormatError(this)\n\n\n/**\n * Parses the string as a [Short] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\npublic actual fun String.toShort(): Short = toShortOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a [Short] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\npublic actual fun String.toShort(radix: Int): Short = toShortOrNull(radix) ?: numberFormatError(this)\n\n/**\n * Parses the string as an [Int] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\npublic actual fun String.toInt(): Int = toIntOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as an [Int] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\npublic actual fun String.toInt(radix: Int): Int = toIntOrNull(radix) ?: numberFormatError(this)\n\n/**\n * Parses the string as a [Long] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\npublic actual fun String.toLong(): Long = toLongOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a [Long] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\npublic actual fun String.toLong(radix: Int): Long = toLongOrNull(radix) ?: numberFormatError(this)\n\n/**\n * Parses the string as a [Double] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\npublic actual fun String.toDouble(): Double = (+(this.asDynamic())).unsafeCast<Double>().also {\n if (it.isNaN() && !this.isNaN() || it == 0.0 && this.isBlank())\n numberFormatError(this)\n}\n\n/**\n * Parses the string as a [Float] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun String.toFloat(): Float = toDouble().unsafeCast<Float>()\n\n/**\n * Parses the string as a [Double] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\npublic actual fun String.toDoubleOrNull(): Double? = (+(this.asDynamic())).unsafeCast<Double>().takeIf {\n !(it.isNaN() && !this.isNaN() || it == 0.0 && this.isBlank())\n}\n\n/**\n * Parses the string as a [Float] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@kotlin.internal.InlineOnly\npublic actual inline fun String.toFloatOrNull(): Float? = toDoubleOrNull().unsafeCast<Float?>()\n\n/**\n * Returns a string representation of this [Byte] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.2\")\n@kotlin.internal.InlineOnly\npublic actual inline fun Byte.toString(radix: Int): String = this.toInt().toString(radix)\n\n/**\n * Returns a string representation of this [Short] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.2\")\n@kotlin.internal.InlineOnly\npublic actual inline fun Short.toString(radix: Int): String = this.toInt().toString(radix)\n\n/**\n * Returns a string representation of this [Int] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.2\")\npublic actual fun Int.toString(radix: Int): String = asDynamic().toString(checkRadix(radix))\n\n@OptIn(ExperimentalStdlibApi::class)\nprivate fun String.isNaN(): Boolean = when (this.lowercase()) {\n \"nan\", \"+nan\", \"-nan\" -> true\n else -> false\n}\n\n/**\n * Checks whether the given [radix] is valid radix for string to number and number to string conversion.\n */\n@PublishedApi\ninternal actual fun checkRadix(radix: Int): Int {\n if (radix !in 2..36) {\n throw IllegalArgumentException(\"radix $radix was not in valid range 2..36\")\n }\n return radix\n}\n\ninternal actual fun digitOf(char: Char, radix: Int): Int = when {\n char >= '0' && char <= '9' -> char - '0'\n char >= 'A' && char <= 'Z' -> char - 'A' + 10\n char >= 'a' && char <= 'z' -> char - 'a' + 10\n else -> -1\n}.let { if (it >= radix) -1 else it }\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\nimport kotlin.js.RegExp\n\n/**\n * Provides enumeration values to use to set regular expression options.\n */\npublic actual enum class RegexOption(val value: String) {\n /** Enables case-insensitive matching. */\n IGNORE_CASE(\"i\"),\n /** Enables multiline mode.\n *\n * In multiline mode the expressions `^` and `$` match just after or just before,\n * respectively, a line terminator or the end of the input sequence. */\n MULTILINE(\"m\")\n}\n\n\n/**\n * Represents the results from a single capturing group within a [MatchResult] of [Regex].\n *\n * @param value The value of captured group.\n */\npublic actual data class MatchGroup(actual val value: String)\n\n\n/**\n * Represents a compiled regular expression.\n * Provides functions to match strings in text with a pattern, replace the found occurrences and split text around matches.\n *\n * For pattern syntax reference see [MDN RegExp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Special_characters_meaning_in_regular_expressions)\n * and [http://www.w3schools.com/jsref/jsref_obj_regexp.asp](https://www.w3schools.com/jsref/jsref_obj_regexp.asp).\n *\n * @constructor Creates a regular expression from the specified [pattern] string and the specified set of [options].\n */\npublic actual class Regex actual constructor(pattern: String, options: Set<RegexOption>) {\n\n /** Creates a regular expression from the specified [pattern] string and the specified single [option]. */\n public actual constructor(pattern: String, option: RegexOption) : this(pattern, setOf(option))\n\n /** Creates a regular expression from the specified [pattern] string and the default options. */\n public actual constructor(pattern: String) : this(pattern, emptySet())\n\n\n /** The pattern string of this regular expression. */\n public actual val pattern: String = pattern\n /** The set of options that were used to create this regular expression. */\n public actual val options: Set<RegexOption> = options.toSet()\n private val nativePattern: RegExp = RegExp(pattern, options.map { it.value }.joinToString(separator = \"\") + \"g\")\n\n /** Indicates whether the regular expression matches the entire [input]. */\n public actual infix fun matches(input: CharSequence): Boolean {\n nativePattern.reset()\n val match = nativePattern.exec(input.toString())\n return match != null && match.index == 0 && nativePattern.lastIndex == input.length\n }\n\n /** Indicates whether the regular expression can find at least one match in the specified [input]. */\n public actual fun containsMatchIn(input: CharSequence): Boolean {\n nativePattern.reset()\n return nativePattern.test(input.toString())\n }\n\n /** Returns the first match of a regular expression in the [input], beginning at the specified [startIndex].\n *\n * @param startIndex An index to start search with, by default 0. Must be not less than zero and not greater than `input.length()`\n * @return An instance of [MatchResult] if match was found or `null` otherwise.\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or greater than the length of the [input] char sequence.\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n public actual fun find(input: CharSequence, startIndex: Int = 0): MatchResult? {\n if (startIndex < 0 || startIndex > input.length) {\n throw IndexOutOfBoundsException(\"Start index out of bounds: $startIndex, input length: ${input.length}\")\n }\n return nativePattern.findNext(input.toString(), startIndex)\n }\n\n /**\n * Returns a sequence of all occurrences of a regular expression within the [input] string, beginning at the specified [startIndex].\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or greater than the length of the [input] char sequence.\n *\n * @sample samples.text.Regexps.findAll\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n public actual fun findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult> {\n if (startIndex < 0 || startIndex > input.length) {\n throw IndexOutOfBoundsException(\"Start index out of bounds: $startIndex, input length: ${input.length}\")\n }\n return generateSequence({ find(input, startIndex) }, { match -> match.next() })\n }\n\n /**\n * Attempts to match the entire [input] CharSequence against the pattern.\n *\n * @return An instance of [MatchResult] if the entire input matches or `null` otherwise.\n */\n public actual fun matchEntire(input: CharSequence): MatchResult? {\n if (pattern.startsWith('^') && pattern.endsWith('$'))\n return find(input)\n else\n return Regex(\"^${pattern.trimStart('^').trimEnd('$')}$\", options).find(input)\n }\n\n /**\n * Replaces all occurrences of this regular expression in the specified [input] string with specified [replacement] expression.\n *\n * @param replacement A replacement expression that can include substitutions. See [String.prototype.replace](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) function docs for details.\n */\n public actual fun replace(input: CharSequence, replacement: String): String = input.toString().nativeReplace(nativePattern, replacement)\n\n /**\n * Replaces all occurrences of this regular expression in the specified [input] string with the result of\n * the given function [transform] that takes [MatchResult] and returns a string to be used as a\n * replacement for that match.\n */\n public actual inline fun replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String {\n var match = find(input)\n if (match == null) return input.toString()\n\n var lastStart = 0\n val length = input.length\n val sb = StringBuilder(length)\n do {\n val foundMatch = match!!\n sb.append(input, lastStart, foundMatch.range.start)\n sb.append(transform(foundMatch))\n lastStart = foundMatch.range.endInclusive + 1\n match = foundMatch.next()\n } while (lastStart < length && match != null)\n\n if (lastStart < length) {\n sb.append(input, lastStart, length)\n }\n\n return sb.toString()\n }\n\n /**\n * Replaces the first occurrence of this regular expression in the specified [input] string with specified [replacement] expression.\n *\n * @param replacement A replacement expression that can include substitutions. See [String.prototype.replace](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) function docs for details.\n */\n public actual fun replaceFirst(input: CharSequence, replacement: String): String {\n val nonGlobalOptions = options.map { it.value }.joinToString(separator = \"\")\n return input.toString().nativeReplace(RegExp(pattern, nonGlobalOptions), replacement)\n }\n\n /**\n * Splits the [input] CharSequence around matches of this regular expression.\n *\n * @param limit Non-negative value specifying the maximum number of substrings the string can be split to.\n * Zero by default means no limit is set.\n */\n @Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\n public actual fun split(input: CharSequence, limit: Int = 0): List<String> {\n require(limit >= 0) { \"Limit must be non-negative, but was $limit\" }\n val matches = findAll(input).let { if (limit == 0) it else it.take(limit - 1) }\n val result = mutableListOf<String>()\n var lastStart = 0\n\n for (match in matches) {\n result.add(input.subSequence(lastStart, match.range.start).toString())\n lastStart = match.range.endInclusive + 1\n }\n result.add(input.subSequence(lastStart, input.length).toString())\n return result\n }\n\n\n /**\n * Returns the string representation of this regular expression, namely the [pattern] of this regular expression.\n *\n * Note that another regular expression constructed from the same pattern string may have different [options]\n * and may match strings differently.\n */\n public override fun toString(): String = nativePattern.toString()\n\n actual companion object {\n /**\n * Returns a regular expression that matches the specified [literal] string literally.\n * No characters of that string will have special meaning when searching for an occurrence of the regular expression.\n */\n public actual fun fromLiteral(literal: String): Regex = Regex(escape(literal))\n\n /**\n * Returns a regular expression pattern string that matches the specified [literal] string literally.\n * No characters of that string will have special meaning when searching for an occurrence of the regular expression.\n */\n public actual fun escape(literal: String): String = literal.nativeReplace(patternEscape, \"\\\\$&\")\n\n /**\n * Returns a literal replacement expression for the specified [literal] string.\n * No characters of that string will have special meaning when it is used as a replacement string in [Regex.replace] function.\n */\n public actual fun escapeReplacement(literal: String): String = literal.nativeReplace(replacementEscape, \"$$$$\")\n\n private val patternEscape = RegExp(\"\"\"[-\\\\^$*+?.()|[\\]{}]\"\"\", \"g\")\n private val replacementEscape = RegExp(\"\"\"\\$\"\"\", \"g\")\n }\n}\n\n/** Creates a regular expression from the specified [pattern] string and the specified single [option]. */\n@Deprecated(\"Provided for binary compatibility\", level = DeprecationLevel.HIDDEN)\n@JsName(\"Regex_sb3q2\\$\")\npublic fun Regex_0(pattern: String, option: RegexOption): Regex = Regex(pattern, setOf(option))\n\n/** Creates a regular expression from the specified [pattern] string and the default options. */\n@Deprecated(\"Provided for binary compatibility\", level = DeprecationLevel.HIDDEN)\n@JsName(\"Regex_61zpoe\\$\")\npublic fun Regex_1(pattern: String): Regex = Regex(pattern, emptySet())\n\n\n\n\nprivate fun RegExp.findNext(input: String, from: Int): MatchResult? {\n this.lastIndex = from\n val match = exec(input)\n if (match == null) return null\n val range = match.index..lastIndex - 1\n\n return object : MatchResult {\n override val range: IntRange = range\n override val value: String\n get() = match[0]!!\n\n override val groups: MatchGroupCollection = object : MatchGroupCollection, AbstractCollection<MatchGroup?>() {\n override val size: Int get() = match.length\n override fun iterator(): Iterator<MatchGroup?> = indices.asSequence().map { this[it] }.iterator()\n override fun get(index: Int): MatchGroup? = match[index]?.let { MatchGroup(it) }\n }\n\n\n private var groupValues_: List<String>? = null\n\n override val groupValues: List<String>\n get() {\n if (groupValues_ == null) {\n groupValues_ = object : AbstractList<String>() {\n override val size: Int get() = match.length\n override fun get(index: Int): String = match[index] ?: \"\"\n }\n }\n return groupValues_!!\n }\n\n override fun next(): MatchResult? = this@findNext.findNext(input, if (range.isEmpty()) range.start + 1 else range.endInclusive + 1)\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\nimport kotlin.contracts.contract\nimport kotlin.jvm.JvmName\n\n/**\n * Returns a copy of this string converted to upper case using the rules of the default locale.\n */\npublic expect fun String.toUpperCase(): String\n\n/**\n * Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun String.uppercase(): String\n\n/**\n * Returns a copy of this string converted to lower case using the rules of the default locale.\n */\npublic expect fun String.toLowerCase(): String\n\n/**\n * Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun String.lowercase(): String\n\n/**\n * Returns a copy of this string having its first letter titlecased using the rules of the default locale,\n * or the original string if it's empty or already starts with a title case letter.\n *\n * The title case of a character is usually the same as its upper case with several exceptions.\n * The particular list of characters with the special title case form depends on the underlying platform.\n *\n * @sample samples.text.Strings.capitalize\n */\npublic expect fun String.capitalize(): String\n\n/**\n * Returns a copy of this string having its first letter lowercased using the rules of the default locale,\n * or the original string if it's empty or already starts with a lower case letter.\n *\n * @sample samples.text.Strings.decapitalize\n */\npublic expect fun String.decapitalize(): String\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trim(predicate: (Char) -> Boolean): CharSequence {\n var startIndex = 0\n var endIndex = length - 1\n var startFound = false\n\n while (startIndex <= endIndex) {\n val index = if (!startFound) startIndex else endIndex\n val match = predicate(this[index])\n\n if (!startFound) {\n if (!match)\n startFound = true\n else\n startIndex += 1\n } else {\n if (!match)\n break\n else\n endIndex -= 1\n }\n }\n\n return subSequence(startIndex, endIndex + 1)\n}\n\n/**\n * Returns a string having leading and trailing characters matching the [predicate] removed.\n */\npublic inline fun String.trim(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trim(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trimStart(predicate: (Char) -> Boolean): CharSequence {\n for (index in this.indices)\n if (!predicate(this[index]))\n return subSequence(index, length)\n\n return \"\"\n}\n\n/**\n * Returns a string having leading characters matching the [predicate] removed.\n */\npublic inline fun String.trimStart(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trimStart(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having trailing characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trimEnd(predicate: (Char) -> Boolean): CharSequence {\n for (index in this.indices.reversed())\n if (!predicate(this[index]))\n return subSequence(0, index + 1)\n\n return \"\"\n}\n\n/**\n * Returns a string having trailing characters matching the [predicate] removed.\n */\npublic inline fun String.trimEnd(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trimEnd(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing characters from the [chars] array removed.\n */\npublic fun CharSequence.trim(vararg chars: Char): CharSequence = trim { it in chars }\n\n/**\n * Returns a string having leading and trailing characters from the [chars] array removed.\n */\npublic fun String.trim(vararg chars: Char): String = trim { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having leading characters from the [chars] array removed.\n */\npublic fun CharSequence.trimStart(vararg chars: Char): CharSequence = trimStart { it in chars }\n\n/**\n * Returns a string having leading characters from the [chars] array removed.\n */\npublic fun String.trimStart(vararg chars: Char): String = trimStart { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having trailing characters from the [chars] array removed.\n */\npublic fun CharSequence.trimEnd(vararg chars: Char): CharSequence = trimEnd { it in chars }\n\n/**\n * Returns a string having trailing characters from the [chars] array removed.\n */\npublic fun String.trimEnd(vararg chars: Char): String = trimEnd { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing whitespace removed.\n */\npublic fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace)\n\n/**\n * Returns a string having leading and trailing whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trim(): String = (this as CharSequence).trim().toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading whitespace removed.\n */\npublic fun CharSequence.trimStart(): CharSequence = trimStart(Char::isWhitespace)\n\n/**\n * Returns a string having leading whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trimStart(): String = (this as CharSequence).trimStart().toString()\n\n/**\n * Returns a sub sequence of this char sequence having trailing whitespace removed.\n */\npublic fun CharSequence.trimEnd(): CharSequence = trimEnd(Char::isWhitespace)\n\n/**\n * Returns a string having trailing whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trimEnd(): String = (this as CharSequence).trimEnd().toString()\n\n/**\n * Returns a char sequence with content of this char sequence padded at the beginning\n * to the specified [length] with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a char sequence of length at least [length] consisting of `this` char sequence prepended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padStart\n */\npublic fun CharSequence.padStart(length: Int, padChar: Char = ' '): CharSequence {\n if (length < 0)\n throw IllegalArgumentException(\"Desired length $length is less than zero.\")\n if (length <= this.length)\n return this.subSequence(0, this.length)\n\n val sb = StringBuilder(length)\n for (i in 1..(length - this.length))\n sb.append(padChar)\n sb.append(this)\n return sb\n}\n\n/**\n * Pads the string to the specified [length] at the beginning with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a string of length at least [length] consisting of `this` string prepended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padStart\n */\npublic fun String.padStart(length: Int, padChar: Char = ' '): String =\n (this as CharSequence).padStart(length, padChar).toString()\n\n/**\n * Returns a char sequence with content of this char sequence padded at the end\n * to the specified [length] with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a char sequence of length at least [length] consisting of `this` char sequence appended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padEnd\n */\npublic fun CharSequence.padEnd(length: Int, padChar: Char = ' '): CharSequence {\n if (length < 0)\n throw IllegalArgumentException(\"Desired length $length is less than zero.\")\n if (length <= this.length)\n return this.subSequence(0, this.length)\n\n val sb = StringBuilder(length)\n sb.append(this)\n for (i in 1..(length - this.length))\n sb.append(padChar)\n return sb\n}\n\n/**\n * Pads the string to the specified [length] at the end with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a string of length at least [length] consisting of `this` string appended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padEnd\n */\npublic fun String.padEnd(length: Int, padChar: Char = ' '): String =\n (this as CharSequence).padEnd(length, padChar).toString()\n\n/**\n * Returns `true` if this nullable char sequence is either `null` or empty.\n *\n * @sample samples.text.Strings.stringIsNullOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence?.isNullOrEmpty(): Boolean {\n contract {\n returns(false) implies (this@isNullOrEmpty != null)\n }\n\n return this == null || this.length == 0\n}\n\n/**\n * Returns `true` if this char sequence is empty (contains no characters).\n *\n * @sample samples.text.Strings.stringIsEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isEmpty(): Boolean = length == 0\n\n/**\n * Returns `true` if this char sequence is not empty.\n *\n * @sample samples.text.Strings.stringIsNotEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isNotEmpty(): Boolean = length > 0\n\n// implemented differently in JVM and JS\n//public fun String.isBlank(): Boolean = length() == 0 || all { it.isWhitespace() }\n\n\n/**\n * Returns `true` if this char sequence is not empty and contains some characters except of whitespace characters.\n *\n * @sample samples.text.Strings.stringIsNotBlank\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isNotBlank(): Boolean = !isBlank()\n\n/**\n * Returns `true` if this nullable char sequence is either `null` or empty or consists solely of whitespace characters.\n *\n * @sample samples.text.Strings.stringIsNullOrBlank\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence?.isNullOrBlank(): Boolean {\n contract {\n returns(false) implies (this@isNullOrBlank != null)\n }\n\n return this == null || this.isBlank()\n}\n\n/**\n * Iterator for characters of the given char sequence.\n */\npublic operator fun CharSequence.iterator(): CharIterator = object : CharIterator() {\n private var index = 0\n\n public override fun nextChar(): Char = get(index++)\n\n public override fun hasNext(): Boolean = index < length\n}\n\n/** Returns the string if it is not `null`, or the empty string otherwise. */\n@kotlin.internal.InlineOnly\npublic inline fun String?.orEmpty(): String = this ?: \"\"\n\n/**\n * Returns this char sequence if it's not empty\n * or the result of calling [defaultValue] function if the char sequence is empty.\n *\n * @sample samples.text.Strings.stringIfEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : CharSequence, C : R =\n if (isEmpty()) defaultValue() else this\n\n/**\n * Returns this char sequence if it is not empty and doesn't consist solely of whitespace characters,\n * or the result of calling [defaultValue] function otherwise.\n *\n * @sample samples.text.Strings.stringIfBlank\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <C, R> C.ifBlank(defaultValue: () -> R): R where C : CharSequence, C : R =\n if (isBlank()) defaultValue() else this\n\n/**\n * Returns the range of valid character indices for this char sequence.\n */\npublic val CharSequence.indices: IntRange\n get() = 0..length - 1\n\n/**\n * Returns the index of the last character in the char sequence or -1 if it is empty.\n */\npublic val CharSequence.lastIndex: Int\n get() = this.length - 1\n\n/**\n * Returns `true` if this CharSequence has Unicode surrogate pair at the specified [index].\n */\npublic fun CharSequence.hasSurrogatePairAt(index: Int): Boolean {\n return index in 0..length - 2\n && this[index].isHighSurrogate()\n && this[index + 1].isLowSurrogate()\n}\n\n/**\n * Returns a substring specified by the given [range] of indices.\n */\npublic fun String.substring(range: IntRange): String = substring(range.start, range.endInclusive + 1)\n\n/**\n * Returns a subsequence of this char sequence specified by the given [range] of indices.\n */\npublic fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)\n\n/**\n * Returns a subsequence of this char sequence.\n *\n * This extension is chosen only for invocation with old-named parameters.\n * Replace parameter names with the same as those of [CharSequence.subSequence].\n */\n@kotlin.internal.InlineOnly\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning\n@Deprecated(\"Use parameters named startIndex and endIndex.\", ReplaceWith(\"subSequence(startIndex = start, endIndex = end)\"))\npublic inline fun String.subSequence(start: Int, end: Int): CharSequence = subSequence(start, end)\n\n/**\n * Returns a substring of chars from a range of this char sequence starting at the [startIndex] and ending right before the [endIndex].\n *\n * @param startIndex the start index (inclusive).\n * @param endIndex the end index (exclusive). If not specified, the length of the char sequence is used.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString()\n\n/**\n * Returns a substring of chars at indices from the specified [range] of this char sequence.\n */\npublic fun CharSequence.substring(range: IntRange): String = subSequence(range.start, range.endInclusive + 1).toString()\n\n/**\n * Returns a substring before the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBefore(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring before the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBefore(delimiter: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring after the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfter(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + 1, length)\n}\n\n/**\n * Returns a substring after the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfter(delimiter: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + delimiter.length, length)\n}\n\n/**\n * Returns a substring before the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBeforeLast(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring before the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBeforeLast(delimiter: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring after the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfterLast(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + 1, length)\n}\n\n/**\n * Returns a substring after the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfterLast(delimiter: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + delimiter.length, length)\n}\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given range\n * is replaced with the [replacement] char sequence.\n * @param startIndex the index of the first character to be replaced.\n * @param endIndex the index of the first character after the replacement to keep in the string.\n */\n@OptIn(ExperimentalStdlibApi::class)\npublic fun CharSequence.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): CharSequence {\n if (endIndex < startIndex)\n throw IndexOutOfBoundsException(\"End index ($endIndex) is less than start index ($startIndex).\")\n val sb = StringBuilder()\n sb.appendRange(this, 0, startIndex)\n sb.append(replacement)\n sb.appendRange(this, endIndex, length)\n return sb\n}\n\n/**\n * Replaces the part of the string at the given range with the [replacement] char sequence.\n * @param startIndex the index of the first character to be replaced.\n * @param endIndex the index of the first character after the replacement to keep in the string.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): String =\n (this as CharSequence).replaceRange(startIndex, endIndex, replacement).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given [range]\n * is replaced with the [replacement] char sequence.\n *\n * The end index of the [range] is included in the part to be replaced.\n */\npublic fun CharSequence.replaceRange(range: IntRange, replacement: CharSequence): CharSequence =\n replaceRange(range.start, range.endInclusive + 1, replacement)\n\n/**\n * Replace the part of string at the given [range] with the [replacement] string.\n *\n * The end index of the [range] is included in the part to be replaced.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceRange(range: IntRange, replacement: CharSequence): String =\n (this as CharSequence).replaceRange(range, replacement).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given range is removed.\n *\n * @param startIndex the index of the first character to be removed.\n * @param endIndex the index of the first character after the removed part to keep in the string.\n *\n * [endIndex] is not included in the removed part.\n */\n@OptIn(ExperimentalStdlibApi::class)\npublic fun CharSequence.removeRange(startIndex: Int, endIndex: Int): CharSequence {\n if (endIndex < startIndex)\n throw IndexOutOfBoundsException(\"End index ($endIndex) is less than start index ($startIndex).\")\n\n if (endIndex == startIndex)\n return this.subSequence(0, length)\n\n val sb = StringBuilder(length - (endIndex - startIndex))\n sb.appendRange(this, 0, startIndex)\n sb.appendRange(this, endIndex, length)\n return sb\n}\n\n/**\n * Removes the part of a string at a given range.\n * @param startIndex the index of the first character to be removed.\n * @param endIndex the index of the first character after the removed part to keep in the string.\n *\n * [endIndex] is not included in the removed part.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.removeRange(startIndex: Int, endIndex: Int): String =\n (this as CharSequence).removeRange(startIndex, endIndex).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given [range] is removed.\n *\n * The end index of the [range] is included in the removed part.\n */\npublic fun CharSequence.removeRange(range: IntRange): CharSequence = removeRange(range.start, range.endInclusive + 1)\n\n/**\n * Removes the part of a string at the given [range].\n *\n * The end index of the [range] is included in the removed part.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.removeRange(range: IntRange): String =\n (this as CharSequence).removeRange(range).toString()\n\n/**\n * If this char sequence starts with the given [prefix], returns a new char sequence\n * with the prefix removed. Otherwise, returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removePrefix(prefix: CharSequence): CharSequence {\n if (startsWith(prefix)) {\n return subSequence(prefix.length, length)\n }\n return subSequence(0, length)\n}\n\n/**\n * If this string starts with the given [prefix], returns a copy of this string\n * with the prefix removed. Otherwise, returns this string.\n */\npublic fun String.removePrefix(prefix: CharSequence): String {\n if (startsWith(prefix)) {\n return substring(prefix.length)\n }\n return this\n}\n\n/**\n * If this char sequence ends with the given [suffix], returns a new char sequence\n * with the suffix removed. Otherwise, returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSuffix(suffix: CharSequence): CharSequence {\n if (endsWith(suffix)) {\n return subSequence(0, length - suffix.length)\n }\n return subSequence(0, length)\n}\n\n/**\n * If this string ends with the given [suffix], returns a copy of this string\n * with the suffix removed. Otherwise, returns this string.\n */\npublic fun String.removeSuffix(suffix: CharSequence): String {\n if (endsWith(suffix)) {\n return substring(0, length - suffix.length)\n }\n return this\n}\n\n/**\n * When this char sequence starts with the given [prefix] and ends with the given [suffix],\n * returns a new char sequence having both the given [prefix] and [suffix] removed.\n * Otherwise returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSurrounding(prefix: CharSequence, suffix: CharSequence): CharSequence {\n if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {\n return subSequence(prefix.length, length - suffix.length)\n }\n return subSequence(0, length)\n}\n\n/**\n * Removes from a string both the given [prefix] and [suffix] if and only if\n * it starts with the [prefix] and ends with the [suffix].\n * Otherwise returns this string unchanged.\n */\npublic fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {\n if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {\n return substring(prefix.length, length - suffix.length)\n }\n return this\n}\n\n/**\n * When this char sequence starts with and ends with the given [delimiter],\n * returns a new char sequence having this [delimiter] removed both from the start and end.\n * Otherwise returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSurrounding(delimiter: CharSequence): CharSequence = removeSurrounding(delimiter, delimiter)\n\n/**\n * Removes the given [delimiter] string from both the start and the end of this string\n * if and only if it starts with and ends with the [delimiter].\n * Otherwise returns this string unchanged.\n */\npublic fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)\n\n/**\n * Replace part of string before the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBefore(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string before the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBefore(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string after the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfter(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + 1, length, replacement)\n}\n\n/**\n * Replace part of string after the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfter(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + delimiter.length, length, replacement)\n}\n\n/**\n * Replace part of string after the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfterLast(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + delimiter.length, length, replacement)\n}\n\n/**\n * Replace part of string after the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfterLast(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + 1, length, replacement)\n}\n\n/**\n * Replace part of string before the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBeforeLast(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string before the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBeforeLast(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n\n// public fun String.replace(oldChar: Char, newChar: Char, ignoreCase: Boolean): String // JVM- and JS-specific\n// public fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean): String // JVM- and JS-specific\n\n/**\n * Returns a new string obtained by replacing each substring of this char sequence that matches the given regular expression\n * with the given [replacement].\n *\n * The [replacement] can consist of any combination of literal text and $-substitutions. To treat the replacement string\n * literally escape it with the [kotlin.text.Regex.Companion.escapeReplacement] method.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replace(regex: Regex, replacement: String): String = regex.replace(this, replacement)\n\n/**\n * Returns a new string obtained by replacing each substring of this char sequence that matches the given regular expression\n * with the result of the given function [transform] that takes [MatchResult] and returns a string to be used as a\n * replacement for that match.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence): String =\n regex.replace(this, transform)\n\n/**\n * Replaces the first occurrence of the given regular expression [regex] in this char sequence with specified [replacement] expression.\n *\n * @param replacement A replacement expression that can include substitutions. See [Regex.replaceFirst] for details.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replaceFirst(regex: Regex, replacement: String): String = regex.replaceFirst(this, replacement)\n\n/**\n * Returns a copy of this string having its first character replaced with the result of the specified [transform],\n * or the original string if it's empty.\n *\n * @param transform function that takes the first character and returns the result of the transform applied to the character.\n *\n * @sample samples.text.Strings.replaceFirstChar\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@JvmName(\"replaceFirstCharWithChar\")\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceFirstChar(transform: (Char) -> Char): String {\n return if (isNotEmpty()) transform(this[0]) + substring(1) else this\n}\n\n/**\n * Returns a copy of this string having its first character replaced with the result of the specified [transform],\n * or the original string if it's empty.\n *\n * @param transform function that takes the first character and returns the result of the transform applied to the character.\n *\n * @sample samples.text.Strings.replaceFirstChar\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@JvmName(\"replaceFirstCharWithCharSequence\")\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceFirstChar(transform: (Char) -> CharSequence): String {\n return if (isNotEmpty()) transform(this[0]).toString() + substring(1) else this\n}\n\n\n/**\n * Returns `true` if this char sequence matches the given regular expression.\n */\n@kotlin.internal.InlineOnly\npublic inline infix fun CharSequence.matches(regex: Regex): Boolean = regex.matches(this)\n\n/**\n * Implementation of [regionMatches] for CharSequences.\n * Invoked when it's already known that arguments are not Strings, so that no additional type checks are performed.\n */\ninternal fun CharSequence.regionMatchesImpl(thisOffset: Int, other: CharSequence, otherOffset: Int, length: Int, ignoreCase: Boolean): Boolean {\n if ((otherOffset < 0) || (thisOffset < 0) || (thisOffset > this.length - length) || (otherOffset > other.length - length)) {\n return false\n }\n\n for (index in 0 until length) {\n if (!this[thisOffset + index].equals(other[otherOffset + index], ignoreCase))\n return false\n }\n return true\n}\n\n/**\n * Returns `true` if this char sequence starts with the specified character.\n */\npublic fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = false): Boolean =\n this.length > 0 && this[0].equals(char, ignoreCase)\n\n/**\n * Returns `true` if this char sequence ends with the specified character.\n */\npublic fun CharSequence.endsWith(char: Char, ignoreCase: Boolean = false): Boolean =\n this.length > 0 && this[lastIndex].equals(char, ignoreCase)\n\n/**\n * Returns `true` if this char sequence starts with the specified prefix.\n */\npublic fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && prefix is String)\n return this.startsWith(prefix)\n else\n return regionMatchesImpl(0, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if a substring of this char sequence starting at the specified offset [startIndex] starts with the specified prefix.\n */\npublic fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && prefix is String)\n return this.startsWith(prefix, startIndex)\n else\n return regionMatchesImpl(startIndex, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if this char sequence ends with the specified suffix.\n */\npublic fun CharSequence.endsWith(suffix: CharSequence, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && suffix is String)\n return this.endsWith(suffix)\n else\n return regionMatchesImpl(length - suffix.length, suffix, 0, suffix.length, ignoreCase)\n}\n\n\n// common prefix and suffix\n\n/**\n * Returns the longest string `prefix` such that this char sequence and [other] char sequence both start with this prefix,\n * taking care not to split surrogate pairs.\n * If this and [other] have no common prefix, returns the empty string.\n\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @sample samples.text.Strings.commonPrefixWith\n */\npublic fun CharSequence.commonPrefixWith(other: CharSequence, ignoreCase: Boolean = false): String {\n val shortestLength = minOf(this.length, other.length)\n\n var i = 0\n while (i < shortestLength && this[i].equals(other[i], ignoreCase = ignoreCase)) {\n i++\n }\n if (this.hasSurrogatePairAt(i - 1) || other.hasSurrogatePairAt(i - 1)) {\n i--\n }\n return subSequence(0, i).toString()\n}\n\n/**\n * Returns the longest string `suffix` such that this char sequence and [other] char sequence both end with this suffix,\n * taking care not to split surrogate pairs.\n * If this and [other] have no common suffix, returns the empty string.\n\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @sample samples.text.Strings.commonSuffixWith\n */\npublic fun CharSequence.commonSuffixWith(other: CharSequence, ignoreCase: Boolean = false): String {\n val thisLength = this.length\n val otherLength = other.length\n val shortestLength = minOf(thisLength, otherLength)\n\n var i = 0\n while (i < shortestLength && this[thisLength - i - 1].equals(other[otherLength - i - 1], ignoreCase = ignoreCase)) {\n i++\n }\n if (this.hasSurrogatePairAt(thisLength - i - 1) || other.hasSurrogatePairAt(otherLength - i - 1)) {\n i--\n }\n return subSequence(thisLength - i, thisLength).toString()\n}\n\n\n// indexOfAny()\n\n/**\n * Finds the index of the first occurrence of any of the specified [chars] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the first occurrence of matched character from [chars] or -1 if none of [chars] are found.\n *\n */\npublic fun CharSequence.indexOfAny(chars: CharArray, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n if (!ignoreCase && chars.size == 1 && this is String) {\n val char = chars.single()\n return nativeIndexOf(char, startIndex)\n }\n\n for (index in startIndex.coerceAtLeast(0)..lastIndex) {\n val charAtIndex = get(index)\n if (chars.any { it.equals(charAtIndex, ignoreCase) })\n return index\n }\n return -1\n}\n\n/**\n * Finds the index of the last occurrence of any of the specified [chars] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the last occurrence of matched character from [chars] or -1 if none of [chars] are found.\n *\n */\npublic fun CharSequence.lastIndexOfAny(chars: CharArray, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n if (!ignoreCase && chars.size == 1 && this is String) {\n val char = chars.single()\n return nativeLastIndexOf(char, startIndex)\n }\n\n\n for (index in startIndex.coerceAtMost(lastIndex) downTo 0) {\n val charAtIndex = get(index)\n if (chars.any { it.equals(charAtIndex, ignoreCase) })\n return index\n }\n\n return -1\n}\n\n\nprivate fun CharSequence.indexOf(other: CharSequence, startIndex: Int, endIndex: Int, ignoreCase: Boolean, last: Boolean = false): Int {\n val indices = if (!last)\n startIndex.coerceAtLeast(0)..endIndex.coerceAtMost(length)\n else\n startIndex.coerceAtMost(lastIndex) downTo endIndex.coerceAtLeast(0)\n\n if (this is String && other is String) { // smart cast\n for (index in indices) {\n if (other.regionMatches(0, this, index, other.length, ignoreCase))\n return index\n }\n } else {\n for (index in indices) {\n if (other.regionMatchesImpl(0, this, index, other.length, ignoreCase))\n return index\n }\n }\n return -1\n}\n\nprivate fun CharSequence.findAnyOf(strings: Collection<String>, startIndex: Int, ignoreCase: Boolean, last: Boolean): Pair<Int, String>? {\n if (!ignoreCase && strings.size == 1) {\n val string = strings.single()\n val index = if (!last) indexOf(string, startIndex) else lastIndexOf(string, startIndex)\n return if (index < 0) null else index to string\n }\n\n val indices = if (!last) startIndex.coerceAtLeast(0)..length else startIndex.coerceAtMost(lastIndex) downTo 0\n\n if (this is String) {\n for (index in indices) {\n val matchingString = strings.firstOrNull { it.regionMatches(0, this, index, it.length, ignoreCase) }\n if (matchingString != null)\n return index to matchingString\n }\n } else {\n for (index in indices) {\n val matchingString = strings.firstOrNull { it.regionMatchesImpl(0, this, index, it.length, ignoreCase) }\n if (matchingString != null)\n return index to matchingString\n }\n }\n\n return null\n}\n\n/**\n * Finds the first occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return A pair of an index of the first occurrence of matched string from [strings] and the string matched\n * or `null` if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.findAnyOf(strings: Collection<String>, startIndex: Int = 0, ignoreCase: Boolean = false): Pair<Int, String>? =\n findAnyOf(strings, startIndex, ignoreCase, last = false)\n\n/**\n * Finds the last occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return A pair of an index of the last occurrence of matched string from [strings] and the string matched or `null` if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the end toward the beginning of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.findLastAnyOf(strings: Collection<String>, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Pair<Int, String>? =\n findAnyOf(strings, startIndex, ignoreCase, last = true)\n\n/**\n * Finds the index of the first occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the first occurrence of matched string from [strings] or -1 if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.indexOfAny(strings: Collection<String>, startIndex: Int = 0, ignoreCase: Boolean = false): Int =\n findAnyOf(strings, startIndex, ignoreCase, last = false)?.first ?: -1\n\n/**\n * Finds the index of the last occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the last occurrence of matched string from [strings] or -1 if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the end toward the beginning of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.lastIndexOfAny(strings: Collection<String>, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int =\n findAnyOf(strings, startIndex, ignoreCase, last = true)?.first ?: -1\n\n\n// indexOf\n\n/**\n * Returns the index within this string of the first occurrence of the specified character, starting from the specified [startIndex].\n *\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the first occurrence of [char] or -1 if none is found.\n */\npublic fun CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOfAny(charArrayOf(char), startIndex, ignoreCase)\n else\n nativeIndexOf(char, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the first occurrence of the specified [string],\n * starting from the specified [startIndex].\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the first occurrence of [string] or `-1` if none is found.\n * @sample samples.text.Strings.indexOf\n */\npublic fun CharSequence.indexOf(string: String, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOf(string, startIndex, length, ignoreCase)\n else\n nativeIndexOf(string, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the last occurrence of the specified character,\n * starting from the specified [startIndex].\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the last occurrence of [char] or -1 if none is found.\n */\npublic fun CharSequence.lastIndexOf(char: Char, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n lastIndexOfAny(charArrayOf(char), startIndex, ignoreCase)\n else\n nativeLastIndexOf(char, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the last occurrence of the specified [string],\n * starting from the specified [startIndex].\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the last occurrence of [string] or -1 if none is found.\n */\npublic fun CharSequence.lastIndexOf(string: String, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOf(string, startIndex, 0, ignoreCase, last = true)\n else\n nativeLastIndexOf(string, startIndex)\n}\n\n/**\n * Returns `true` if this char sequence contains the specified [other] sequence of characters as a substring.\n *\n * @param ignoreCase `true` to ignore character case when comparing strings. By default `false`.\n */\n@Suppress(\"INAPPLICABLE_OPERATOR_MODIFIER\")\npublic operator fun CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false): Boolean =\n if (other is String)\n indexOf(other, ignoreCase = ignoreCase) >= 0\n else\n indexOf(other, 0, length, ignoreCase) >= 0\n\n\n\n/**\n * Returns `true` if this char sequence contains the specified character [char].\n *\n * @param ignoreCase `true` to ignore character case when comparing characters. By default `false`.\n */\n@Suppress(\"INAPPLICABLE_OPERATOR_MODIFIER\")\npublic operator fun CharSequence.contains(char: Char, ignoreCase: Boolean = false): Boolean =\n indexOf(char, ignoreCase = ignoreCase) >= 0\n\n/**\n * Returns `true` if this char sequence contains at least one match of the specified regular expression [regex].\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharSequence.contains(regex: Regex): Boolean = regex.containsMatchIn(this)\n\n\n// rangesDelimitedBy\n\n\nprivate class DelimitedRangesSequence(\n private val input: CharSequence,\n private val startIndex: Int,\n private val limit: Int,\n private val getNextMatch: CharSequence.(currentIndex: Int) -> Pair<Int, Int>?\n) : Sequence<IntRange> {\n\n override fun iterator(): Iterator<IntRange> = object : Iterator<IntRange> {\n var nextState: Int = -1 // -1 for unknown, 0 for done, 1 for continue\n var currentStartIndex: Int = startIndex.coerceIn(0, input.length)\n var nextSearchIndex: Int = currentStartIndex\n var nextItem: IntRange? = null\n var counter: Int = 0\n\n private fun calcNext() {\n if (nextSearchIndex < 0) {\n nextState = 0\n nextItem = null\n } else {\n if (limit > 0 && ++counter >= limit || nextSearchIndex > input.length) {\n nextItem = currentStartIndex..input.lastIndex\n nextSearchIndex = -1\n } else {\n val match = input.getNextMatch(nextSearchIndex)\n if (match == null) {\n nextItem = currentStartIndex..input.lastIndex\n nextSearchIndex = -1\n } else {\n val (index, length) = match\n nextItem = currentStartIndex until index\n currentStartIndex = index + length\n nextSearchIndex = currentStartIndex + if (length == 0) 1 else 0\n }\n }\n nextState = 1\n }\n }\n\n override fun next(): IntRange {\n if (nextState == -1)\n calcNext()\n if (nextState == 0)\n throw NoSuchElementException()\n val result = nextItem as IntRange\n // Clean next to avoid keeping reference on yielded instance\n nextItem = null\n nextState = -1\n return result\n }\n\n override fun hasNext(): Boolean {\n if (nextState == -1)\n calcNext()\n return nextState == 1\n }\n }\n}\n\n/**\n * Returns a sequence of index ranges of substrings in this char sequence around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param startIndex The index to start searching delimiters from.\n * No range having its start value less than [startIndex] is returned.\n * [startIndex] is coerced to be non-negative and not greater than length of this string.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n */\nprivate fun CharSequence.rangesDelimitedBy(delimiters: CharArray, startIndex: Int = 0, ignoreCase: Boolean = false, limit: Int = 0): Sequence<IntRange> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" })\n\n return DelimitedRangesSequence(this, startIndex, limit, { currentIndex ->\n indexOfAny(delimiters, currentIndex, ignoreCase = ignoreCase).let { if (it < 0) null else it to 1 }\n })\n}\n\n\n/**\n * Returns a sequence of index ranges of substrings in this char sequence around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param startIndex The index to start searching delimiters from.\n * No range having its start value less than [startIndex] is returned.\n * [startIndex] is coerced to be non-negative and not greater than length of this string.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [delimiters]\n * that matches this string at that position.\n */\nprivate fun CharSequence.rangesDelimitedBy(delimiters: Array<out String>, startIndex: Int = 0, ignoreCase: Boolean = false, limit: Int = 0): Sequence<IntRange> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" } )\n val delimitersList = delimiters.asList()\n\n return DelimitedRangesSequence(this, startIndex, limit, { currentIndex -> findAnyOf(delimitersList, currentIndex, ignoreCase = ignoreCase, last = false)?.let { it.first to it.second.length } })\n\n}\n\n\n// split\n\n/**\n * Splits this char sequence to a sequence of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [delimiters]\n * that matches this string at that position.\n */\npublic fun CharSequence.splitToSequence(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): Sequence<String> =\n rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).map { substring(it) }\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and matches at each position the first element in [delimiters]\n * that is equal to a delimiter in this instance at that position.\n */\npublic fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String> {\n if (delimiters.size == 1) {\n val delimiter = delimiters[0]\n if (!delimiter.isEmpty()) {\n return split(delimiter, ignoreCase, limit)\n }\n }\n\n return rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).asIterable().map { substring(it) }\n}\n\n/**\n * Splits this char sequence to a sequence of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\npublic fun CharSequence.splitToSequence(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): Sequence<String> =\n rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).map { substring(it) }\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\npublic fun CharSequence.split(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): List<String> {\n if (delimiters.size == 1) {\n return split(delimiters[0].toString(), ignoreCase, limit)\n }\n\n return rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).asIterable().map { substring(it) }\n}\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiter].\n * This is specialized version of split which receives single non-empty delimiter and offers better performance\n *\n * @param delimiter String used as delimiter\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\nprivate fun CharSequence.split(delimiter: String, ignoreCase: Boolean, limit: Int): List<String> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" })\n\n var currentOffset = 0\n var nextIndex = indexOf(delimiter, currentOffset, ignoreCase)\n if (nextIndex == -1 || limit == 1) {\n return listOf(this.toString())\n }\n\n val isLimited = limit > 0\n val result = ArrayList<String>(if (isLimited) limit.coerceAtMost(10) else 10)\n do {\n result.add(substring(currentOffset, nextIndex))\n currentOffset = nextIndex + delimiter.length\n // Do not search for next occurrence if we're reaching limit\n if (isLimited && result.size == limit - 1) break\n nextIndex = indexOf(delimiter, currentOffset, ignoreCase)\n } while (nextIndex != -1)\n\n result.add(substring(currentOffset, length))\n return result\n}\n\n/**\n * Splits this char sequence around matches of the given regular expression.\n *\n * @param limit Non-negative value specifying the maximum number of substrings to return.\n * Zero by default means no limit is set.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.split(regex: Regex, limit: Int = 0): List<String> = regex.split(this, limit)\n\n/**\n * Splits this char sequence to a sequence of lines delimited by any of the following character sequences: CRLF, LF or CR.\n *\n * The lines returned do not include terminating line separators.\n */\npublic fun CharSequence.lineSequence(): Sequence<String> = splitToSequence(\"\\r\\n\", \"\\n\", \"\\r\")\n\n/**\n * Splits this char sequence to a list of lines delimited by any of the following character sequences: CRLF, LF or CR.\n *\n * The lines returned do not include terminating line separators.\n */\npublic fun CharSequence.lines(): List<String> = lineSequence().toList()\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.comparisons\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.js.*\n\n/**\n * Returns the greater of two values.\n * \n * If values are equal, returns the first one.\n */\n@SinceKotlin(\"1.1\")\npublic actual fun <T : Comparable<T>> maxOf(a: T, b: T): T {\n return if (a >= b) a else b\n}\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Byte, b: Byte): Byte {\n return Math.max(a.toInt(), b.toInt()).unsafeCast<Byte>()\n}\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Short, b: Short): Short {\n return Math.max(a.toInt(), b.toInt()).unsafeCast<Short>()\n}\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Int, b: Int): Int {\n return Math.max(a, b)\n}\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.1\")\n@Suppress(\"DEPRECATION_ERROR\", \"NOTHING_TO_INLINE\")\npublic actual inline fun maxOf(a: Long, b: Long): Long {\n return if (a >= b) a else b\n}\n\n/**\n * Returns the greater of two values.\n * \n * If either value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Float, b: Float): Float {\n return Math.max(a, b)\n}\n\n/**\n * Returns the greater of two values.\n * \n * If either value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Double, b: Double): Double {\n return Math.max(a, b)\n}\n\n/**\n * Returns the greater of three values.\n * \n * If there are multiple equal maximal values, returns the first of them.\n */\n@SinceKotlin(\"1.1\")\npublic actual fun <T : Comparable<T>> maxOf(a: T, b: T, c: T): T {\n return maxOf(a, maxOf(b, c))\n}\n\n/**\n * Returns the greater of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Byte, b: Byte, c: Byte): Byte {\n return Math.max(a.toInt(), b.toInt(), c.toInt()).unsafeCast<Byte>()\n}\n\n/**\n * Returns the greater of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Short, b: Short, c: Short): Short {\n return Math.max(a.toInt(), b.toInt(), c.toInt()).unsafeCast<Short>()\n}\n\n/**\n * Returns the greater of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Int, b: Int, c: Int): Int {\n return Math.max(a, b, c)\n}\n\n/**\n * Returns the greater of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic actual inline fun maxOf(a: Long, b: Long, c: Long): Long {\n return maxOf(a, maxOf(b, c))\n}\n\n/**\n * Returns the greater of three values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Float, b: Float, c: Float): Float {\n return Math.max(a, b, c)\n}\n\n/**\n * Returns the greater of three values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun maxOf(a: Double, b: Double, c: Double): Double {\n return Math.max(a, b, c)\n}\n\n/**\n * Returns the greater of the given values.\n * \n * If there are multiple equal maximal values, returns the first of them.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun <T : Comparable<T>> maxOf(a: T, vararg other: T): T {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Byte, vararg other: Byte): Byte {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Short, vararg other: Short): Short {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Int, vararg other: Int): Int {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Long, vararg other: Long): Long {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Float, vararg other: Float): Float {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the greater of the given values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun maxOf(a: Double, vararg other: Double): Double {\n var max = a\n for (e in other) max = maxOf(max, e)\n return max\n}\n\n/**\n * Returns the smaller of two values.\n * \n * If values are equal, returns the first one.\n */\n@SinceKotlin(\"1.1\")\npublic actual fun <T : Comparable<T>> minOf(a: T, b: T): T {\n return if (a <= b) a else b\n}\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Byte, b: Byte): Byte {\n return Math.min(a.toInt(), b.toInt()).unsafeCast<Byte>()\n}\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Short, b: Short): Short {\n return Math.min(a.toInt(), b.toInt()).unsafeCast<Short>()\n}\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Int, b: Int): Int {\n return Math.min(a, b)\n}\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.1\")\n@Suppress(\"DEPRECATION_ERROR\", \"NOTHING_TO_INLINE\")\npublic actual inline fun minOf(a: Long, b: Long): Long {\n return if (a <= b) a else b\n}\n\n/**\n * Returns the smaller of two values.\n * \n * If either value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Float, b: Float): Float {\n return Math.min(a, b)\n}\n\n/**\n * Returns the smaller of two values.\n * \n * If either value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Double, b: Double): Double {\n return Math.min(a, b)\n}\n\n/**\n * Returns the smaller of three values.\n * \n * If there are multiple equal minimal values, returns the first of them.\n */\n@SinceKotlin(\"1.1\")\npublic actual fun <T : Comparable<T>> minOf(a: T, b: T, c: T): T {\n return minOf(a, minOf(b, c))\n}\n\n/**\n * Returns the smaller of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Byte, b: Byte, c: Byte): Byte {\n return Math.min(a.toInt(), b.toInt(), c.toInt()).unsafeCast<Byte>()\n}\n\n/**\n * Returns the smaller of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Short, b: Short, c: Short): Short {\n return Math.min(a.toInt(), b.toInt(), c.toInt()).unsafeCast<Short>()\n}\n\n/**\n * Returns the smaller of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Int, b: Int, c: Int): Int {\n return Math.min(a, b, c)\n}\n\n/**\n * Returns the smaller of three values.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic actual inline fun minOf(a: Long, b: Long, c: Long): Long {\n return minOf(a, minOf(b, c))\n}\n\n/**\n * Returns the smaller of three values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Float, b: Float, c: Float): Float {\n return Math.min(a, b, c)\n}\n\n/**\n * Returns the smaller of three values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\n@Suppress(\"DEPRECATION_ERROR\")\npublic actual inline fun minOf(a: Double, b: Double, c: Double): Double {\n return Math.min(a, b, c)\n}\n\n/**\n * Returns the smaller of the given values.\n * \n * If there are multiple equal minimal values, returns the first of them.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun <T : Comparable<T>> minOf(a: T, vararg other: T): T {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Byte, vararg other: Byte): Byte {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Short, vararg other: Short): Short {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Int, vararg other: Int): Int {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Long, vararg other: Long): Long {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Float, vararg other: Float): Float {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n/**\n * Returns the smaller of the given values.\n * \n * If any value is `NaN`, returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun minOf(a: Double, vararg other: Double): Double {\n var min = a\n for (e in other) min = minOf(min, e)\n return min\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\nimport kotlin.js.RegExp\n\n@kotlin.internal.InlineOnly\ninternal actual inline fun String.nativeIndexOf(ch: Char, fromIndex: Int): Int = nativeIndexOf(ch.toString(), fromIndex)\n\n@kotlin.internal.InlineOnly\ninternal actual inline fun String.nativeLastIndexOf(ch: Char, fromIndex: Int): Int = nativeLastIndexOf(ch.toString(), fromIndex)\n\n/**\n * Returns `true` if this string starts with the specified prefix.\n */\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.startsWith(prefix: String, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase)\n return nativeStartsWith(prefix, 0)\n else\n return regionMatches(0, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if a substring of this string starting at the specified offset [startIndex] starts with the specified prefix.\n */\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.startsWith(prefix: String, startIndex: Int, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase)\n return nativeStartsWith(prefix, startIndex)\n else\n return regionMatches(startIndex, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if this string ends with the specified suffix.\n */\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.endsWith(suffix: String, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase)\n return nativeEndsWith(suffix)\n else\n return regionMatches(length - suffix.length, suffix, 0, suffix.length, ignoreCase)\n}\n\n\npublic fun String.matches(regex: String): Boolean {\n val result = this.match(regex)\n return result != null && result.size != 0\n}\n\npublic actual fun CharSequence.isBlank(): Boolean = length == 0 || (if (this is String) this else this.toString()).matches(\"^[\\\\s\\\\xA0]+$\")\n\n@OptIn(ExperimentalStdlibApi::class)\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String?.equals(other: String?, ignoreCase: Boolean = false): Boolean =\n if (this == null)\n other == null\n else if (!ignoreCase)\n this == other\n else\n other != null && this.lowercase() == other.lowercase()\n\n\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun CharSequence.regionMatches(thisOffset: Int, other: CharSequence, otherOffset: Int, length: Int, ignoreCase: Boolean = false): Boolean =\n regionMatchesImpl(thisOffset, other, otherOffset, length, ignoreCase)\n\n\n/**\n * Returns a copy of this string having its first letter titlecased using the rules of the default locale,\n * or the original string if it's empty or already starts with a title case letter.\n *\n * The title case of a character is usually the same as its upper case with several exceptions.\n * The particular list of characters with the special title case form depends on the underlying platform.\n *\n * @sample samples.text.Strings.capitalize\n */\npublic actual fun String.capitalize(): String {\n return if (isNotEmpty()) substring(0, 1).toUpperCase() + substring(1) else this\n}\n\n/**\n * Returns a copy of this string having its first letter lowercased using the rules of the default locale,\n * or the original string if it's empty or already starts with a lower case letter.\n *\n * @sample samples.text.Strings.decapitalize\n */\npublic actual fun String.decapitalize(): String {\n return if (isNotEmpty()) substring(0, 1).toLowerCase() + substring(1) else this\n}\n\n/**\n * Returns a string containing this char sequence repeated [n] times.\n * @throws [IllegalArgumentException] when n < 0.\n */\npublic actual fun CharSequence.repeat(n: Int): String {\n require(n >= 0) { \"Count 'n' must be non-negative, but was $n.\" }\n return when (n) {\n 0 -> \"\"\n 1 -> this.toString()\n else -> {\n var result = \"\"\n if (!isEmpty()) {\n var s = this.toString()\n var count = n\n while (true) {\n if ((count and 1) == 1) {\n result += s\n }\n count = count ushr 1\n if (count == 0) {\n break\n }\n s += s\n }\n }\n return result\n }\n }\n}\n\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean = false): String =\n nativeReplace(RegExp(Regex.escape(oldValue), if (ignoreCase) \"gi\" else \"g\"), Regex.escapeReplacement(newValue))\n\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.replace(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String =\n nativeReplace(RegExp(Regex.escape(oldChar.toString()), if (ignoreCase) \"gi\" else \"g\"), newChar.toString())\n\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.replaceFirst(oldValue: String, newValue: String, ignoreCase: Boolean = false): String =\n nativeReplace(RegExp(Regex.escape(oldValue), if (ignoreCase) \"i\" else \"\"), Regex.escapeReplacement(newValue))\n\n@Suppress(\"ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS\")\npublic actual fun String.replaceFirst(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String =\n nativeReplace(RegExp(Regex.escape(oldChar.toString()), if (ignoreCase) \"i\" else \"\"), newChar.toString())\n","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n/** Returns the negative [size] if [throwOnMalformed] is false, throws [CharacterCodingException] otherwise. */\n@OptIn(ExperimentalStdlibApi::class)\nprivate fun malformed(size: Int, index: Int, throwOnMalformed: Boolean): Int {\n if (throwOnMalformed) throw CharacterCodingException(\"Malformed sequence starting at ${index - 1}\")\n return -size\n}\n\n/**\n * Returns code point corresponding to UTF-16 surrogate pair,\n * where the first of the pair is the [high] and the second is in the [string] at the [index].\n * Returns zero if the pair is malformed and [throwOnMalformed] is false.\n *\n * @throws CharacterCodingException if the pair is malformed and [throwOnMalformed] is true.\n */\nprivate fun codePointFromSurrogate(string: String, high: Int, index: Int, endIndex: Int, throwOnMalformed: Boolean): Int {\n if (high !in 0xD800..0xDBFF || index >= endIndex) {\n return malformed(0, index, throwOnMalformed)\n }\n val low = string[index].toInt()\n if (low !in 0xDC00..0xDFFF) {\n return malformed(0, index, throwOnMalformed)\n }\n return 0x10000 + ((high and 0x3FF) shl 10) or (low and 0x3FF)\n}\n\n/**\n * Returns code point corresponding to UTF-8 sequence of two bytes,\n * where the first byte of the sequence is the [byte1] and the second byte is in the [bytes] array at the [index].\n * Returns zero if the sequence is malformed and [throwOnMalformed] is false.\n *\n * @throws CharacterCodingException if the sequence of two bytes is malformed and [throwOnMalformed] is true.\n */\nprivate fun codePointFrom2(bytes: ByteArray, byte1: Int, index: Int, endIndex: Int, throwOnMalformed: Boolean): Int {\n if (byte1 and 0x1E == 0 || index >= endIndex) {\n return malformed(0, index, throwOnMalformed)\n }\n val byte2 = bytes[index].toInt()\n if (byte2 and 0xC0 != 0x80) {\n return malformed(0, index, throwOnMalformed)\n }\n return (byte1 shl 6) xor byte2 xor 0xF80\n}\n\n/**\n * Returns code point corresponding to UTF-8 sequence of three bytes,\n * where the first byte of the sequence is the [byte1] and the others are in the [bytes] array starting from the [index].\n * Returns a non-positive value indicating number of bytes from [bytes] included in malformed sequence\n * if the sequence is malformed and [throwOnMalformed] is false.\n *\n * @throws CharacterCodingException if the sequence of three bytes is malformed and [throwOnMalformed] is true.\n */\nprivate fun codePointFrom3(bytes: ByteArray, byte1: Int, index: Int, endIndex: Int, throwOnMalformed: Boolean): Int {\n if (index >= endIndex) {\n return malformed(0, index, throwOnMalformed)\n }\n\n val byte2 = bytes[index].toInt()\n if (byte1 and 0xF == 0) {\n if (byte2 and 0xE0 != 0xA0) {\n // Non-shortest form\n return malformed(0, index, throwOnMalformed)\n }\n } else if (byte1 and 0xF == 0xD) {\n if (byte2 and 0xE0 != 0x80) {\n // Surrogate code point\n return malformed(0, index, throwOnMalformed)\n }\n } else if (byte2 and 0xC0 != 0x80) {\n return malformed(0, index, throwOnMalformed)\n }\n\n if (index + 1 == endIndex) {\n return malformed(1, index, throwOnMalformed)\n }\n val byte3 = bytes[index + 1].toInt()\n if (byte3 and 0xC0 != 0x80) {\n return malformed(1, index, throwOnMalformed)\n }\n\n return (byte1 shl 12) xor (byte2 shl 6) xor byte3 xor -0x1E080\n}\n\n/**\n * Returns code point corresponding to UTF-8 sequence of four bytes,\n * where the first byte of the sequence is the [byte1] and the others are in the [bytes] array starting from the [index].\n * Returns a non-positive value indicating number of bytes from [bytes] included in malformed sequence\n * if the sequence is malformed and [throwOnMalformed] is false.\n *\n * @throws CharacterCodingException if the sequence of four bytes is malformed and [throwOnMalformed] is true.\n */\nprivate fun codePointFrom4(bytes: ByteArray, byte1: Int, index: Int, endIndex: Int, throwOnMalformed: Boolean): Int {\n if (index >= endIndex) {\n malformed(0, index, throwOnMalformed)\n }\n\n val byte2 = bytes[index].toInt()\n if (byte1 and 0xF == 0x0) {\n if (byte2 and 0xF0 <= 0x80) {\n // Non-shortest form\n return malformed(0, index, throwOnMalformed)\n }\n } else if (byte1 and 0xF == 0x4) {\n if (byte2 and 0xF0 != 0x80) {\n // Out of Unicode code points domain (larger than U+10FFFF)\n return malformed(0, index, throwOnMalformed)\n }\n } else if (byte1 and 0xF > 0x4) {\n return malformed(0, index, throwOnMalformed)\n } else if (byte2 and 0xC0 != 0x80) {\n return malformed(0, index, throwOnMalformed)\n }\n\n if (index + 1 == endIndex) {\n return malformed(1, index, throwOnMalformed)\n }\n val byte3 = bytes[index + 1].toInt()\n if (byte3 and 0xC0 != 0x80) {\n return malformed(1, index, throwOnMalformed)\n }\n\n if (index + 2 == endIndex) {\n return malformed(2, index, throwOnMalformed)\n }\n val byte4 = bytes[index + 2].toInt()\n if (byte4 and 0xC0 != 0x80) {\n return malformed(2, index, throwOnMalformed)\n }\n return (byte1 shl 18) xor (byte2 shl 12) xor (byte3 shl 6) xor byte4 xor 0x381F80\n}\n\n/**\n * Maximum number of bytes needed to encode a single char.\n *\n * Code points in `0..0x7F` are encoded in a single byte.\n * Code points in `0x80..0x7FF` are encoded in two bytes.\n * Code points in `0x800..0xD7FF` or in `0xE000..0xFFFF` are encoded in three bytes.\n * Surrogate code points in `0xD800..0xDFFF` are not Unicode scalar values, therefore aren't encoded.\n * Code points in `0x10000..0x10FFFF` are represented by a pair of surrogate `Char`s and are encoded in four bytes.\n */\nprivate const val MAX_BYTES_PER_CHAR = 3\n\n/**\n * The byte sequence a malformed UTF-16 char sequence is replaced by.\n */\nprivate val REPLACEMENT_BYTE_SEQUENCE: ByteArray = byteArrayOf(0xEF.toByte(), 0xBF.toByte(), 0xBD.toByte())\n\n/**\n * Encodes the [string] using UTF-8 and returns the resulting [ByteArray].\n *\n * @param string the string to encode.\n * @param startIndex the start offset (inclusive) of the substring to encode.\n * @param endIndex the end offset (exclusive) of the substring to encode.\n * @param throwOnMalformed whether to throw on malformed char sequence or replace by the [REPLACEMENT_BYTE_SEQUENCE].\n *\n * @throws CharacterCodingException if the char sequence is malformed and [throwOnMalformed] is true.\n */\ninternal fun encodeUtf8(string: String, startIndex: Int, endIndex: Int, throwOnMalformed: Boolean): ByteArray {\n require(startIndex >= 0 && endIndex <= string.length && startIndex <= endIndex)\n\n val bytes = ByteArray((endIndex - startIndex) * MAX_BYTES_PER_CHAR)\n var byteIndex = 0\n var charIndex = startIndex\n\n while (charIndex < endIndex) {\n val code = string[charIndex++].toInt()\n when {\n code < 0x80 ->\n bytes[byteIndex++] = code.toByte()\n code < 0x800 -> {\n bytes[byteIndex++] = ((code shr 6) or 0xC0).toByte()\n bytes[byteIndex++] = ((code and 0x3F) or 0x80).toByte()\n }\n code < 0xD800 || code >= 0xE000 -> {\n bytes[byteIndex++] = ((code shr 12) or 0xE0).toByte()\n bytes[byteIndex++] = (((code shr 6) and 0x3F) or 0x80).toByte()\n bytes[byteIndex++] = ((code and 0x3F) or 0x80).toByte()\n }\n else -> { // Surrogate char value\n val codePoint = codePointFromSurrogate(string, code, charIndex, endIndex, throwOnMalformed)\n if (codePoint <= 0) {\n bytes[byteIndex++] = REPLACEMENT_BYTE_SEQUENCE[0]\n bytes[byteIndex++] = REPLACEMENT_BYTE_SEQUENCE[1]\n bytes[byteIndex++] = REPLACEMENT_BYTE_SEQUENCE[2]\n } else {\n bytes[byteIndex++] = ((codePoint shr 18) or 0xF0).toByte()\n bytes[byteIndex++] = (((codePoint shr 12) and 0x3F) or 0x80).toByte()\n bytes[byteIndex++] = (((codePoint shr 6) and 0x3F) or 0x80).toByte()\n bytes[byteIndex++] = ((codePoint and 0x3F) or 0x80).toByte()\n charIndex++\n }\n }\n }\n }\n\n return if (bytes.size == byteIndex) bytes else bytes.copyOf(byteIndex)\n}\n\n/**\n * The character a malformed UTF-8 byte sequence is replaced by.\n */\nprivate const val REPLACEMENT_CHAR = '\\uFFFD'\n\n/**\n * Decodes the UTF-8 [bytes] array and returns the resulting [String].\n *\n * @param bytes the byte array to decode.\n * @param startIndex the start offset (inclusive) of the array to be decoded.\n * @param endIndex the end offset (exclusive) of the array to be encoded.\n * @param throwOnMalformed whether to throw on malformed byte sequence or replace by the [REPLACEMENT_CHAR].\n *\n * @throws CharacterCodingException if the array is malformed UTF-8 byte sequence and [throwOnMalformed] is true.\n */\ninternal fun decodeUtf8(bytes: ByteArray, startIndex: Int, endIndex: Int, throwOnMalformed: Boolean): String {\n require(startIndex >= 0 && endIndex <= bytes.size && startIndex <= endIndex)\n\n var byteIndex = startIndex\n val stringBuilder = StringBuilder()\n\n while (byteIndex < endIndex) {\n val byte = bytes[byteIndex++].toInt()\n when {\n byte >= 0 ->\n stringBuilder.append(byte.toChar())\n byte shr 5 == -2 -> {\n val code = codePointFrom2(bytes, byte, byteIndex, endIndex, throwOnMalformed)\n if (code <= 0) {\n stringBuilder.append(REPLACEMENT_CHAR)\n byteIndex += -code\n } else {\n stringBuilder.append(code.toChar())\n byteIndex += 1\n }\n }\n byte shr 4 == -2 -> {\n val code = codePointFrom3(bytes, byte, byteIndex, endIndex, throwOnMalformed)\n if (code <= 0) {\n stringBuilder.append(REPLACEMENT_CHAR)\n byteIndex += -code\n } else {\n stringBuilder.append(code.toChar())\n byteIndex += 2\n }\n }\n byte shr 3 == -2 -> {\n val code = codePointFrom4(bytes, byte, byteIndex, endIndex, throwOnMalformed)\n if (code <= 0) {\n stringBuilder.append(REPLACEMENT_CHAR)\n byteIndex += -code\n } else {\n val high = (code - 0x10000) shr 10 or 0xD800\n val low = (code and 0x3FF) or 0xDC00\n stringBuilder.append(high.toChar())\n stringBuilder.append(low.toChar())\n byteIndex += 3\n }\n }\n else -> {\n malformed(0, byteIndex, throwOnMalformed)\n stringBuilder.append(REPLACEMENT_CHAR)\n }\n }\n }\n\n return stringBuilder.toString()\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic actual enum class DurationUnit(internal val scale: Double) {\n /**\n * Time unit representing one nanosecond, which is 1/1000 of a microsecond.\n */\n NANOSECONDS(1e0),\n /**\n * Time unit representing one microsecond, which is 1/1000 of a millisecond.\n */\n MICROSECONDS(1e3),\n /**\n * Time unit representing one millisecond, which is 1/1000 of a second.\n */\n MILLISECONDS(1e6),\n /**\n * Time unit representing one second.\n */\n SECONDS(1e9),\n /**\n * Time unit representing one minute.\n */\n MINUTES(60e9),\n /**\n * Time unit representing one hour.\n */\n HOURS(3600e9),\n /**\n * Time unit representing one day, which is always equal to 24 hours.\n */\n DAYS(86400e9);\n}\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal actual fun convertDurationUnit(value: Double, sourceUnit: DurationUnit, targetUnit: DurationUnit): Double {\n val sourceCompareTarget = sourceUnit.scale.compareTo(targetUnit.scale)\n return when {\n sourceCompareTarget > 0 -> value * (sourceUnit.scale / targetUnit.scale)\n sourceCompareTarget < 0 -> value / (targetUnit.scale / sourceUnit.scale)\n else -> value\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\nimport org.w3c.performance.GlobalPerformance\nimport org.w3c.performance.Performance\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal actual object MonotonicTimeSource : TimeSource {\n\n private val actualSource: TimeSource = run {\n val isNode: Boolean = js(\"typeof process !== 'undefined' && process.versions && !!process.versions.node\")\n\n if (isNode)\n HrTimeSource(js(\"process\").unsafeCast<Process>())\n else\n js(\"self\").unsafeCast<GlobalPerformance?>()?.performance?.let(::PerformanceTimeSource)\n ?: DateNowTimeSource\n\n }\n\n override fun markNow(): TimeMark = actualSource.markNow()\n}\n\ninternal external interface Process {\n fun hrtime(time: Array<Double> = definedExternally): Array<Double>\n}\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal class HrTimeSource(val process: Process) : TimeSource {\n\n override fun markNow(): TimeMark = object : TimeMark() {\n val startedAt = process.hrtime()\n override fun elapsedNow(): Duration =\n process.hrtime(startedAt).let { (seconds, nanos) -> seconds.seconds + nanos.nanoseconds }\n }\n\n override fun toString(): String = \"TimeSource(process.hrtime())\"\n}\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal class PerformanceTimeSource(val performance: Performance) : AbstractDoubleTimeSource(unit = DurationUnit.MILLISECONDS) {\n override fun read(): Double = performance.now()\n override fun toString(): String = \"TimeSource(self.performance.now())\"\n}\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal object DateNowTimeSource : AbstractDoubleTimeSource(unit = DurationUnit.MILLISECONDS) {\n override fun read(): Double = kotlin.js.Date.now()\n override fun toString(): String = \"TimeSource(Date.now())\"\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\nimport kotlin.js.json\nimport kotlin.math.*\n\ninternal actual fun formatToExactDecimals(value: Double, decimals: Int): String {\n val rounded = if (decimals == 0) {\n value\n } else {\n val pow = 10.0.pow(decimals)\n @Suppress(\"DEPRECATION\", \"DEPRECATION_ERROR\")\n kotlin.js.Math.round(abs(value) * pow) / pow * sign(value)\n }\n return rounded.asDynamic().toFixed(decimals).unsafeCast<String>()\n}\n\ninternal actual fun formatUpToDecimals(value: Double, decimals: Int): String {\n return value.asDynamic().toLocaleString(\"en-us\", json(\"maximumFractionDigits\" to decimals)).unsafeCast<String>()\n}\n\ninternal actual fun formatScientific(value: Double): String {\n return value.asDynamic().toExponential(2).unsafeCast<String>()\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlinx.dom\n\nimport org.w3c.dom.*\nimport kotlin.contracts.*\n\n/**\n * Creates a new element with the specified [name].\n *\n * The element is initialized with the specified [init] function.\n */\n@SinceKotlin(\"1.4\")\npublic fun Document.createElement(name: String, init: Element.() -> Unit): Element {\n contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) }\n return createElement(name).apply(init)\n}\n\n/**\n * Appends a newly created element with the specified [name] to this element.\n *\n * The element is initialized with the specified [init] function.\n */\n@SinceKotlin(\"1.4\")\npublic fun Element.appendElement(name: String, init: Element.() -> Unit): Element {\n contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) }\n return ownerDocument!!.createElement(name, init).also { appendChild(it) }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\npackage kotlin.collections\n\nimport kotlin.js.JsName\n\n/**\n * Provides a skeletal implementation of the read-only [Collection] interface.\n *\n * @param E the type of elements contained in the collection. The collection is covariant in its element type.\n */\n@SinceKotlin(\"1.1\")\npublic abstract class AbstractCollection<out E> protected constructor() : Collection<E> {\n abstract override val size: Int\n abstract override fun iterator(): Iterator<E>\n\n override fun contains(element: @UnsafeVariance E): Boolean = any { it == element }\n\n override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean =\n elements.all { contains(it) } // use when js will support bound refs: elements.all(this::contains)\n\n override fun isEmpty(): Boolean = size == 0\n\n override fun toString(): String = joinToString(\", \", \"[\", \"]\") {\n if (it === this) \"(this Collection)\" else it.toString()\n }\n\n /**\n * Returns new array of type `Array<Any?>` with the elements of this collection.\n */\n @JsName(\"toArray\")\n protected open fun toArray(): Array<Any?> = copyToArrayImpl(this)\n\n /**\n * Fills the provided [array] or creates new array of the same type\n * and fills it with the elements of this collection.\n */\n protected open fun <T> toArray(array: Array<T>): Array<T> = copyToArrayImpl(this, array)\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT AbstractList\n * Copyright 2007 Google Inc.\n*/\n\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the read-only [List] interface.\n *\n * This class is intended to help implementing read-only lists so it doesn't support concurrent modification tracking.\n *\n * @param E the type of elements contained in the list. The list is covariant in its element type.\n */\n@SinceKotlin(\"1.1\")\npublic abstract class AbstractList<out E> protected constructor() : AbstractCollection<E>(), List<E> {\n abstract override val size: Int\n abstract override fun get(index: Int): E\n\n override fun iterator(): Iterator<E> = IteratorImpl()\n\n override fun indexOf(element: @UnsafeVariance E): Int = indexOfFirst { it == element }\n\n override fun lastIndexOf(element: @UnsafeVariance E): Int = indexOfLast { it == element }\n\n override fun listIterator(): ListIterator<E> = ListIteratorImpl(0)\n\n override fun listIterator(index: Int): ListIterator<E> = ListIteratorImpl(index)\n\n override fun subList(fromIndex: Int, toIndex: Int): List<E> = SubList(this, fromIndex, toIndex)\n\n private class SubList<out E>(private val list: AbstractList<E>, private val fromIndex: Int, toIndex: Int) : AbstractList<E>(), RandomAccess {\n private var _size: Int = 0\n\n init {\n checkRangeIndexes(fromIndex, toIndex, list.size)\n this._size = toIndex - fromIndex\n }\n\n override fun get(index: Int): E {\n checkElementIndex(index, _size)\n\n return list[fromIndex + index]\n }\n\n override val size: Int get() = _size\n }\n\n /**\n * Compares this list with other list instance with the ordered structural equality.\n *\n * @return true, if [other] instance is a [List] of the same size, which contains the same elements in the same order.\n */\n override fun equals(other: Any?): Boolean {\n if (other === this) return true\n if (other !is List<*>) return false\n\n return orderedEquals(this, other)\n }\n\n /**\n * Returns the hash code value for this list.\n */\n override fun hashCode(): Int = orderedHashCode(this)\n\n private open inner class IteratorImpl : Iterator<E> {\n /** the index of the item that will be returned on the next call to [next]`()` */\n protected var index = 0\n\n override fun hasNext(): Boolean = index < size\n\n override fun next(): E {\n if (!hasNext()) throw NoSuchElementException()\n return get(index++)\n }\n }\n\n /**\n * Implementation of [ListIterator] for abstract lists.\n */\n private open inner class ListIteratorImpl(index: Int) : IteratorImpl(), ListIterator<E> {\n\n init {\n checkPositionIndex(index, this@AbstractList.size)\n this.index = index\n }\n\n override fun hasPrevious(): Boolean = index > 0\n\n override fun nextIndex(): Int = index\n\n override fun previous(): E {\n if (!hasPrevious()) throw NoSuchElementException()\n return get(--index)\n }\n\n override fun previousIndex(): Int = index - 1\n }\n\n internal companion object {\n internal fun checkElementIndex(index: Int, size: Int) {\n if (index < 0 || index >= size) {\n throw IndexOutOfBoundsException(\"index: $index, size: $size\")\n }\n }\n\n internal fun checkPositionIndex(index: Int, size: Int) {\n if (index < 0 || index > size) {\n throw IndexOutOfBoundsException(\"index: $index, size: $size\")\n }\n }\n\n internal fun checkRangeIndexes(fromIndex: Int, toIndex: Int, size: Int) {\n if (fromIndex < 0 || toIndex > size) {\n throw IndexOutOfBoundsException(\"fromIndex: $fromIndex, toIndex: $toIndex, size: $size\")\n }\n if (fromIndex > toIndex) {\n throw IllegalArgumentException(\"fromIndex: $fromIndex > toIndex: $toIndex\")\n }\n }\n\n internal fun checkBoundsIndexes(startIndex: Int, endIndex: Int, size: Int) {\n if (startIndex < 0 || endIndex > size) {\n throw IndexOutOfBoundsException(\"startIndex: $startIndex, endIndex: $endIndex, size: $size\")\n }\n if (startIndex > endIndex) {\n throw IllegalArgumentException(\"startIndex: $startIndex > endIndex: $endIndex\")\n }\n }\n\n internal fun orderedHashCode(c: Collection<*>): Int {\n var hashCode = 1\n for (e in c) {\n hashCode = 31 * hashCode + (e?.hashCode() ?: 0)\n }\n return hashCode\n }\n\n internal fun orderedEquals(c: Collection<*>, other: Collection<*>): Boolean {\n if (c.size != other.size) return false\n\n val otherIterator = other.iterator()\n for (elem in c) {\n val elemOther = otherIterator.next()\n if (elem != elemOther) {\n return false\n }\n }\n return true\n }\n }\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n/*\n * Based on GWT AbstractMap\n * Copyright 2007 Google Inc.\n */\n\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the read-only [Map] interface.\n *\n * The implementor is required to implement [entries] property, which should return read-only set of map entries.\n *\n * @param K the type of map keys. The map is invariant in its key type.\n * @param V the type of map values. The map is covariant in its value type.\n */\n@SinceKotlin(\"1.1\")\npublic abstract class AbstractMap<K, out V> protected constructor() : Map<K, V> {\n\n override fun containsKey(key: K): Boolean {\n return implFindEntry(key) != null\n }\n\n override fun containsValue(value: @UnsafeVariance V): Boolean = entries.any { it.value == value }\n\n internal fun containsEntry(entry: Map.Entry<*, *>?): Boolean {\n // since entry comes from @UnsafeVariance parameters it can be virtually anything\n if (entry !is Map.Entry<*, *>) return false\n val key = entry.key\n val value = entry.value\n val ourValue = get(key)\n\n if (value != ourValue) {\n return false\n }\n\n // Perhaps it was null and we don't contain the key?\n if (ourValue == null && !containsKey(key)) {\n return false\n }\n\n return true\n }\n\n\n /**\n * Compares this map with other instance with the ordered structural equality.\n *\n * @return true, if [other] instance is a [Map] of the same size, all entries of which are contained in the [entries] set of this map.\n */\n override fun equals(other: Any?): Boolean {\n if (other === this) return true\n if (other !is Map<*, *>) return false\n if (size != other.size) return false\n\n return other.entries.all { containsEntry(it) }\n }\n\n override operator fun get(key: K): V? = implFindEntry(key)?.value\n\n\n /**\n * Returns the hash code value for this map.\n *\n * It is the same as the hashCode of [entries] set.\n */\n override fun hashCode(): Int = entries.hashCode()\n\n override fun isEmpty(): Boolean = size == 0\n override val size: Int get() = entries.size\n\n /**\n * Returns a read-only [Set] of all keys in this map.\n *\n * Accessing this property first time creates a keys view from [entries].\n * All subsequent accesses just return the created instance.\n */\n override val keys: Set<K>\n get() {\n if (_keys == null) {\n _keys = object : AbstractSet<K>() {\n override operator fun contains(element: K): Boolean = containsKey(element)\n\n override operator fun iterator(): Iterator<K> {\n val entryIterator = entries.iterator()\n return object : Iterator<K> {\n override fun hasNext(): Boolean = entryIterator.hasNext()\n override fun next(): K = entryIterator.next().key\n }\n }\n\n override val size: Int get() = this@AbstractMap.size\n }\n }\n return _keys!!\n }\n\n @kotlin.jvm.Volatile\n private var _keys: Set<K>? = null\n\n\n override fun toString(): String = entries.joinToString(\", \", \"{\", \"}\") { toString(it) }\n\n private fun toString(entry: Map.Entry<K, V>): String = toString(entry.key) + \"=\" + toString(entry.value)\n\n private fun toString(o: Any?): String = if (o === this) \"(this Map)\" else o.toString()\n\n /**\n * Returns a read-only [Collection] of all values in this map.\n *\n * Accessing this property first time creates a values view from [entries].\n * All subsequent accesses just return the created instance.\n */\n override val values: Collection<V>\n get() {\n if (_values == null) {\n _values = object : AbstractCollection<V>() {\n override operator fun contains(element: @UnsafeVariance V): Boolean = containsValue(element)\n\n override operator fun iterator(): Iterator<V> {\n val entryIterator = entries.iterator()\n return object : Iterator<V> {\n override fun hasNext(): Boolean = entryIterator.hasNext()\n override fun next(): V = entryIterator.next().value\n }\n }\n\n override val size: Int get() = this@AbstractMap.size\n }\n }\n return _values!!\n }\n\n @kotlin.jvm.Volatile\n private var _values: Collection<V>? = null\n\n private fun implFindEntry(key: K): Map.Entry<K, V>? = entries.firstOrNull { it.key == key }\n\n internal companion object {\n\n internal fun entryHashCode(e: Map.Entry<*, *>): Int = with(e) { (key?.hashCode() ?: 0) xor (value?.hashCode() ?: 0) }\n internal fun entryToString(e: Map.Entry<*, *>): String = with(e) { \"$key=$value\" }\n internal fun entryEquals(e: Map.Entry<*, *>, other: Any?): Boolean {\n if (other !is Map.Entry<*, *>) return false\n return e.key == other.key && e.value == other.value\n }\n }\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\npackage kotlin.collections\n\n/**\n * Provides a skeletal implementation of the read-only [Set] interface.\n *\n * This class is intended to help implementing read-only sets so it doesn't support concurrent modification tracking.\n *\n * @param E the type of elements contained in the set. The set is covariant in its element type.\n */\n@SinceKotlin(\"1.1\")\npublic abstract class AbstractSet<out E> protected constructor() : AbstractCollection<E>(), Set<E> {\n\n /**\n * Compares this set with other set instance with the unordered structural equality.\n *\n * @return true, if [other] instance is a [Set] of the same size, all elements of which are contained in this set.\n */\n override fun equals(other: Any?): Boolean {\n if (other === this) return true\n if (other !is Set<*>) return false\n return setEquals(this, other)\n }\n\n /**\n * Returns the hash code value for this set.\n */\n override fun hashCode(): Int = unorderedHashCode(this)\n\n internal companion object {\n internal fun unorderedHashCode(c: Collection<*>): Int {\n var hashCode = 0\n for (element in c) {\n hashCode += (element?.hashCode() ?: 0)\n }\n return hashCode\n }\n\n internal fun setEquals(c: Set<*>, other: Set<*>): Boolean {\n if (c.size != other.size) return false\n return c.containsAll(other)\n }\n }\n\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n/**\n * Resizable-array implementation of the deque data structure.\n *\n * The name deque is short for \"double ended queue\" and is usually pronounced \"deck\".\n *\n * The collection provide methods for convenient access to the both ends.\n * It also implements [MutableList] interface and supports efficient get/set operations by index.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic class ArrayDeque<E> : AbstractMutableList<E> {\n private var head: Int = 0\n private var elementData: Array<Any?>\n\n override var size: Int = 0\n private set\n\n /**\n * Constructs an empty deque with specified [initialCapacity], or throws [IllegalArgumentException] if [initialCapacity] is negative.\n */\n public constructor(initialCapacity: Int) {\n elementData = when {\n initialCapacity == 0 -> emptyElementData\n initialCapacity > 0 -> arrayOfNulls(initialCapacity)\n else -> throw IllegalArgumentException(\"Illegal Capacity: $initialCapacity\")\n }\n }\n\n /**\n * Constructs an empty deque.\n */\n public constructor() {\n elementData = emptyElementData\n }\n\n /**\n * Constructs a deque that contains the same elements as the specified [elements] collection in the same order.\n */\n public constructor(elements: Collection<E>) {\n elementData = elements.toTypedArray()\n size = elementData.size\n if (elementData.isEmpty()) elementData = emptyElementData\n }\n\n /**\n * Ensures that the capacity of this deque is at least equal to the specified [minCapacity].\n *\n * If the current capacity is less than the [minCapacity], a new backing storage is allocated with greater capacity.\n * Otherwise, this method takes no action and simply returns.\n */\n private fun ensureCapacity(minCapacity: Int) {\n if (minCapacity < 0) throw IllegalStateException(\"Deque is too big.\") // overflow\n if (minCapacity <= elementData.size) return\n if (elementData === emptyElementData) {\n elementData = arrayOfNulls(minCapacity.coerceAtLeast(defaultMinCapacity))\n return\n }\n\n val newCapacity = newCapacity(elementData.size, minCapacity)\n copyElements(newCapacity)\n }\n\n /**\n * Creates a new array with the specified [newCapacity] size and copies elements in the [elementData] array to it.\n */\n private fun copyElements(newCapacity: Int) {\n val newElements = arrayOfNulls<Any?>(newCapacity)\n elementData.copyInto(newElements, 0, head, elementData.size)\n elementData.copyInto(newElements, elementData.size - head, 0, head)\n head = 0\n elementData = newElements\n }\n\n @kotlin.internal.InlineOnly\n private inline fun internalGet(internalIndex: Int): E {\n @Suppress(\"UNCHECKED_CAST\")\n return elementData[internalIndex] as E\n }\n\n private fun positiveMod(index: Int): Int = if (index >= elementData.size) index - elementData.size else index\n\n private fun negativeMod(index: Int): Int = if (index < 0) index + elementData.size else index\n\n @kotlin.internal.InlineOnly\n private inline fun internalIndex(index: Int): Int = positiveMod(head + index)\n\n private fun incremented(index: Int): Int = if (index == elementData.lastIndex) 0 else index + 1\n\n private fun decremented(index: Int): Int = if (index == 0) elementData.lastIndex else index - 1\n\n override fun isEmpty(): Boolean = size == 0\n\n /**\n * Returns the first element, or throws [NoSuchElementException] if this deque is empty.\n */\n public fun first(): E = if (isEmpty()) throw NoSuchElementException(\"ArrayDeque is empty.\") else internalGet(head)\n\n /**\n * Returns the first element, or `null` if this deque is empty.\n */\n public fun firstOrNull(): E? = if (isEmpty()) null else internalGet(head)\n\n /**\n * Returns the last element, or throws [NoSuchElementException] if this deque is empty.\n */\n public fun last(): E = if (isEmpty()) throw NoSuchElementException(\"ArrayDeque is empty.\") else internalGet(internalIndex(lastIndex))\n\n /**\n * Returns the last element, or `null` if this deque is empty.\n */\n public fun lastOrNull(): E? = if (isEmpty()) null else internalGet(internalIndex(lastIndex))\n\n /**\n * Prepends the specified [element] to this deque.\n */\n public fun addFirst(element: E) {\n ensureCapacity(size + 1)\n\n head = decremented(head)\n elementData[head] = element\n size += 1\n }\n\n /**\n * Appends the specified [element] to this deque.\n */\n public fun addLast(element: E) {\n ensureCapacity(size + 1)\n\n elementData[internalIndex(size)] = element\n size += 1\n }\n\n /**\n * Removes the first element from this deque and returns that removed element, or throws [NoSuchElementException] if this deque is empty.\n */\n public fun removeFirst(): E {\n if (isEmpty()) throw NoSuchElementException(\"ArrayDeque is empty.\")\n\n val element = internalGet(head)\n elementData[head] = null\n head = incremented(head)\n size -= 1\n return element\n }\n\n /**\n * Removes the first element from this deque and returns that removed element, or returns `null` if this deque is empty.\n */\n public fun removeFirstOrNull(): E? = if (isEmpty()) null else removeFirst()\n\n /**\n * Removes the last element from this deque and returns that removed element, or throws [NoSuchElementException] if this deque is empty.\n */\n public fun removeLast(): E {\n if (isEmpty()) throw NoSuchElementException(\"ArrayDeque is empty.\")\n\n val internalLastIndex = internalIndex(lastIndex)\n val element = internalGet(internalLastIndex)\n elementData[internalLastIndex] = null\n size -= 1\n return element\n }\n\n /**\n * Removes the last element from this deque and returns that removed element, or returns `null` if this deque is empty.\n */\n public fun removeLastOrNull(): E? = if (isEmpty()) null else removeLast()\n\n // MutableList, MutableCollection\n public override fun add(element: E): Boolean {\n addLast(element)\n return true\n }\n\n public override fun add(index: Int, element: E) {\n AbstractList.checkPositionIndex(index, size)\n\n if (index == size) {\n addLast(element)\n return\n } else if (index == 0) {\n addFirst(element)\n return\n }\n\n ensureCapacity(size + 1)\n\n // Elements in circular array lay in 2 ways:\n // 1. `head` is less than `tail`: [#, #, e1, e2, e3, #]\n // 2. `head` is greater than `tail`: [e3, #, #, #, e1, e2]\n // where head is the index of the first element in the circular array,\n // and tail is the index following the last element.\n //\n // At this point the insertion index is not equal to head or tail.\n // Also the circular array can store at least one more element.\n //\n // Depending on where the given element must be inserted the preceding or the succeeding\n // elements will be shifted to make room for the element to be inserted.\n //\n // In case the preceding elements are shifted:\n // * if the insertion index is greater than the head (regardless of circular array form)\n // -> shift the preceding elements\n // * otherwise, the circular array has (2) form and the insertion index is less than tail\n // -> shift all elements in the back of the array\n // -> shift preceding elements in the front of the array\n // In case the succeeding elements are shifted:\n // * if the insertion index is less than the tail (regardless of circular array form)\n // -> shift the succeeding elements\n // * otherwise, the circular array has (2) form and the insertion index is greater than head\n // -> shift all elements in the front of the array\n // -> shift succeeding elements in the back of the array\n\n val internalIndex = internalIndex(index)\n\n if (index < (size + 1) shr 1) {\n // closer to the first element -> shift preceding elements\n val decrementedInternalIndex = decremented(internalIndex)\n val decrementedHead = decremented(head)\n\n if (decrementedInternalIndex >= head) {\n elementData[decrementedHead] = elementData[head] // head can be zero\n elementData.copyInto(elementData, head, head + 1, decrementedInternalIndex + 1)\n } else { // head > tail\n elementData.copyInto(elementData, head - 1, head, elementData.size) // head can't be zero\n elementData[elementData.size - 1] = elementData[0]\n elementData.copyInto(elementData, 0, 1, decrementedInternalIndex + 1)\n }\n\n elementData[decrementedInternalIndex] = element\n head = decrementedHead\n } else {\n // closer to the last element -> shift succeeding elements\n val tail = internalIndex(size)\n\n if (internalIndex < tail) {\n elementData.copyInto(elementData, internalIndex + 1, internalIndex, tail)\n } else { // head > tail\n elementData.copyInto(elementData, 1, 0, tail)\n elementData[0] = elementData[elementData.size - 1]\n elementData.copyInto(elementData, internalIndex + 1, internalIndex, elementData.size - 1)\n }\n\n elementData[internalIndex] = element\n }\n size += 1\n }\n\n private fun copyCollectionElements(internalIndex: Int, elements: Collection<E>) {\n val iterator = elements.iterator()\n\n for (index in internalIndex until elementData.size) {\n if (!iterator.hasNext()) break\n elementData[index] = iterator.next()\n }\n for (index in 0 until head) {\n if (!iterator.hasNext()) break\n elementData[index] = iterator.next()\n }\n\n size += elements.size\n }\n\n public override fun addAll(elements: Collection<E>): Boolean {\n if (elements.isEmpty()) return false\n ensureCapacity(this.size + elements.size)\n copyCollectionElements(internalIndex(size), elements)\n return true\n }\n\n public override fun addAll(index: Int, elements: Collection<E>): Boolean {\n AbstractList.checkPositionIndex(index, size)\n\n if (elements.isEmpty()) {\n return false\n } else if (index == size) {\n return addAll(elements)\n }\n\n ensureCapacity(this.size + elements.size)\n\n val tail = internalIndex(size)\n val internalIndex = internalIndex(index)\n val elementsSize = elements.size\n\n if (index < (size + 1) shr 1) {\n // closer to the first element -> shift preceding elements\n\n var shiftedHead = head - elementsSize\n\n if (internalIndex >= head) {\n if (shiftedHead >= 0) {\n elementData.copyInto(elementData, shiftedHead, head, internalIndex)\n } else { // head < tail, insertion leads to head >= tail\n shiftedHead += elementData.size\n val elementsToShift = internalIndex - head\n val shiftToBack = elementData.size - shiftedHead\n\n if (shiftToBack >= elementsToShift) {\n elementData.copyInto(elementData, shiftedHead, head, internalIndex)\n } else {\n elementData.copyInto(elementData, shiftedHead, head, head + shiftToBack)\n elementData.copyInto(elementData, 0, head + shiftToBack, internalIndex)\n }\n }\n } else { // head > tail, internalIndex < tail\n elementData.copyInto(elementData, shiftedHead, head, elementData.size)\n if (elementsSize >= internalIndex) {\n elementData.copyInto(elementData, elementData.size - elementsSize, 0, internalIndex)\n } else {\n elementData.copyInto(elementData, elementData.size - elementsSize, 0, elementsSize)\n elementData.copyInto(elementData, 0, elementsSize, internalIndex)\n }\n }\n head = shiftedHead\n copyCollectionElements(negativeMod(internalIndex - elementsSize), elements)\n } else {\n // closer to the last element -> shift succeeding elements\n\n val shiftedInternalIndex = internalIndex + elementsSize\n\n if (internalIndex < tail) {\n if (tail + elementsSize <= elementData.size) {\n elementData.copyInto(elementData, shiftedInternalIndex, internalIndex, tail)\n } else { // head < tail, insertion leads to head >= tail\n if (shiftedInternalIndex >= elementData.size) {\n elementData.copyInto(elementData, shiftedInternalIndex - elementData.size, internalIndex, tail)\n } else {\n val shiftToFront = tail + elementsSize - elementData.size\n elementData.copyInto(elementData, 0, tail - shiftToFront, tail)\n elementData.copyInto(elementData, shiftedInternalIndex, internalIndex, tail - shiftToFront)\n }\n }\n } else { // head > tail, internalIndex > head\n elementData.copyInto(elementData, elementsSize, 0, tail)\n if (shiftedInternalIndex >= elementData.size) {\n elementData.copyInto(elementData, shiftedInternalIndex - elementData.size, internalIndex, elementData.size)\n } else {\n elementData.copyInto(elementData, 0, elementData.size - elementsSize, elementData.size)\n elementData.copyInto(elementData, shiftedInternalIndex, internalIndex, elementData.size - elementsSize)\n }\n }\n copyCollectionElements(internalIndex, elements)\n }\n\n return true\n }\n\n public override fun get(index: Int): E {\n AbstractList.checkElementIndex(index, size)\n\n return internalGet(internalIndex(index))\n }\n\n public override fun set(index: Int, element: E): E {\n AbstractList.checkElementIndex(index, size)\n\n val internalIndex = internalIndex(index)\n val oldElement = internalGet(internalIndex)\n elementData[internalIndex] = element\n\n return oldElement\n }\n\n public override fun contains(element: E): Boolean = indexOf(element) != -1\n\n public override fun indexOf(element: E): Int {\n val tail = internalIndex(size)\n\n if (head < tail) {\n for (index in head until tail) {\n if (element == elementData[index]) return index - head\n }\n } else if (head >= tail) {\n for (index in head until elementData.size) {\n if (element == elementData[index]) return index - head\n }\n for (index in 0 until tail) {\n if (element == elementData[index]) return index + elementData.size - head\n }\n }\n\n return -1\n }\n\n public override fun lastIndexOf(element: E): Int {\n val tail = internalIndex(size)\n\n if (head < tail) {\n for (index in tail - 1 downTo head) {\n if (element == elementData[index]) return index - head\n }\n } else if (head > tail) {\n for (index in tail - 1 downTo 0) {\n if (element == elementData[index]) return index + elementData.size - head\n }\n for (index in elementData.lastIndex downTo head) {\n if (element == elementData[index]) return index - head\n }\n }\n\n return -1\n }\n\n public override fun remove(element: E): Boolean {\n val index = indexOf(element)\n if (index == -1) return false\n removeAt(index)\n return true\n }\n\n public override fun removeAt(index: Int): E {\n AbstractList.checkElementIndex(index, size)\n\n if (index == lastIndex) {\n return removeLast()\n } else if (index == 0) {\n return removeFirst()\n }\n\n val internalIndex = internalIndex(index)\n val element = internalGet(internalIndex)\n\n if (index < size shr 1) {\n // closer to the first element -> shift preceding elements\n if (internalIndex >= head) {\n elementData.copyInto(elementData, head + 1, head, internalIndex)\n } else { // head > tail, internalIndex < head\n elementData.copyInto(elementData, 1, 0, internalIndex)\n elementData[0] = elementData[elementData.size - 1]\n elementData.copyInto(elementData, head + 1, head, elementData.size - 1)\n }\n\n elementData[head] = null\n head = incremented(head)\n } else {\n // closer to the last element -> shift succeeding elements\n val internalLastIndex = internalIndex(lastIndex)\n\n if (internalIndex <= internalLastIndex) {\n elementData.copyInto(elementData, internalIndex, internalIndex + 1, internalLastIndex + 1)\n } else { // head > tail, internalIndex > head\n elementData.copyInto(elementData, internalIndex, internalIndex + 1, elementData.size)\n elementData[elementData.size - 1] = elementData[0]\n elementData.copyInto(elementData, 0, 1, internalLastIndex + 1)\n }\n\n elementData[internalLastIndex] = null\n }\n size -= 1\n\n return element\n }\n\n public override fun removeAll(elements: Collection<E>): Boolean = filterInPlace { !elements.contains(it) }\n\n public override fun retainAll(elements: Collection<E>): Boolean = filterInPlace { elements.contains(it) }\n\n private inline fun filterInPlace(predicate: (E) -> Boolean): Boolean {\n if (this.isEmpty() || elementData.isEmpty())\n return false\n\n val tail = internalIndex(size)\n var newTail = head\n var modified = false\n\n if (head < tail) {\n for (index in head until tail) {\n val element = elementData[index]\n\n @Suppress(\"UNCHECKED_CAST\")\n if (predicate(element as E))\n elementData[newTail++] = element\n else\n modified = true\n }\n\n elementData.fill(null, newTail, tail)\n\n } else {\n for (index in head until elementData.size) {\n val element = elementData[index]\n elementData[index] = null\n\n @Suppress(\"UNCHECKED_CAST\")\n if (predicate(element as E))\n elementData[newTail++] = element\n else\n modified = true\n }\n\n newTail = positiveMod(newTail)\n\n for (index in 0 until tail) {\n val element = elementData[index]\n elementData[index] = null\n\n @Suppress(\"UNCHECKED_CAST\")\n if (predicate(element as E)) {\n elementData[newTail] = element\n newTail = incremented(newTail)\n } else {\n modified = true\n }\n }\n }\n if (modified)\n size = negativeMod(newTail - head)\n\n return modified\n }\n\n public override fun clear() {\n val tail = internalIndex(size)\n if (head < tail) {\n elementData.fill(null, head, tail)\n } else if (isNotEmpty()) {\n elementData.fill(null, head, elementData.size)\n elementData.fill(null, 0, tail)\n }\n head = 0\n size = 0\n }\n\n internal companion object {\n private val emptyElementData = emptyArray<Any?>()\n private const val maxArraySize = Int.MAX_VALUE - 8\n private const val defaultMinCapacity = 10\n\n internal fun newCapacity(oldCapacity: Int, minCapacity: Int): Int {\n // overflow-conscious\n var newCapacity = oldCapacity + (oldCapacity shr 1)\n if (newCapacity - minCapacity < 0)\n newCapacity = minCapacity\n if (newCapacity - maxArraySize > 0)\n newCapacity = if (minCapacity > maxArraySize) Int.MAX_VALUE else maxArraySize\n return newCapacity\n }\n }\n\n // For testing only\n internal fun internalStructure(structure: (head: Int, elements: Array<Any?>) -> Unit) {\n val tail = internalIndex(size)\n\n if (isEmpty()) {\n structure(head, emptyArray())\n return\n }\n\n val elements = arrayOfNulls<Any?>(size)\n if (head < tail) {\n elementData.copyInto(elements, startIndex = head, endIndex = tail)\n structure(head, elements)\n } else {\n elementData.copyInto(elements, startIndex = head)\n elementData.copyInto(elements, elementData.size - head, startIndex = 0, endIndex = tail)\n structure(head - elementData.size, elements)\n }\n }\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.collections\n\n/**\n * Data class representing a value from a collection or sequence, along with its index in that collection or sequence.\n *\n * @property value the underlying value.\n * @property index the index of the value in the collection or sequence.\n */\npublic data class IndexedValue<out T>(public val index: Int, public val value: T)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\n\n/**\n * Returns the given iterator itself. This allows to use an instance of iterator in a `for` loop.\n * @sample samples.collections.Iterators.iterator\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Iterator<T>.iterator(): Iterator<T> = this\n\n/**\n * Returns an [Iterator] that wraps each element produced by the original iterator\n * into an [IndexedValue] containing the index of that element and the element itself.\n *\n * @sample samples.collections.Iterators.withIndexIterator\n */\npublic fun <T> Iterator<T>.withIndex(): Iterator<IndexedValue<T>> = IndexingIterator(this)\n\n/**\n * Performs the given [operation] on each element of this [Iterator].\n * @sample samples.collections.Iterators.forEachIterator\n */\npublic inline fun <T> Iterator<T>.forEach(operation: (T) -> Unit): Unit {\n for (element in this) operation(element)\n}\n\n/**\n * Iterator transforming original `iterator` into iterator of [IndexedValue], counting index from zero.\n */\ninternal class IndexingIterator<out T>(private val iterator: Iterator<T>) : Iterator<IndexedValue<T>> {\n private var index = 0\n final override fun hasNext(): Boolean = iterator.hasNext()\n final override fun next(): IndexedValue<T> = IndexedValue(checkIndexOverflow(index++), iterator.next())\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"MapsKt\")\n\npackage kotlin.collections\n\n/**\n * Returns the value for the given key, or the implicit default value for this map.\n * By default no implicit value is provided for maps and a [NoSuchElementException] is thrown.\n * To create a map with implicit default value use [withDefault] method.\n *\n * @throws NoSuchElementException when the map doesn't contain a value for the specified key and no implicit default was provided for that map.\n */\n@kotlin.jvm.JvmName(\"getOrImplicitDefaultNullable\")\n@PublishedApi\ninternal fun <K, V> Map<K, V>.getOrImplicitDefault(key: K): V {\n if (this is MapWithDefault)\n return this.getOrImplicitDefault(key)\n\n return getOrElseNullable(key, { throw NoSuchElementException(\"Key $key is missing in the map.\") })\n}\n\n/**\n * Returns a wrapper of this read-only map, having the implicit default value provided with the specified function [defaultValue].\n *\n * This implicit default value is used when the original map doesn't contain a value for the key specified\n * and a value is obtained with [Map.getValue] function, for example when properties are delegated to the map.\n *\n * When this map already has an implicit default value provided with a former call to [withDefault], it is being replaced by this call.\n */\npublic fun <K, V> Map<K, V>.withDefault(defaultValue: (key: K) -> V): Map<K, V> =\n when (this) {\n is MapWithDefault -> this.map.withDefault(defaultValue)\n else -> MapWithDefaultImpl(this, defaultValue)\n }\n\n/**\n * Returns a wrapper of this mutable map, having the implicit default value provided with the specified function [defaultValue].\n *\n * This implicit default value is used when the original map doesn't contain a value for the key specified\n * and a value is obtained with [Map.getValue] function, for example when properties are delegated to the map.\n *\n * When this map already has an implicit default value provided with a former call to [withDefault], it is being replaced by this call.\n */\n@kotlin.jvm.JvmName(\"withDefaultMutable\")\npublic fun <K, V> MutableMap<K, V>.withDefault(defaultValue: (key: K) -> V): MutableMap<K, V> =\n when (this) {\n is MutableMapWithDefault -> this.map.withDefault(defaultValue)\n else -> MutableMapWithDefaultImpl(this, defaultValue)\n }\n\n\nprivate interface MapWithDefault<K, out V> : Map<K, V> {\n public val map: Map<K, V>\n public fun getOrImplicitDefault(key: K): V\n}\n\nprivate interface MutableMapWithDefault<K, V> : MutableMap<K, V>, MapWithDefault<K, V> {\n public override val map: MutableMap<K, V>\n}\n\n\nprivate class MapWithDefaultImpl<K, out V>(public override val map: Map<K, V>, private val default: (key: K) -> V) : MapWithDefault<K, V> {\n override fun equals(other: Any?): Boolean = map.equals(other)\n override fun hashCode(): Int = map.hashCode()\n override fun toString(): String = map.toString()\n override val size: Int get() = map.size\n override fun isEmpty(): Boolean = map.isEmpty()\n override fun containsKey(key: K): Boolean = map.containsKey(key)\n override fun containsValue(value: @UnsafeVariance V): Boolean = map.containsValue(value)\n override fun get(key: K): V? = map.get(key)\n override val keys: Set<K> get() = map.keys\n override val values: Collection<V> get() = map.values\n override val entries: Set<Map.Entry<K, V>> get() = map.entries\n\n override fun getOrImplicitDefault(key: K): V = map.getOrElseNullable(key, { default(key) })\n}\n\nprivate class MutableMapWithDefaultImpl<K, V>(public override val map: MutableMap<K, V>, private val default: (key: K) -> V) : MutableMapWithDefault<K, V> {\n override fun equals(other: Any?): Boolean = map.equals(other)\n override fun hashCode(): Int = map.hashCode()\n override fun toString(): String = map.toString()\n override val size: Int get() = map.size\n override fun isEmpty(): Boolean = map.isEmpty()\n override fun containsKey(key: K): Boolean = map.containsKey(key)\n override fun containsValue(value: @UnsafeVariance V): Boolean = map.containsValue(value)\n override fun get(key: K): V? = map.get(key)\n override val keys: MutableSet<K> get() = map.keys\n override val values: MutableCollection<V> get() = map.values\n override val entries: MutableSet<MutableMap.MutableEntry<K, V>> get() = map.entries\n\n override fun put(key: K, value: V): V? = map.put(key, value)\n override fun remove(key: K): V? = map.remove(key)\n override fun putAll(from: Map<out K, V>) = map.putAll(from)\n override fun clear() = map.clear()\n\n override fun getOrImplicitDefault(key: K): V = map.getOrElseNullable(key, { default(key) })\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\nimport kotlin.random.Random\n\n/**\n * Removes a single instance of the specified element from this\n * collection, if it is present.\n *\n * Allows to overcome type-safety restriction of `remove` that requires to pass an element of type `E`.\n *\n * @return `true` if the element has been successfully removed; `false` if it was not present in the collection.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.remove(element: T): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).remove(element)\n\n/**\n * Removes all of this collection's elements that are also contained in the specified collection.\n\n * Allows to overcome type-safety restriction of `removeAll` that requires to pass a collection of type `Collection<E>`.\n *\n * @return `true` if any of the specified elements was removed from the collection, `false` if the collection was not modified.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.removeAll(elements: Collection<T>): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).removeAll(elements)\n\n/**\n * Retains only the elements in this collection that are contained in the specified collection.\n *\n * Allows to overcome type-safety restriction of `retainAll` that requires to pass a collection of type `Collection<E>`.\n *\n * @return `true` if any element was removed from the collection, `false` if the collection was not modified.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.retainAll(elements: Collection<T>): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).retainAll(elements)\n\n/**\n * Adds the specified [element] to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(element: T) {\n this.add(element)\n}\n\n/**\n * Adds all elements of the given [elements] collection to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Iterable<T>) {\n this.addAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] array to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Array<T>) {\n this.addAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] sequence to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Sequence<T>) {\n this.addAll(elements)\n}\n\n/**\n * Removes a single instance of the specified [element] from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(element: T) {\n this.remove(element)\n}\n\n/**\n * Removes all elements contained in the given [elements] collection from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Iterable<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Removes all elements contained in the given [elements] array from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Array<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Removes all elements contained in the given [elements] sequence from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Sequence<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] collection to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Iterable<T>): Boolean {\n when (elements) {\n is Collection -> return addAll(elements)\n else -> {\n var result: Boolean = false\n for (item in elements)\n if (add(item)) result = true\n return result\n }\n }\n}\n\n/**\n * Adds all elements of the given [elements] sequence to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Sequence<T>): Boolean {\n var result: Boolean = false\n for (item in elements) {\n if (add(item)) result = true\n }\n return result\n}\n\n/**\n * Adds all elements of the given [elements] array to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Array<out T>): Boolean {\n return addAll(elements.asList())\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] collection.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Iterable<T>): Boolean {\n return removeAll(elements.convertToSetForSetOperationWith(this))\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] sequence.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Sequence<T>): Boolean {\n val set = elements.toHashSet()\n return set.isNotEmpty() && removeAll(set)\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] array.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Array<out T>): Boolean {\n return elements.isNotEmpty() && removeAll(elements.toHashSet())\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] collection.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Iterable<T>): Boolean {\n return retainAll(elements.convertToSetForSetOperationWith(this))\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] array.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Array<out T>): Boolean {\n if (elements.isNotEmpty())\n return retainAll(elements.toHashSet())\n else\n return retainNothing()\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] sequence.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Sequence<T>): Boolean {\n val set = elements.toHashSet()\n if (set.isNotEmpty())\n return retainAll(set)\n else\n return retainNothing()\n}\n\nprivate fun MutableCollection<*>.retainNothing(): Boolean {\n val result = isNotEmpty()\n clear()\n return result\n}\n\n\n/**\n * Removes all elements from this [MutableIterable] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when no elements were removed and collection was not modified.\n */\npublic fun <T> MutableIterable<T>.removeAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, true)\n\n/**\n * Retains only elements of this [MutableIterable] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when all elements were retained and collection was not modified.\n */\npublic fun <T> MutableIterable<T>.retainAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, false)\n\nprivate fun <T> MutableIterable<T>.filterInPlace(predicate: (T) -> Boolean, predicateResultToRemove: Boolean): Boolean {\n var result = false\n with(iterator()) {\n while (hasNext())\n if (predicate(next()) == predicateResultToRemove) {\n remove()\n result = true\n }\n }\n return result\n}\n\n\n/**\n * Removes the element at the specified [index] from this list.\n * In Kotlin one should use the [MutableList.removeAt] function instead.\n */\n@Deprecated(\"Use removeAt(index) instead.\", ReplaceWith(\"removeAt(index)\"), level = DeprecationLevel.ERROR)\n@kotlin.internal.InlineOnly\npublic inline fun <T> MutableList<T>.remove(index: Int): T = removeAt(index)\n\n/**\n * Removes the first element from this mutable list and returns that removed element, or throws [NoSuchElementException] if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeFirst(): T = if (isEmpty()) throw NoSuchElementException(\"List is empty.\") else removeAt(0)\n\n/**\n * Removes the first element from this mutable list and returns that removed element, or returns `null` if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeFirstOrNull(): T? = if (isEmpty()) null else removeAt(0)\n\n/**\n * Removes the last element from this mutable list and returns that removed element, or throws [NoSuchElementException] if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeLast(): T = if (isEmpty()) throw NoSuchElementException(\"List is empty.\") else removeAt(lastIndex)\n\n/**\n * Removes the last element from this mutable list and returns that removed element, or returns `null` if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeLastOrNull(): T? = if (isEmpty()) null else removeAt(lastIndex)\n\n/**\n * Removes all elements from this [MutableList] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when no elements were removed and collection was not modified.\n */\npublic fun <T> MutableList<T>.removeAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, true)\n\n/**\n * Retains only elements of this [MutableList] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when all elements were retained and collection was not modified.\n */\npublic fun <T> MutableList<T>.retainAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, false)\n\nprivate fun <T> MutableList<T>.filterInPlace(predicate: (T) -> Boolean, predicateResultToRemove: Boolean): Boolean {\n if (this !is RandomAccess)\n return (this as MutableIterable<T>).filterInPlace(predicate, predicateResultToRemove)\n\n var writeIndex: Int = 0\n for (readIndex in 0..lastIndex) {\n val element = this[readIndex]\n if (predicate(element) == predicateResultToRemove)\n continue\n\n if (writeIndex != readIndex)\n this[writeIndex] = element\n\n writeIndex++\n }\n if (writeIndex < size) {\n for (removeIndex in lastIndex downTo writeIndex)\n removeAt(removeIndex)\n\n return true\n } else {\n return false\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\nprivate open class ReversedListReadOnly<out T>(private val delegate: List<T>) : AbstractList<T>() {\n override val size: Int get() = delegate.size\n override fun get(index: Int): T = delegate[reverseElementIndex(index)]\n}\n\nprivate class ReversedList<T>(private val delegate: MutableList<T>) : AbstractMutableList<T>() {\n override val size: Int get() = delegate.size\n override fun get(index: Int): T = delegate[reverseElementIndex(index)]\n\n override fun clear() = delegate.clear()\n override fun removeAt(index: Int): T = delegate.removeAt(reverseElementIndex(index))\n\n override fun set(index: Int, element: T): T = delegate.set(reverseElementIndex(index), element)\n override fun add(index: Int, element: T) {\n delegate.add(reversePositionIndex(index), element)\n }\n}\n\nprivate fun List<*>.reverseElementIndex(index: Int) =\n if (index in 0..lastIndex) lastIndex - index else throw IndexOutOfBoundsException(\"Element index $index must be in range [${0..lastIndex}].\")\n\nprivate fun List<*>.reversePositionIndex(index: Int) =\n if (index in 0..size) size - index else throw IndexOutOfBoundsException(\"Position index $index must be in range [${0..size}].\")\n\n\n/**\n * Returns a reversed read-only view of the original List.\n * All changes made in the original list will be reflected in the reversed one.\n * @sample samples.collections.ReversedViews.asReversedList\n */\npublic fun <T> List<T>.asReversed(): List<T> = ReversedListReadOnly(this)\n\n/**\n * Returns a reversed mutable view of the original mutable List.\n * All changes made in the original list will be reflected in the reversed one and vice versa.\n * @sample samples.collections.ReversedViews.asReversedMutableList\n */\n@kotlin.jvm.JvmName(\"asReversedMutable\")\npublic fun <T> MutableList<T>.asReversed(): MutableList<T> = ReversedList(this)\n\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"SequencesKt\")\n@file:OptIn(ExperimentalTypeInference::class)\n\npackage kotlin.sequences\n\nimport kotlin.coroutines.*\nimport kotlin.coroutines.intrinsics.*\nimport kotlin.experimental.ExperimentalTypeInference\n\n/**\n * Builds a [Sequence] lazily yielding values one by one.\n *\n * @see kotlin.sequences.generateSequence\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n * @sample samples.collections.Sequences.Building.buildFibonacciSequence\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> sequence(@BuilderInference block: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(block) }\n\n@SinceKotlin(\"1.3\")\n@Deprecated(\"Use 'sequence { }' function instead.\", ReplaceWith(\"sequence(builderAction)\"), level = DeprecationLevel.ERROR)\n@kotlin.internal.InlineOnly\npublic inline fun <T> buildSequence(@BuilderInference noinline builderAction: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(builderAction) }\n\n/**\n * Builds an [Iterator] lazily yielding values one by one.\n *\n * @sample samples.collections.Sequences.Building.buildIterator\n * @sample samples.collections.Iterables.Building.iterable\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> iterator(@BuilderInference block: suspend SequenceScope<T>.() -> Unit): Iterator<T> {\n val iterator = SequenceBuilderIterator<T>()\n iterator.nextStep = block.createCoroutineUnintercepted(receiver = iterator, completion = iterator)\n return iterator\n}\n\n@SinceKotlin(\"1.3\")\n@Deprecated(\"Use 'iterator { }' function instead.\", ReplaceWith(\"iterator(builderAction)\"), level = DeprecationLevel.ERROR)\n@kotlin.internal.InlineOnly\npublic inline fun <T> buildIterator(@BuilderInference noinline builderAction: suspend SequenceScope<T>.() -> Unit): Iterator<T> = iterator(builderAction)\n\n/**\n * The scope for yielding values of a [Sequence] or an [Iterator], provides [yield] and [yieldAll] suspension functions.\n *\n * @see sequence\n * @see iterator\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n * @sample samples.collections.Sequences.Building.buildFibonacciSequence\n */\n@RestrictsSuspension\n@SinceKotlin(\"1.3\")\npublic abstract class SequenceScope<in T> internal constructor() {\n /**\n * Yields a value to the [Iterator] being built and suspends\n * until the next value is requested.\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n * @sample samples.collections.Sequences.Building.buildFibonacciSequence\n */\n public abstract suspend fun yield(value: T)\n\n /**\n * Yields all values from the `iterator` to the [Iterator] being built\n * and suspends until all these values are iterated and the next one is requested.\n *\n * The sequence of values returned by the given iterator can be potentially infinite.\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n */\n public abstract suspend fun yieldAll(iterator: Iterator<T>)\n\n /**\n * Yields a collections of values to the [Iterator] being built\n * and suspends until all these values are iterated and the next one is requested.\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n */\n public suspend fun yieldAll(elements: Iterable<T>) {\n if (elements is Collection && elements.isEmpty()) return\n return yieldAll(elements.iterator())\n }\n\n /**\n * Yields potentially infinite sequence of values to the [Iterator] being built\n * and suspends until all these values are iterated and the next one is requested.\n *\n * The sequence can be potentially infinite.\n *\n * @sample samples.collections.Sequences.Building.buildSequenceYieldAll\n */\n public suspend fun yieldAll(sequence: Sequence<T>) = yieldAll(sequence.iterator())\n}\n\n@Deprecated(\"Use SequenceScope class instead.\", ReplaceWith(\"SequenceScope<T>\"), level = DeprecationLevel.ERROR)\npublic typealias SequenceBuilder<T> = SequenceScope<T>\n\nprivate typealias State = Int\n\nprivate const val State_NotReady: State = 0\nprivate const val State_ManyNotReady: State = 1\nprivate const val State_ManyReady: State = 2\nprivate const val State_Ready: State = 3\nprivate const val State_Done: State = 4\nprivate const val State_Failed: State = 5\n\nprivate class SequenceBuilderIterator<T> : SequenceScope<T>(), Iterator<T>, Continuation<Unit> {\n private var state = State_NotReady\n private var nextValue: T? = null\n private var nextIterator: Iterator<T>? = null\n var nextStep: Continuation<Unit>? = null\n\n override fun hasNext(): Boolean {\n while (true) {\n when (state) {\n State_NotReady -> {}\n State_ManyNotReady ->\n if (nextIterator!!.hasNext()) {\n state = State_ManyReady\n return true\n } else {\n nextIterator = null\n }\n State_Done -> return false\n State_Ready, State_ManyReady -> return true\n else -> throw exceptionalState()\n }\n\n state = State_Failed\n val step = nextStep!!\n nextStep = null\n step.resume(Unit)\n }\n }\n\n override fun next(): T {\n when (state) {\n State_NotReady, State_ManyNotReady -> return nextNotReady()\n State_ManyReady -> {\n state = State_ManyNotReady\n return nextIterator!!.next()\n }\n State_Ready -> {\n state = State_NotReady\n @Suppress(\"UNCHECKED_CAST\")\n val result = nextValue as T\n nextValue = null\n return result\n }\n else -> throw exceptionalState()\n }\n }\n\n private fun nextNotReady(): T {\n if (!hasNext()) throw NoSuchElementException() else return next()\n }\n\n private fun exceptionalState(): Throwable = when (state) {\n State_Done -> NoSuchElementException()\n State_Failed -> IllegalStateException(\"Iterator has failed.\")\n else -> IllegalStateException(\"Unexpected state of the iterator: $state\")\n }\n\n\n override suspend fun yield(value: T) {\n nextValue = value\n state = State_Ready\n return suspendCoroutineUninterceptedOrReturn { c ->\n nextStep = c\n COROUTINE_SUSPENDED\n }\n }\n\n override suspend fun yieldAll(iterator: Iterator<T>) {\n if (!iterator.hasNext()) return\n nextIterator = iterator\n state = State_ManyReady\n return suspendCoroutineUninterceptedOrReturn { c ->\n nextStep = c\n COROUTINE_SUSPENDED\n }\n }\n\n // Completion continuation implementation\n override fun resumeWith(result: Result<Unit>) {\n result.getOrThrow() // just rethrow exception if it is there\n state = State_Done\n }\n\n override val context: CoroutineContext\n get() = EmptyCoroutineContext\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n@file:kotlin.jvm.JvmName(\"ComparisonsKt\")\n@file:kotlin.jvm.JvmMultifileClass\n\npackage kotlin.comparisons\n\n/**\n * Compares two values using the specified functions [selectors] to calculate the result of the comparison.\n * The functions are called sequentially, receive the given values [a] and [b] and return [Comparable]\n * objects. As soon as the [Comparable] instances returned by a function for [a] and [b] values do not\n * compare as equal, the result of that comparison is returned.\n *\n * @sample samples.comparisons.Comparisons.compareValuesByWithSelectors\n */\npublic fun <T> compareValuesBy(a: T, b: T, vararg selectors: (T) -> Comparable<*>?): Int {\n require(selectors.size > 0)\n return compareValuesByImpl(a, b, selectors)\n}\n\nprivate fun <T> compareValuesByImpl(a: T, b: T, selectors: Array<out (T) -> Comparable<*>?>): Int {\n for (fn in selectors) {\n val v1 = fn(a)\n val v2 = fn(b)\n val diff = compareValues(v1, v2)\n if (diff != 0) return diff\n }\n return 0\n}\n\n/**\n * Compares two values using the specified [selector] function to calculate the result of the comparison.\n * The function is applied to the given values [a] and [b] and return [Comparable] objects.\n * The result of comparison of these [Comparable] instances is returned.\n *\n * @sample samples.comparisons.Comparisons.compareValuesByWithSingleSelector\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> compareValuesBy(a: T, b: T, selector: (T) -> Comparable<*>?): Int {\n return compareValues(selector(a), selector(b))\n}\n\n/**\n * Compares two values using the specified [selector] function to calculate the result of the comparison.\n * The function is applied to the given values [a] and [b] and return objects of type K which are then being\n * compared with the given [comparator].\n *\n * @sample samples.comparisons.Comparisons.compareValuesByWithComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, K> compareValuesBy(a: T, b: T, comparator: Comparator<in K>, selector: (T) -> K): Int {\n return comparator.compare(selector(a), selector(b))\n}\n\n//// Not so useful without type inference for receiver of expression\n//// compareValuesWith(v1, v2, compareBy { it.prop1 } thenByDescending { it.prop2 })\n///**\n// * Compares two values using the specified [comparator].\n// */\n//@Suppress(\"NOTHING_TO_INLINE\")\n//public inline fun <T> compareValuesWith(a: T, b: T, comparator: Comparator<T>): Int = comparator.compare(a, b)\n//\n\n\n/**\n * Compares two nullable [Comparable] values. Null is considered less than any value.\n *\n * @sample samples.comparisons.Comparisons.compareValues\n */\npublic fun <T : Comparable<*>> compareValues(a: T?, b: T?): Int {\n if (a === b) return 0\n if (a == null) return -1\n if (b == null) return 1\n\n @Suppress(\"UNCHECKED_CAST\")\n return (a as Comparable<Any>).compareTo(b)\n}\n\n/**\n * Creates a comparator using the sequence of functions to calculate a result of comparison.\n * The functions are called sequentially, receive the given values `a` and `b` and return [Comparable]\n * objects. As soon as the [Comparable] instances returned by a function for `a` and `b` values do not\n * compare as equal, the result of that comparison is returned from the [Comparator].\n *\n * @sample samples.comparisons.Comparisons.compareByWithSelectors\n */\npublic fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T> {\n require(selectors.size > 0)\n return Comparator { a, b -> compareValuesByImpl(a, b, selectors) }\n}\n\n\n/**\n * Creates a comparator using the function to transform value to a [Comparable] instance for comparison.\n *\n * @sample samples.comparisons.Comparisons.compareByWithSingleSelector\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> compareBy(crossinline selector: (T) -> Comparable<*>?): Comparator<T> =\n Comparator { a, b -> compareValuesBy(a, b, selector) }\n\n/**\n * Creates a comparator using the [selector] function to transform values being compared and then applying\n * the specified [comparator] to compare transformed values.\n *\n * @sample samples.comparisons.Comparisons.compareByWithComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, K> compareBy(comparator: Comparator<in K>, crossinline selector: (T) -> K): Comparator<T> =\n Comparator { a, b -> compareValuesBy(a, b, comparator, selector) }\n\n/**\n * Creates a descending comparator using the function to transform value to a [Comparable] instance for comparison.\n *\n * @sample samples.comparisons.Comparisons.compareByDescendingWithSingleSelector\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> compareByDescending(crossinline selector: (T) -> Comparable<*>?): Comparator<T> =\n Comparator { a, b -> compareValuesBy(b, a, selector) }\n\n/**\n * Creates a descending comparator using the [selector] function to transform values being compared and then applying\n * the specified [comparator] to compare transformed values.\n *\n * Note that an order of [comparator] is reversed by this wrapper.\n *\n * @sample samples.comparisons.Comparisons.compareByDescendingWithComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, K> compareByDescending(comparator: Comparator<in K>, crossinline selector: (T) -> K): Comparator<T> =\n Comparator { a, b -> compareValuesBy(b, a, comparator, selector) }\n\n/**\n * Creates a comparator comparing values after the primary comparator defined them equal. It uses\n * the function to transform value to a [Comparable] instance for comparison.\n *\n * @sample samples.comparisons.Comparisons.thenBy\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Comparator<T>.thenBy(crossinline selector: (T) -> Comparable<*>?): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@thenBy.compare(a, b)\n if (previousCompare != 0) previousCompare else compareValuesBy(a, b, selector)\n }\n\n/**\n * Creates a comparator comparing values after the primary comparator defined them equal. It uses\n * the [selector] function to transform values and then compares them with the given [comparator].\n *\n * @sample samples.comparisons.Comparisons.thenByWithComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, K> Comparator<T>.thenBy(comparator: Comparator<in K>, crossinline selector: (T) -> K): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@thenBy.compare(a, b)\n if (previousCompare != 0) previousCompare else compareValuesBy(a, b, comparator, selector)\n }\n\n/**\n * Creates a descending comparator using the primary comparator and\n * the function to transform value to a [Comparable] instance for comparison.\n *\n * @sample samples.comparisons.Comparisons.thenByDescending\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Comparator<T>.thenByDescending(crossinline selector: (T) -> Comparable<*>?): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@thenByDescending.compare(a, b)\n if (previousCompare != 0) previousCompare else compareValuesBy(b, a, selector)\n }\n\n/**\n * Creates a descending comparator comparing values after the primary comparator defined them equal. It uses\n * the [selector] function to transform values and then compares them with the given [comparator].\n *\n * @sample samples.comparisons.Comparisons.thenByDescendingWithComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, K> Comparator<T>.thenByDescending(comparator: Comparator<in K>, crossinline selector: (T) -> K): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@thenByDescending.compare(a, b)\n if (previousCompare != 0) previousCompare else compareValuesBy(b, a, comparator, selector)\n }\n\n\n/**\n * Creates a comparator using the primary comparator and function to calculate a result of comparison.\n *\n * @sample samples.comparisons.Comparisons.thenComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Comparator<T>.thenComparator(crossinline comparison: (a: T, b: T) -> Int): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@thenComparator.compare(a, b)\n if (previousCompare != 0) previousCompare else comparison(a, b)\n }\n\n/**\n * Combines this comparator and the given [comparator] such that the latter is applied only\n * when the former considered values equal.\n *\n * @sample samples.comparisons.Comparisons.then\n */\npublic infix fun <T> Comparator<T>.then(comparator: Comparator<in T>): Comparator<T> =\n Comparator { a, b ->\n val previousCompare = this@then.compare(a, b)\n if (previousCompare != 0) previousCompare else comparator.compare(a, b)\n }\n\n/**\n * Combines this comparator and the given [comparator] such that the latter is applied only\n * when the former considered values equal.\n *\n * @sample samples.comparisons.Comparisons.thenDescending\n */\npublic infix fun <T> Comparator<T>.thenDescending(comparator: Comparator<in T>): Comparator<T> =\n Comparator<T> { a, b ->\n val previousCompare = this@thenDescending.compare(a, b)\n if (previousCompare != 0) previousCompare else comparator.compare(b, a)\n }\n\n// Not so useful without type inference for receiver of expression\n/**\n * Extends the given [comparator] of non-nullable values to a comparator of nullable values\n * considering `null` value less than any other value.\n *\n * @sample samples.comparisons.Comparisons.nullsFirstLastWithComparator\n */\npublic fun <T : Any> nullsFirst(comparator: Comparator<in T>): Comparator<T?> =\n Comparator { a, b ->\n when {\n a === b -> 0\n a == null -> -1\n b == null -> 1\n else -> comparator.compare(a, b)\n }\n }\n\n/**\n * Provides a comparator of nullable [Comparable] values\n * considering `null` value less than any other value.\n *\n * @sample samples.comparisons.Comparisons.nullsFirstLastComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Comparable<T>> nullsFirst(): Comparator<T?> = nullsFirst(naturalOrder())\n\n/**\n * Extends the given [comparator] of non-nullable values to a comparator of nullable values\n * considering `null` value greater than any other value.\n *\n * @sample samples.comparisons.Comparisons.nullsFirstLastWithComparator\n */\npublic fun <T : Any> nullsLast(comparator: Comparator<in T>): Comparator<T?> =\n Comparator { a, b ->\n when {\n a === b -> 0\n a == null -> 1\n b == null -> -1\n else -> comparator.compare(a, b)\n }\n }\n\n/**\n * Provides a comparator of nullable [Comparable] values\n * considering `null` value greater than any other value.\n *\n * @sample samples.comparisons.Comparisons.nullsFirstLastComparator\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T : Comparable<T>> nullsLast(): Comparator<T?> = nullsLast(naturalOrder())\n\n/**\n * Returns a comparator that compares [Comparable] objects in natural order.\n *\n * @sample samples.comparisons.Comparisons.naturalOrderComparator\n */\npublic fun <T : Comparable<T>> naturalOrder(): Comparator<T> = @Suppress(\"UNCHECKED_CAST\") (NaturalOrderComparator as Comparator<T>)\n\n/**\n * Returns a comparator that compares [Comparable] objects in reversed natural order.\n *\n * @sample samples.comparisons.Comparisons.nullsFirstLastWithComparator\n */\npublic fun <T : Comparable<T>> reverseOrder(): Comparator<T> = @Suppress(\"UNCHECKED_CAST\") (ReverseOrderComparator as Comparator<T>)\n\n/**\n * Returns a comparator that imposes the reverse ordering of this comparator.\n *\n * @sample samples.comparisons.Comparisons.reversed\n */\npublic fun <T> Comparator<T>.reversed(): Comparator<T> = when (this) {\n is ReversedComparator -> this.comparator\n NaturalOrderComparator -> @Suppress(\"UNCHECKED_CAST\") (ReverseOrderComparator as Comparator<T>)\n ReverseOrderComparator -> @Suppress(\"UNCHECKED_CAST\") (NaturalOrderComparator as Comparator<T>)\n else -> ReversedComparator(this)\n}\n\n\nprivate class ReversedComparator<T>(public val comparator: Comparator<T>) : Comparator<T> {\n override fun compare(a: T, b: T): Int = comparator.compare(b, a)\n @Suppress(\"VIRTUAL_MEMBER_HIDDEN\")\n fun reversed(): Comparator<T> = comparator\n}\n\nprivate object NaturalOrderComparator : Comparator<Comparable<Any>> {\n override fun compare(a: Comparable<Any>, b: Comparable<Any>): Int = a.compareTo(b)\n @Suppress(\"VIRTUAL_MEMBER_HIDDEN\")\n fun reversed(): Comparator<Comparable<Any>> = ReverseOrderComparator\n}\n\nprivate object ReverseOrderComparator : Comparator<Comparable<Any>> {\n override fun compare(a: Comparable<Any>, b: Comparable<Any>): Int = b.compareTo(a)\n @Suppress(\"VIRTUAL_MEMBER_HIDDEN\")\n fun reversed(): Comparator<Comparable<Any>> = NaturalOrderComparator\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\n/**\n * Marks coroutine context element that intercepts coroutine continuations.\n * The coroutines framework uses [ContinuationInterceptor.Key] to retrieve the interceptor and\n * intercepts all coroutine continuations with [interceptContinuation] invocations.\n *\n * [ContinuationInterceptor] behaves like a [polymorphic element][AbstractCoroutineContextKey], meaning that\n * its implementation delegates [get][CoroutineContext.Element.get] and [minusKey][CoroutineContext.Element.minusKey]\n * to [getPolymorphicElement] and [minusPolymorphicKey] respectively.\n * [ContinuationInterceptor] subtypes can be extracted from the coroutine context using either [ContinuationInterceptor.Key]\n * or subtype key if it extends [AbstractCoroutineContextKey].\n */\n@SinceKotlin(\"1.3\")\npublic interface ContinuationInterceptor : CoroutineContext.Element {\n /**\n * The key that defines *the* context interceptor.\n */\n companion object Key : CoroutineContext.Key<ContinuationInterceptor>\n\n /**\n * Returns continuation that wraps the original [continuation], thus intercepting all resumptions.\n * This function is invoked by coroutines framework when needed and the resulting continuations are\n * cached internally per each instance of the original [continuation].\n *\n * This function may simply return original [continuation] if it does not want to intercept this particular continuation.\n *\n * When the original [continuation] completes, coroutine framework invokes [releaseInterceptedContinuation]\n * with the resulting continuation if it was intercepted, that is if `interceptContinuation` had previously\n * returned a different continuation instance.\n */\n public fun <T> interceptContinuation(continuation: Continuation<T>): Continuation<T>\n\n /**\n * Invoked for the continuation instance returned by [interceptContinuation] when the original\n * continuation completes and will not be used anymore. This function is invoked only if [interceptContinuation]\n * had returned a different continuation instance from the one it was invoked with.\n *\n * Default implementation does nothing.\n *\n * @param continuation Continuation instance returned by this interceptor's [interceptContinuation] invocation.\n */\n public fun releaseInterceptedContinuation(continuation: Continuation<*>) {\n /* do nothing by default */\n }\n\n public override operator fun <E : CoroutineContext.Element> get(key: CoroutineContext.Key<E>): E? {\n // getPolymorphicKey specialized for ContinuationInterceptor key\n @OptIn(ExperimentalStdlibApi::class)\n if (key is AbstractCoroutineContextKey<*, *>) {\n @Suppress(\"UNCHECKED_CAST\")\n return if (key.isSubKey(this.key)) key.tryCast(this) as? E else null\n }\n @Suppress(\"UNCHECKED_CAST\")\n return if (ContinuationInterceptor === key) this as E else null\n }\n\n\n public override fun minusKey(key: CoroutineContext.Key<*>): CoroutineContext {\n // minusPolymorphicKey specialized for ContinuationInterceptor key\n @OptIn(ExperimentalStdlibApi::class)\n if (key is AbstractCoroutineContextKey<*, *>) {\n return if (key.isSubKey(this.key) && key.tryCast(this) != null) EmptyCoroutineContext else this\n }\n return if (ContinuationInterceptor === key) EmptyCoroutineContext else this\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\n/**\n * Persistent context for the coroutine. It is an indexed set of [Element] instances.\n * An indexed set is a mix between a set and a map.\n * Every element in this set has a unique [Key].\n */\n@SinceKotlin(\"1.3\")\npublic interface CoroutineContext {\n /**\n * Returns the element with the given [key] from this context or `null`.\n */\n public operator fun <E : Element> get(key: Key<E>): E?\n\n /**\n * Accumulates entries of this context starting with [initial] value and applying [operation]\n * from left to right to current accumulator value and each element of this context.\n */\n public fun <R> fold(initial: R, operation: (R, Element) -> R): R\n\n /**\n * Returns a context containing elements from this context and elements from other [context].\n * The elements from this context with the same key as in the other one are dropped.\n */\n public operator fun plus(context: CoroutineContext): CoroutineContext =\n if (context === EmptyCoroutineContext) this else // fast path -- avoid lambda creation\n context.fold(this) { acc, element ->\n val removed = acc.minusKey(element.key)\n if (removed === EmptyCoroutineContext) element else {\n // make sure interceptor is always last in the context (and thus is fast to get when present)\n val interceptor = removed[ContinuationInterceptor]\n if (interceptor == null) CombinedContext(removed, element) else {\n val left = removed.minusKey(ContinuationInterceptor)\n if (left === EmptyCoroutineContext) CombinedContext(element, interceptor) else\n CombinedContext(CombinedContext(left, element), interceptor)\n }\n }\n }\n\n /**\n * Returns a context containing elements from this context, but without an element with\n * the specified [key].\n */\n public fun minusKey(key: Key<*>): CoroutineContext\n\n /**\n * Key for the elements of [CoroutineContext]. [E] is a type of element with this key.\n */\n public interface Key<E : Element>\n\n /**\n * An element of the [CoroutineContext]. An element of the coroutine context is a singleton context by itself.\n */\n public interface Element : CoroutineContext {\n /**\n * A key of this coroutine context element.\n */\n public val key: Key<*>\n\n public override operator fun <E : Element> get(key: Key<E>): E? =\n @Suppress(\"UNCHECKED_CAST\")\n if (this.key == key) this as E else null\n\n public override fun <R> fold(initial: R, operation: (R, Element) -> R): R =\n operation(initial, this)\n\n public override fun minusKey(key: Key<*>): CoroutineContext =\n if (this.key == key) EmptyCoroutineContext else this\n }\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines\n\nimport kotlin.coroutines.CoroutineContext.Element\nimport kotlin.coroutines.CoroutineContext.Key\n\n/**\n * Base class for [CoroutineContext.Element] implementations.\n */\n@SinceKotlin(\"1.3\")\npublic abstract class AbstractCoroutineContextElement(public override val key: Key<*>) : Element\n\n/**\n * Base class for [CoroutineContext.Key] associated with polymorphic [CoroutineContext.Element] implementation.\n * Polymorphic element implementation implies delegating its [get][Element.get] and [minusKey][Element.minusKey]\n * to [getPolymorphicElement] and [minusPolymorphicKey] respectively.\n *\n * Polymorphic elements can be extracted from the coroutine context using both element key and its supertype key.\n * Example of polymorphic elements:\n * ```\n * open class BaseElement : CoroutineContext.Element {\n * companion object Key : CoroutineContext.Key<BaseElement>\n * override val key: CoroutineContext.Key<*> get() = Key\n * // It is important to use getPolymorphicKey and minusPolymorphicKey\n * override fun <E : CoroutineContext.Element> get(key: CoroutineContext.Key<E>): E? = getPolymorphicElement(key)\n * override fun minusKey(key: CoroutineContext.Key<*>): CoroutineContext = minusPolymorphicKey(key)\n * }\n *\n * class DerivedElement : BaseElement() {\n * companion object Key : AbstractCoroutineContextKey<BaseElement, DerivedElement>(BaseElement, { it as? DerivedElement })\n * }\n * // Now it is possible to query both `BaseElement` and `DerivedElement`\n * someContext[BaseElement] // Returns BaseElement?, non-null both for BaseElement and DerivedElement instances\n * someContext[DerivedElement] // Returns DerivedElement?, non-null only for DerivedElement instance\n * ```\n * @param B base class of a polymorphic element\n * @param baseKey an instance of base key\n * @param E element type associated with the current key\n * @param safeCast a function that can safely cast abstract [CoroutineContext.Element] to the concrete [E] type\n * and return the element if it is a subtype of [E] or `null` otherwise.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic abstract class AbstractCoroutineContextKey<B : Element, E : B>(\n baseKey: Key<B>,\n private val safeCast: (element: Element) -> E?\n) : Key<E> {\n private val topmostKey: Key<*> = if (baseKey is AbstractCoroutineContextKey<*, *>) baseKey.topmostKey else baseKey\n\n internal fun tryCast(element: Element): E? = safeCast(element)\n internal fun isSubKey(key: Key<*>): Boolean = key === this || topmostKey === key\n}\n\n/**\n * Returns the current element if it is associated with the given [key] in a polymorphic manner or `null` otherwise.\n * This method returns non-null value if either [Element.key] is equal to the given [key] or if the [key] is associated\n * with [Element.key] via [AbstractCoroutineContextKey].\n * See [AbstractCoroutineContextKey] for the example of usage.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic fun <E : Element> Element.getPolymorphicElement(key: Key<E>): E? {\n if (key is AbstractCoroutineContextKey<*, *>) {\n @Suppress(\"UNCHECKED_CAST\")\n return if (key.isSubKey(this.key)) key.tryCast(this) as? E else null\n }\n @Suppress(\"UNCHECKED_CAST\")\n return if (this.key === key) this as E else null\n}\n\n/**\n * Returns empty coroutine context if the element is associated with the given [key] in a polymorphic manner\n * or `null` otherwise.\n * This method returns empty context if either [Element.key] is equal to the given [key] or if the [key] is associated\n * with [Element.key] via [AbstractCoroutineContextKey].\n * See [AbstractCoroutineContextKey] for the example of usage.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic fun Element.minusPolymorphicKey(key: Key<*>): CoroutineContext {\n if (key is AbstractCoroutineContextKey<*, *>) {\n return if (key.isSubKey(this.key) && key.tryCast(this) != null) EmptyCoroutineContext else this\n }\n return if (this.key === key) EmptyCoroutineContext else this\n}\n\n/**\n * An empty coroutine context.\n */\n@SinceKotlin(\"1.3\")\npublic object EmptyCoroutineContext : CoroutineContext, Serializable {\n private const val serialVersionUID: Long = 0\n private fun readResolve(): Any = EmptyCoroutineContext\n\n public override fun <E : Element> get(key: Key<E>): E? = null\n public override fun <R> fold(initial: R, operation: (R, Element) -> R): R = initial\n public override fun plus(context: CoroutineContext): CoroutineContext = context\n public override fun minusKey(key: Key<*>): CoroutineContext = this\n public override fun hashCode(): Int = 0\n public override fun toString(): String = \"EmptyCoroutineContext\"\n}\n\n//--------------------- internal impl ---------------------\n\n// this class is not exposed, but is hidden inside implementations\n// this is a left-biased list, so that `plus` works naturally\n@SinceKotlin(\"1.3\")\ninternal class CombinedContext(\n private val left: CoroutineContext,\n private val element: Element\n) : CoroutineContext, Serializable {\n\n override fun <E : Element> get(key: Key<E>): E? {\n var cur = this\n while (true) {\n cur.element[key]?.let { return it }\n val next = cur.left\n if (next is CombinedContext) {\n cur = next\n } else {\n return next[key]\n }\n }\n }\n\n public override fun <R> fold(initial: R, operation: (R, Element) -> R): R =\n operation(left.fold(initial, operation), element)\n\n public override fun minusKey(key: Key<*>): CoroutineContext {\n element[key]?.let { return left }\n val newLeft = left.minusKey(key)\n return when {\n newLeft === left -> this\n newLeft === EmptyCoroutineContext -> element\n else -> CombinedContext(newLeft, element)\n }\n }\n\n private fun size(): Int {\n var cur = this\n var size = 2\n while (true) {\n cur = cur.left as? CombinedContext ?: return size\n size++\n }\n }\n\n private fun contains(element: Element): Boolean =\n get(element.key) == element\n\n private fun containsAll(context: CombinedContext): Boolean {\n var cur = context\n while (true) {\n if (!contains(cur.element)) return false\n val next = cur.left\n if (next is CombinedContext) {\n cur = next\n } else {\n return contains(next as Element)\n }\n }\n }\n\n override fun equals(other: Any?): Boolean =\n this === other || other is CombinedContext && other.size() == size() && other.containsAll(this)\n\n override fun hashCode(): Int = left.hashCode() + element.hashCode()\n\n override fun toString(): String =\n \"[\" + fold(\"\") { acc, element ->\n if (acc.isEmpty()) element.toString() else \"$acc, $element\"\n } + \"]\"\n\n private fun writeReplace(): Any {\n val n = size()\n val elements = arrayOfNulls<CoroutineContext>(n)\n var index = 0\n fold(Unit) { _, element -> elements[index++] = element }\n check(index == n)\n @Suppress(\"UNCHECKED_CAST\")\n return Serialized(elements as Array<CoroutineContext>)\n }\n\n private class Serialized(val elements: Array<CoroutineContext>) : Serializable {\n companion object {\n private const val serialVersionUID: Long = 0L\n }\n\n private fun readResolve(): Any = elements.fold(EmptyCoroutineContext, CoroutineContext::plus)\n }\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmName(\"IntrinsicsKt\")\n@file:kotlin.jvm.JvmMultifileClass\n\npackage kotlin.coroutines.intrinsics\n\nimport kotlin.contracts.*\nimport kotlin.coroutines.*\nimport kotlin.internal.InlineOnly\n\n/**\n * Obtains the current continuation instance inside suspend functions and either suspends\n * currently running coroutine or returns result immediately without suspension.\n *\n * If the [block] returns the special [COROUTINE_SUSPENDED] value, it means that suspend function did suspend the execution and will\n * not return any result immediately. In this case, the [Continuation] provided to the [block] shall be\n * resumed by invoking [Continuation.resumeWith] at some moment in the\n * future when the result becomes available to resume the computation.\n *\n * Otherwise, the return value of the [block] must have a type assignable to [T] and represents the result of this suspend function.\n * It means that the execution was not suspended and the [Continuation] provided to the [block] shall not be invoked.\n * As the result type of the [block] is declared as `Any?` and cannot be correctly type-checked,\n * its proper return type remains on the conscience of the suspend function's author.\n *\n * Invocation of [Continuation.resumeWith] resumes coroutine directly in the invoker's thread without going through the\n * [ContinuationInterceptor] that might be present in the coroutine's [CoroutineContext].\n * It is the invoker's responsibility to ensure that a proper invocation context is established.\n * [Continuation.intercepted] can be used to acquire the intercepted continuation.\n *\n * Note that it is not recommended to call either [Continuation.resume] nor [Continuation.resumeWithException] functions synchronously\n * in the same stackframe where suspension function is run. Use [suspendCoroutine] as a safer way to obtain current\n * continuation instance.\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\n@Suppress(\"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend inline fun <T> suspendCoroutineUninterceptedOrReturn(crossinline block: (Continuation<T>) -> Any?): T {\n contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }\n throw NotImplementedError(\"Implementation of suspendCoroutineUninterceptedOrReturn is intrinsic\")\n}\n\n/**\n * This value is used as a return value of [suspendCoroutineUninterceptedOrReturn] `block` argument to state that\n * the execution was suspended and will not return any result immediately.\n *\n * **Note: this value should not be used in general code.** Using it outside of the context of\n * `suspendCoroutineUninterceptedOrReturn` function return value (including, but not limited to,\n * storing this value in other properties, returning it from other functions, etc)\n * can lead to unspecified behavior of the code.\n */\n// It is implemented as property with getter to avoid ProGuard <clinit> problem with multifile IntrinsicsKt class\n@SinceKotlin(\"1.3\")\npublic val COROUTINE_SUSPENDED: Any get() = CoroutineSingletons.COROUTINE_SUSPENDED\n\n// Using enum here ensures two important properties:\n// 1. It makes SafeContinuation serializable with all kinds of serialization frameworks (since all of them natively support enums)\n// 2. It improves debugging experience, since you clearly see toString() value of those objects and what package they come from\n@SinceKotlin(\"1.3\")\n@PublishedApi // This class is Published API via serialized representation of SafeContinuation, don't rename/move\ninternal enum class CoroutineSingletons { COROUTINE_SUSPENDED, UNDECIDED, RESUMED }\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.properties\n\nimport kotlin.reflect.KProperty\n\n/**\n * Implements the core logic of a property delegate for a read/write property that calls callback functions when changed.\n * @param initialValue the initial value of the property.\n */\npublic abstract class ObservableProperty<V>(initialValue: V) : ReadWriteProperty<Any?, V> {\n private var value = initialValue\n\n /**\n * The callback which is called before a change to the property value is attempted.\n * The value of the property hasn't been changed yet, when this callback is invoked.\n * If the callback returns `true` the value of the property is being set to the new value,\n * and if the callback returns `false` the new value is discarded and the property remains its old value.\n */\n protected open fun beforeChange(property: KProperty<*>, oldValue: V, newValue: V): Boolean = true\n\n /**\n * The callback which is called after the change of the property is made. The value of the property\n * has already been changed when this callback is invoked.\n */\n protected open fun afterChange(property: KProperty<*>, oldValue: V, newValue: V): Unit {}\n\n public override fun getValue(thisRef: Any?, property: KProperty<*>): V {\n return value\n }\n\n public override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {\n val oldValue = this.value\n if (!beforeChange(property, oldValue, value)) {\n return\n }\n this.value = value\n afterChange(property, oldValue, value)\n }\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.random\n\nimport kotlin.math.nextDown\n\n/**\n * An abstract class that is implemented by random number generator algorithms.\n *\n * The companion object [Random.Default] is the default instance of [Random].\n *\n * To get a seeded instance of random generator use [Random] function.\n *\n * @sample samples.random.Randoms.defaultRandom\n */\n@SinceKotlin(\"1.3\")\npublic abstract class Random {\n\n /**\n * Gets the next random [bitCount] number of bits.\n *\n * Generates an `Int` whose lower [bitCount] bits are filled with random values and the remaining upper bits are zero.\n *\n * @param bitCount number of bits to generate, must be in range 0..32, otherwise the behavior is unspecified.\n *\n * @sample samples.random.Randoms.nextBits\n */\n public abstract fun nextBits(bitCount: Int): Int\n\n /**\n * Gets the next random `Int` from the random number generator.\n *\n * Generates an `Int` random value uniformly distributed between `Int.MIN_VALUE` and `Int.MAX_VALUE` (inclusive).\n *\n * @sample samples.random.Randoms.nextInt\n */\n public open fun nextInt(): Int = nextBits(32)\n\n /**\n * Gets the next random non-negative `Int` from the random number generator less than the specified [until] bound.\n *\n * Generates an `Int` random value uniformly distributed between `0` (inclusive) and the specified [until] bound (exclusive).\n *\n * @param until must be positive.\n *\n * @throws IllegalArgumentException if [until] is negative or zero.\n *\n * @sample samples.random.Randoms.nextIntFromUntil\n */\n public open fun nextInt(until: Int): Int = nextInt(0, until)\n\n /**\n * Gets the next random `Int` from the random number generator in the specified range.\n *\n * Generates an `Int` random value uniformly distributed between the specified [from] (inclusive) and [until] (exclusive) bounds.\n *\n * @throws IllegalArgumentException if [from] is greater than or equal to [until].\n *\n * @sample samples.random.Randoms.nextIntFromUntil\n */\n public open fun nextInt(from: Int, until: Int): Int {\n checkRangeBounds(from, until)\n val n = until - from\n if (n > 0 || n == Int.MIN_VALUE) {\n val rnd = if (n and -n == n) {\n val bitCount = fastLog2(n)\n nextBits(bitCount)\n } else {\n var v: Int\n do {\n val bits = nextInt().ushr(1)\n v = bits % n\n } while (bits - v + (n - 1) < 0)\n v\n }\n return from + rnd\n } else {\n while (true) {\n val rnd = nextInt()\n if (rnd in from until until) return rnd\n }\n }\n }\n\n /**\n * Gets the next random `Long` from the random number generator.\n *\n * Generates a `Long` random value uniformly distributed between `Long.MIN_VALUE` and `Long.MAX_VALUE` (inclusive).\n *\n * @sample samples.random.Randoms.nextLong\n */\n public open fun nextLong(): Long = nextInt().toLong().shl(32) + nextInt()\n\n /**\n * Gets the next random non-negative `Long` from the random number generator less than the specified [until] bound.\n *\n * Generates a `Long` random value uniformly distributed between `0` (inclusive) and the specified [until] bound (exclusive).\n *\n * @param until must be positive.\n *\n * @throws IllegalArgumentException if [until] is negative or zero.\n *\n * @sample samples.random.Randoms.nextLongFromUntil\n */\n public open fun nextLong(until: Long): Long = nextLong(0, until)\n\n /**\n * Gets the next random `Long` from the random number generator in the specified range.\n *\n * Generates a `Long` random value uniformly distributed between the specified [from] (inclusive) and [until] (exclusive) bounds.\n *\n * @throws IllegalArgumentException if [from] is greater than or equal to [until].\n *\n * @sample samples.random.Randoms.nextLongFromUntil\n */\n public open fun nextLong(from: Long, until: Long): Long {\n checkRangeBounds(from, until)\n val n = until - from\n if (n > 0) {\n val rnd: Long\n if (n and -n == n) {\n val nLow = n.toInt()\n val nHigh = (n ushr 32).toInt()\n rnd = when {\n nLow != 0 -> {\n val bitCount = fastLog2(nLow)\n // toUInt().toLong()\n nextBits(bitCount).toLong() and 0xFFFF_FFFF\n }\n nHigh == 1 ->\n // toUInt().toLong()\n nextInt().toLong() and 0xFFFF_FFFF\n else -> {\n val bitCount = fastLog2(nHigh)\n nextBits(bitCount).toLong().shl(32) + nextInt()\n }\n }\n } else {\n var v: Long\n do {\n val bits = nextLong().ushr(1)\n v = bits % n\n } while (bits - v + (n - 1) < 0)\n rnd = v\n }\n return from + rnd\n } else {\n while (true) {\n val rnd = nextLong()\n if (rnd in from until until) return rnd\n }\n }\n }\n\n /**\n * Gets the next random [Boolean] value.\n *\n * @sample samples.random.Randoms.nextBoolean\n */\n public open fun nextBoolean(): Boolean = nextBits(1) != 0\n\n /**\n * Gets the next random [Double] value uniformly distributed between 0 (inclusive) and 1 (exclusive).\n *\n * @sample samples.random.Randoms.nextDouble\n */\n public open fun nextDouble(): Double = doubleFromParts(nextBits(26), nextBits(27))\n\n /**\n * Gets the next random non-negative `Double` from the random number generator less than the specified [until] bound.\n *\n * Generates a `Double` random value uniformly distributed between 0 (inclusive) and [until] (exclusive).\n *\n * @throws IllegalArgumentException if [until] is negative or zero.\n *\n * @sample samples.random.Randoms.nextDoubleFromUntil\n */\n public open fun nextDouble(until: Double): Double = nextDouble(0.0, until)\n\n /**\n * Gets the next random `Double` from the random number generator in the specified range.\n *\n * Generates a `Double` random value uniformly distributed between the specified [from] (inclusive) and [until] (exclusive) bounds.\n *\n * [from] and [until] must be finite otherwise the behavior is unspecified.\n *\n * @throws IllegalArgumentException if [from] is greater than or equal to [until].\n *\n * @sample samples.random.Randoms.nextDoubleFromUntil\n */\n public open fun nextDouble(from: Double, until: Double): Double {\n checkRangeBounds(from, until)\n val size = until - from\n val r = if (size.isInfinite() && from.isFinite() && until.isFinite()) {\n val r1 = nextDouble() * (until / 2 - from / 2)\n from + r1 + r1\n } else {\n from + nextDouble() * size\n }\n return if (r >= until) until.nextDown() else r\n }\n\n /**\n * Gets the next random [Float] value uniformly distributed between 0 (inclusive) and 1 (exclusive).\n *\n * @sample samples.random.Randoms.nextFloat\n */\n public open fun nextFloat(): Float = nextBits(24) / (1 shl 24).toFloat()\n\n /**\n * Fills a subrange of the specified byte [array] starting from [fromIndex] inclusive and ending [toIndex] exclusive\n * with random bytes.\n *\n * @return [array] with the subrange filled with random bytes.\n *\n * @sample samples.random.Randoms.nextBytes\n */\n public open fun nextBytes(array: ByteArray, fromIndex: Int = 0, toIndex: Int = array.size): ByteArray {\n require(fromIndex in 0..array.size && toIndex in 0..array.size) { \"fromIndex ($fromIndex) or toIndex ($toIndex) are out of range: 0..${array.size}.\" }\n require(fromIndex <= toIndex) { \"fromIndex ($fromIndex) must be not greater than toIndex ($toIndex).\" }\n\n val steps = (toIndex - fromIndex) / 4\n\n var position = fromIndex\n repeat(steps) {\n val v = nextInt()\n array[position] = v.toByte()\n array[position + 1] = v.ushr(8).toByte()\n array[position + 2] = v.ushr(16).toByte()\n array[position + 3] = v.ushr(24).toByte()\n position += 4\n }\n\n val remainder = toIndex - position\n val vr = nextBits(remainder * 8)\n for (i in 0 until remainder) {\n array[position + i] = vr.ushr(i * 8).toByte()\n }\n\n return array\n }\n\n /**\n * Fills the specified byte [array] with random bytes and returns it.\n *\n * @return [array] filled with random bytes.\n *\n * @sample samples.random.Randoms.nextBytes\n */\n public open fun nextBytes(array: ByteArray): ByteArray = nextBytes(array, 0, array.size)\n\n /**\n * Creates a byte array of the specified [size], filled with random bytes.\n *\n * @sample samples.random.Randoms.nextBytes\n */\n public open fun nextBytes(size: Int): ByteArray = nextBytes(ByteArray(size))\n\n\n /**\n * The default random number generator.\n *\n * On JVM this generator is thread-safe, its methods can be invoked from multiple threads.\n *\n * @sample samples.random.Randoms.defaultRandom\n */\n companion object Default : Random() {\n\n private val defaultRandom: Random = defaultPlatformRandom()\n\n override fun nextBits(bitCount: Int): Int = defaultRandom.nextBits(bitCount)\n override fun nextInt(): Int = defaultRandom.nextInt()\n override fun nextInt(until: Int): Int = defaultRandom.nextInt(until)\n override fun nextInt(from: Int, until: Int): Int = defaultRandom.nextInt(from, until)\n\n override fun nextLong(): Long = defaultRandom.nextLong()\n override fun nextLong(until: Long): Long = defaultRandom.nextLong(until)\n override fun nextLong(from: Long, until: Long): Long = defaultRandom.nextLong(from, until)\n\n override fun nextBoolean(): Boolean = defaultRandom.nextBoolean()\n\n override fun nextDouble(): Double = defaultRandom.nextDouble()\n override fun nextDouble(until: Double): Double = defaultRandom.nextDouble(until)\n override fun nextDouble(from: Double, until: Double): Double = defaultRandom.nextDouble(from, until)\n\n override fun nextFloat(): Float = defaultRandom.nextFloat()\n\n override fun nextBytes(array: ByteArray): ByteArray = defaultRandom.nextBytes(array)\n override fun nextBytes(size: Int): ByteArray = defaultRandom.nextBytes(size)\n override fun nextBytes(array: ByteArray, fromIndex: Int, toIndex: Int): ByteArray = defaultRandom.nextBytes(array, fromIndex, toIndex)\n }\n}\n\n/**\n * Returns a repeatable random number generator seeded with the given [seed] `Int` value.\n *\n * Two generators with the same seed produce the same sequence of values within the same version of Kotlin runtime.\n *\n * *Note:* Future versions of Kotlin may change the algorithm of this seeded number generator so that it will return\n * a sequence of values different from the current one for a given seed.\n *\n * On JVM the returned generator is NOT thread-safe. Do not invoke it from multiple threads without proper synchronization.\n *\n * @sample samples.random.Randoms.seededRandom\n */\n@SinceKotlin(\"1.3\")\npublic fun Random(seed: Int): Random = XorWowRandom(seed, seed.shr(31))\n\n/**\n * Returns a repeatable random number generator seeded with the given [seed] `Long` value.\n *\n * Two generators with the same seed produce the same sequence of values within the same version of Kotlin runtime.\n *\n * *Note:* Future versions of Kotlin may change the algorithm of this seeded number generator so that it will return\n * a sequence of values different from the current one for a given seed.\n *\n * On JVM the returned generator is NOT thread-safe. Do not invoke it from multiple threads without proper synchronization.\n *\n * @sample samples.random.Randoms.seededRandom\n */\n@SinceKotlin(\"1.3\")\npublic fun Random(seed: Long): Random = XorWowRandom(seed.toInt(), seed.shr(32).toInt())\n\n\n\n/**\n * Gets the next random `Int` from the random number generator in the specified [range].\n *\n * Generates an `Int` random value uniformly distributed in the specified [range]:\n * from `range.start` inclusive to `range.endInclusive` inclusive.\n *\n * @throws IllegalArgumentException if [range] is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun Random.nextInt(range: IntRange): Int = when {\n range.isEmpty() -> throw IllegalArgumentException(\"Cannot get random in empty range: $range\")\n range.last < Int.MAX_VALUE -> nextInt(range.first, range.last + 1)\n range.first > Int.MIN_VALUE -> nextInt(range.first - 1, range.last) + 1\n else -> nextInt()\n}\n\n/**\n * Gets the next random `Long` from the random number generator in the specified [range].\n *\n * Generates a `Long` random value uniformly distributed in the specified [range]:\n * from `range.start` inclusive to `range.endInclusive` inclusive.\n *\n * @throws IllegalArgumentException if [range] is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun Random.nextLong(range: LongRange): Long = when {\n range.isEmpty() -> throw IllegalArgumentException(\"Cannot get random in empty range: $range\")\n range.last < Long.MAX_VALUE -> nextLong(range.first, range.last + 1)\n range.first > Long.MIN_VALUE -> nextLong(range.first - 1, range.last) + 1\n else -> nextLong()\n}\n\n\ninternal expect fun defaultPlatformRandom(): Random\ninternal expect fun doubleFromParts(hi26: Int, low27: Int): Double\n\n@OptIn(ExperimentalStdlibApi::class)\ninternal fun fastLog2(value: Int): Int = 31 - value.countLeadingZeroBits()\n\n/** Takes upper [bitCount] bits (0..32) from this number. */\ninternal fun Int.takeUpperBits(bitCount: Int): Int =\n this.ushr(32 - bitCount) and (-bitCount).shr(31)\n\ninternal fun checkRangeBounds(from: Int, until: Int) = require(until > from) { boundsErrorMessage(from, until) }\ninternal fun checkRangeBounds(from: Long, until: Long) = require(until > from) { boundsErrorMessage(from, until) }\ninternal fun checkRangeBounds(from: Double, until: Double) = require(until > from) { boundsErrorMessage(from, until) }\n\ninternal fun boundsErrorMessage(from: Any, until: Any) = \"Random range is empty: [$from, $until).\"\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.properties\n\nimport kotlin.reflect.KProperty\n\n/**\n * Base interface that can be used for implementing property delegates of read-only properties.\n *\n * This is provided only for convenience; you don't have to extend this interface\n * as long as your property delegate has methods with the same signatures.\n *\n * @param T the type of object which owns the delegated property.\n * @param V the type of the property value.\n */\npublic fun interface ReadOnlyProperty<in T, out V> {\n /**\n * Returns the value of the property for the given object.\n * @param thisRef the object for which the value is requested.\n * @param property the metadata for the property.\n * @return the property value.\n */\n public operator fun getValue(thisRef: T, property: KProperty<*>): V\n}\n\n/**\n * Base interface that can be used for implementing property delegates of read-write properties.\n *\n * This is provided only for convenience; you don't have to extend this interface\n * as long as your property delegate has methods with the same signatures.\n *\n * @param T the type of object which owns the delegated property.\n * @param V the type of the property value.\n */\npublic interface ReadWriteProperty<in T, V> : ReadOnlyProperty<T, V> {\n /**\n * Returns the value of the property for the given object.\n * @param thisRef the object for which the value is requested.\n * @param property the metadata for the property.\n * @return the property value.\n */\n public override operator fun getValue(thisRef: T, property: KProperty<*>): V\n\n /**\n * Sets the value of the property for the given object.\n * @param thisRef the object for which the value is requested.\n * @param property the metadata for the property.\n * @param value the value to set.\n */\n public operator fun setValue(thisRef: T, property: KProperty<*>, value: V)\n}\n\n/**\n * Base interface that can be used for implementing property delegate providers.\n *\n * This is provided only for convenience; you don't have to extend this interface\n * as long as your delegate provider has a method with the same signature.\n *\n * @param T the type of object which owns the delegated property.\n * @param D the type of property delegates this provider provides.\n */\n@SinceKotlin(\"1.4\")\npublic fun interface PropertyDelegateProvider<in T, out D> {\n /**\n * Returns the delegate of the property for the given object.\n *\n * This function can be used to extend the logic of creating the object (e.g. perform validation checks)\n * to which the property implementation is delegated.\n *\n * @param thisRef the object for which property delegate is requested.\n * @param property the metadata for the property.\n * @return the property delegate.\n */\n public operator fun provideDelegate(thisRef: T, property: KProperty<*>): D\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.random\n\n/**\n * Random number generator, using Marsaglia's \"xorwow\" algorithm\n *\n * Cycles after 2^192 - 2^32 repetitions.\n *\n * For more details, see Marsaglia, George (July 2003). \"Xorshift RNGs\". Journal of Statistical Software. 8 (14). doi:10.18637/jss.v008.i14\n *\n * Available at https://www.jstatsoft.org/v08/i14/paper\n *\n */\ninternal class XorWowRandom\ninternal constructor(\n private var x: Int,\n private var y: Int,\n private var z: Int,\n private var w: Int,\n private var v: Int,\n private var addend: Int\n) : Random() {\n\n internal constructor(seed1: Int, seed2: Int) :\n this(seed1, seed2, 0, 0, seed1.inv(), (seed1 shl 10) xor (seed2 ushr 4))\n\n init {\n require((x or y or z or w or v) != 0) { \"Initial state must have at least one non-zero element.\" }\n\n // some trivial seeds can produce several values with zeroes in upper bits, so we discard first 64\n repeat(64) { nextInt() }\n }\n\n override fun nextInt(): Int {\n // Equivalent to the xorxow algorithm\n // From Marsaglia, G. 2003. Xorshift RNGs. J. Statis. Soft. 8, 14, p. 5\n var t = x\n t = t xor (t ushr 2)\n x = y\n y = z\n z = w\n val v0 = v\n w = v0\n t = (t xor (t shl 1)) xor v0 xor (v0 shl 4)\n v = t\n addend += 362437\n return t + addend\n }\n\n override fun nextBits(bitCount: Int): Int =\n nextInt().takeUpperBits(bitCount)\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"RangesKt\")\n\npackage kotlin.ranges\n\n/**\n * Represents a range of [Comparable] values.\n */\nprivate open class ComparableRange<T : Comparable<T>>(\n override val start: T,\n override val endInclusive: T\n) : ClosedRange<T> {\n\n override fun equals(other: Any?): Boolean {\n return other is ComparableRange<*> && (isEmpty() && other.isEmpty() ||\n start == other.start && endInclusive == other.endInclusive)\n }\n\n override fun hashCode(): Int {\n return if (isEmpty()) -1 else 31 * start.hashCode() + endInclusive.hashCode()\n }\n\n override fun toString(): String = \"$start..$endInclusive\"\n}\n\n/**\n * Creates a range from this [Comparable] value to the specified [that] value.\n *\n * This value needs to be smaller than or equal to [that] value, otherwise the returned range will be empty.\n * @sample samples.ranges.Ranges.rangeFromComparable\n */\npublic operator fun <T : Comparable<T>> T.rangeTo(that: T): ClosedRange<T> = ComparableRange(this, that)\n\n\n/**\n * Represents a range of floating point numbers.\n * Extends [ClosedRange] interface providing custom operation [lessThanOrEquals] for comparing values of range domain type.\n *\n * This interface is implemented by floating point ranges returned by [Float.rangeTo] and [Double.rangeTo] operators to\n * achieve IEEE-754 comparison order instead of total order of floating point numbers.\n */\n@SinceKotlin(\"1.1\")\npublic interface ClosedFloatingPointRange<T : Comparable<T>> : ClosedRange<T> {\n override fun contains(value: T): Boolean = lessThanOrEquals(start, value) && lessThanOrEquals(value, endInclusive)\n override fun isEmpty(): Boolean = !lessThanOrEquals(start, endInclusive)\n\n /**\n * Compares two values of range domain type and returns true if first is less than or equal to second.\n */\n fun lessThanOrEquals(a: T, b: T): Boolean\n}\n\n\n/**\n * A closed range of values of type `Double`.\n *\n * Numbers are compared with the ends of this range according to IEEE-754.\n */\nprivate class ClosedDoubleRange(\n start: Double,\n endInclusive: Double\n) : ClosedFloatingPointRange<Double> {\n private val _start = start\n private val _endInclusive = endInclusive\n override val start: Double get() = _start\n override val endInclusive: Double get() = _endInclusive\n\n override fun lessThanOrEquals(a: Double, b: Double): Boolean = a <= b\n\n override fun contains(value: Double): Boolean = value >= _start && value <= _endInclusive\n override fun isEmpty(): Boolean = !(_start <= _endInclusive)\n\n override fun equals(other: Any?): Boolean {\n return other is ClosedDoubleRange && (isEmpty() && other.isEmpty() ||\n _start == other._start && _endInclusive == other._endInclusive)\n }\n\n override fun hashCode(): Int {\n return if (isEmpty()) -1 else 31 * _start.hashCode() + _endInclusive.hashCode()\n }\n\n override fun toString(): String = \"$_start..$_endInclusive\"\n}\n\n/**\n * Creates a range from this [Double] value to the specified [that] value.\n *\n * Numbers are compared with the ends of this range according to IEEE-754.\n * @sample samples.ranges.Ranges.rangeFromDouble\n */\n@SinceKotlin(\"1.1\")\npublic operator fun Double.rangeTo(that: Double): ClosedFloatingPointRange<Double> = ClosedDoubleRange(this, that)\n\n\n/**\n * A closed range of values of type `Float`.\n *\n * Numbers are compared with the ends of this range according to IEEE-754.\n */\nprivate class ClosedFloatRange(\n start: Float,\n endInclusive: Float\n) : ClosedFloatingPointRange<Float> {\n private val _start = start\n private val _endInclusive = endInclusive\n override val start: Float get() = _start\n override val endInclusive: Float get() = _endInclusive\n\n override fun lessThanOrEquals(a: Float, b: Float): Boolean = a <= b\n\n override fun contains(value: Float): Boolean = value >= _start && value <= _endInclusive\n override fun isEmpty(): Boolean = !(_start <= _endInclusive)\n\n override fun equals(other: Any?): Boolean {\n return other is ClosedFloatRange && (isEmpty() && other.isEmpty() ||\n _start == other._start && _endInclusive == other._endInclusive)\n }\n\n override fun hashCode(): Int {\n return if (isEmpty()) -1 else 31 * _start.hashCode() + _endInclusive.hashCode()\n }\n\n override fun toString(): String = \"$_start..$_endInclusive\"\n}\n\n/**\n * Creates a range from this [Float] value to the specified [that] value.\n *\n * Numbers are compared with the ends of this range according to IEEE-754.\n * @sample samples.ranges.Ranges.rangeFromFloat\n */\n@SinceKotlin(\"1.1\")\npublic operator fun Float.rangeTo(that: Float): ClosedFloatingPointRange<Float> = ClosedFloatRange(this, that)\n\n\n/**\n * Returns `true` if this iterable range contains the specified [element].\n *\n * Always returns `false` if the [element] is `null`.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <T, R> R.contains(element: T?): Boolean where T : Any, R : Iterable<T>, R : ClosedRange<T> =\n element != null && contains(element)\n\n\ninternal fun checkStepIsPositive(isPositive: Boolean, step: Number) {\n if (!isPositive) throw IllegalArgumentException(\"Step must be positive, was: $step.\")\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect\n\nimport kotlin.jvm.JvmField\nimport kotlin.jvm.JvmStatic\n\n\n\n/**\n * Represents a type projection. Type projection is usually the argument to another type in a type usage.\n * For example, in the type `Array<out Number>`, `out Number` is the covariant projection of the type represented by the class `Number`.\n *\n * Type projection is either the star projection, or an entity consisting of a specific type plus optional variance.\n *\n * See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/generics.html#type-projections)\n * for more information.\n */\n@SinceKotlin(\"1.1\")\npublic data class KTypeProjection constructor(\n /**\n * The use-site variance specified in the projection, or `null` if this is a star projection.\n */\n public val variance: KVariance?,\n /**\n * The type specified in the projection, or `null` if this is a star projection.\n */\n public val type: KType?\n) {\n\n init {\n require((variance == null) == (type == null)) {\n if (variance == null)\n \"Star projection must have no type specified.\"\n else\n \"The projection variance $variance requires type to be specified.\"\n }\n }\n\n override fun toString(): String = when (variance) {\n null -> \"*\"\n KVariance.INVARIANT -> type.toString()\n KVariance.IN -> \"in $type\"\n KVariance.OUT -> \"out $type\"\n }\n\n public companion object {\n // provided for compiler access\n @JvmField\n @PublishedApi\n internal val star: KTypeProjection = KTypeProjection(null, null)\n\n /**\n * Star projection, denoted by the `*` character.\n * For example, in the type `KClass<*>`, `*` is the star projection.\n * See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/generics.html#star-projections)\n * for more information.\n */\n public val STAR: KTypeProjection get() = star\n\n /**\n * Creates an invariant projection of a given type. Invariant projection is just the type itself,\n * without any use-site variance modifiers applied to it.\n * For example, in the type `Set<String>`, `String` is an invariant projection of the type represented by the class `String`.\n */\n @JvmStatic\n public fun invariant(type: KType): KTypeProjection =\n KTypeProjection(KVariance.INVARIANT, type)\n\n /**\n * Creates a contravariant projection of a given type, denoted by the `in` modifier applied to a type.\n * For example, in the type `MutableList<in Number>`, `in Number` is a contravariant projection of the type of class `Number`.\n */\n @JvmStatic\n public fun contravariant(type: KType): KTypeProjection =\n KTypeProjection(KVariance.IN, type)\n\n /**\n * Creates a covariant projection of a given type, denoted by the `out` modifier applied to a type.\n * For example, in the type `Array<out Number>`, `out Number` is a covariant projection of the type of class `Number`.\n */\n @JvmStatic\n public fun covariant(type: KType): KTypeProjection =\n KTypeProjection(KVariance.OUT, type)\n }\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect\n\n/**\n * Represents variance applied to a type parameter on the declaration site (*declaration-site variance*),\n * or to a type in a projection (*use-site variance*).\n *\n * See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/generics.html#variance)\n * for more information.\n *\n * @see [KTypeParameter.variance]\n * @see [KTypeProjection]\n */\n@SinceKotlin(\"1.1\")\nenum class KVariance {\n /**\n * The affected type parameter or type is *invariant*, which means it has no variance applied to it.\n */\n INVARIANT,\n\n /**\n * The affected type parameter or type is *contravariant*. Denoted by the `in` modifier in the source code.\n */\n IN,\n\n /**\n * The affected type parameter or type is *covariant*. Denoted by the `out` modifier in the source code.\n */\n OUT,\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\n/**\n * An object to which char sequences and values can be appended.\n */\nexpect interface Appendable {\n /**\n * Appends the specified character [value] to this Appendable and returns this instance.\n *\n * @param value the character to append.\n */\n fun append(value: Char): Appendable\n\n /**\n * Appends the specified character sequence [value] to this Appendable and returns this instance.\n *\n * @param value the character sequence to append. If [value] is `null`, then the four characters `\"null\"` are appended to this Appendable.\n */\n fun append(value: CharSequence?): Appendable\n\n /**\n * Appends a subsequence of the specified character sequence [value] to this Appendable and returns this instance.\n *\n * @param value the character sequence from which a subsequence is appended. If [value] is `null`,\n * then characters are appended as if [value] contained the four characters `\"null\"`.\n * @param startIndex the beginning (inclusive) of the subsequence to append.\n * @param endIndex the end (exclusive) of the subsequence to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n */\n fun append(value: CharSequence?, startIndex: Int, endIndex: Int): Appendable\n}\n\n/**\n * Appends a subsequence of the specified character sequence [value] to this Appendable and returns this instance.\n *\n * @param value the character sequence from which a subsequence is appended.\n * @param startIndex the beginning (inclusive) of the subsequence to append.\n * @param endIndex the end (exclusive) of the subsequence to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T : Appendable> T.appendRange(value: CharSequence, startIndex: Int, endIndex: Int): T {\n @Suppress(\"UNCHECKED_CAST\")\n return append(value, startIndex, endIndex) as T\n}\n\n/**\n * Appends all arguments to the given [Appendable].\n */\npublic fun <T : Appendable> T.append(vararg value: CharSequence?): T {\n for (item in value)\n append(item)\n return this\n}\n\n/** Appends a line feed character (`\\n`) to this Appendable. */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun Appendable.appendLine(): Appendable = append('\\n')\n\n/** Appends value to the given Appendable and a line feed character (`\\n`) after it. */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun Appendable.appendLine(value: CharSequence?): Appendable = append(value).appendLine()\n\n/** Appends value to the given Appendable and a line feed character (`\\n`) after it. */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun Appendable.appendLine(value: Char): Appendable = append(value).appendLine()\n\n\ninternal fun <T> Appendable.appendElement(element: T, transform: ((T) -> CharSequence)?) {\n when {\n transform != null -> append(transform(element))\n element is CharSequence? -> append(element)\n element is Char -> append(element)\n else -> append(element.toString())\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CharsKt\")\n\npackage kotlin.text\n\n/**\n * Returns the numeric value of the decimal digit that this Char represents.\n * Throws an exception if this Char is not a valid decimal digit.\n *\n * A Char is considered to represent a decimal digit if the Char is one of the ASCII decimal digits '0' through '9'.\n * In this case, `this.code - '0'.code` is returned.\n *\n * @sample samples.text.Chars.digitToInt\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Char.digitToInt(): Int {\n if (this in '0'..'9') {\n return this - '0'\n }\n throw IllegalArgumentException(\"Char $this is not a decimal digit\")\n}\n\n/**\n * Returns the numeric value of the digit that this Char represents in the specified [radix].\n * Throws an exception if the [radix] is not in the range `2..36` or if this Char is not a valid digit in the specified [radix].\n *\n * A Char is considered to represent a digit in the specified [radix] if at least one of the following is true:\n * - The Char is one of the ASCII decimal digits '0' through '9' and its [code] is less than `radix + '0'.code`. In this case, `this.code - '0'.code` is returned.\n * - The Char is one of the uppercase Latin letters 'A' through 'Z' and its [code] is less than `radix + 'A'.code - 10`. In this case, `this.code - 'A'.code + 10` is returned.\n * - The Char is one of the lowercase Latin letters 'a' through 'z' and its [code] is less than `radix + 'a'.code - 10`. In this case, `this.code - 'a'.code + 10` is returned.\n *\n * @sample samples.text.Chars.digitToInt\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Char.digitToInt(radix: Int): Int {\n return digitToIntOrNull(radix) ?: throw IllegalArgumentException(\"Char $this is not a digit in the given radix=$radix\")\n}\n\n/**\n *\n * Returns the numeric value of the decimal digit that this Char represents, or `null` if this Char is not a valid decimal digit.\n *\n * A Char is considered to represent a decimal digit if the Char is one of the ASCII decimal digits '0' through '9'.\n * In this case, `this.code - '0'.code` is returned.\n *\n * @sample samples.text.Chars.digitToIntOrNull\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Char.digitToIntOrNull(): Int? {\n if (this in '0'..'9') {\n return this - '0'\n }\n return null\n}\n\n/**\n * Returns the numeric value of the digit that this Char represents in the specified [radix], or `null` if this Char is not a valid digit in the specified [radix].\n * Throws an exception if the [radix] is not in the range `2..36`.\n *\n * A Char is considered to represent a digit in the specified [radix] if at least one of the following is true:\n * - The Char is one of the ASCII decimal digits '0' through '9' and its [code] is less than `radix + '0'.code`. In this case, `this.code - '0'.code` is returned.\n * - The Char is one of the uppercase Latin letters 'A' through 'Z' and its [code] is less than `radix + 'A'.code - 10`. In this case, `this.code - 'A'.code + 10` is returned.\n * - The Char is one of the lowercase Latin letters 'a' through 'z' and its [code] is less than `radix + 'a'.code - 10`. In this case, `this.code - 'a'.code + 10` is returned.\n *\n * @sample samples.text.Chars.digitToIntOrNull\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Char.digitToIntOrNull(radix: Int): Int? {\n if (radix !in 2..36) {\n throw IllegalArgumentException(\"Invalid radix: $radix. Valid radix values are in range 2..36\")\n }\n if (this in '0'..'9') {\n val digit = this - '0'\n return if (digit < radix) digit else null\n }\n val a = if (this <= 'Z') 'A' else 'a'\n val digit = 10 + (this - a)\n return if (digit in 10 until radix) digit else null\n}\n\n/**\n * Returns the Char that represents this decimal digit.\n * Throws an exception if this value is not in the range `0..9`.\n *\n * If this value is in `0..9`, the decimal digit Char with code `'0'.code + this` is returned.\n *\n * @sample samples.text.Chars.digitToChar\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Int.digitToChar(): Char {\n if (this in 0..9) {\n return '0' + this\n }\n throw IllegalArgumentException(\"Int $this is not a decimal digit\")\n}\n\n/**\n * Returns the Char that represents this numeric digit value in the specified [radix].\n * Throws an exception if the [radix] is not in the range `2..36` or if this value is not in the range `0 until radix`.\n *\n * If this value is less than `10`, the decimal digit Char with code `'0'.code + this` is returned.\n * Otherwise, the uppercase Latin letter with code `'A'.code + this - 10` is returned.\n *\n * @sample samples.text.Chars.digitToChar\n */\n@ExperimentalStdlibApi\n@SinceKotlin(\"1.4\")\npublic fun Int.digitToChar(radix: Int): Char {\n if (radix !in 2..36) {\n throw IllegalArgumentException(\"Invalid radix: $radix. Valid radix values are in range 2..36\")\n }\n if (this < 0 || this >= radix) {\n throw IllegalArgumentException(\"Digit $this does not represent a valid digit in radix $radix\")\n }\n return if (this < 10) {\n '0' + this\n } else {\n 'A' + this - 10\n }\n}\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n */\npublic expect fun Char.toLowerCase(): Char\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function performs one-to-one character mapping.\n * To support one-to-many character mapping use the [lowercase] function.\n * If this character has no mapping equivalent, the character itself is returned.\n *\n * @sample samples.text.Chars.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun Char.lowercaseChar(): Char\n\n/**\n * Converts this character to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.\n * For example, `'\\u0130'.lowercase()` returns `\"\\u0069\\u0307\"`,\n * where `'\\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).\n * If this character has no lower case mapping, the result of `toString()` of this char is returned.\n *\n * @sample samples.text.Chars.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun Char.lowercase(): String\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n */\npublic expect fun Char.toUpperCase(): Char\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function performs one-to-one character mapping.\n * To support one-to-many character mapping use the [uppercase] function.\n * If this character has no mapping equivalent, the character itself is returned.\n *\n * @sample samples.text.Chars.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun Char.uppercaseChar(): Char\n\n/**\n * Converts this character to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.\n * For example, `'\\uFB00'.uppercase()` returns `\"\\u0046\\u0046\"`,\n * where `'\\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).\n * If this character has no upper case mapping, the result of `toString()` of this char is returned.\n *\n * @sample samples.text.Chars.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun Char.uppercase(): String\n\n/**\n * Concatenates this Char and a String.\n *\n * @sample samples.text.Chars.plus\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun Char.plus(other: String): String = this.toString() + other\n\n/**\n * Returns `true` if this character is equal to the [other] character, optionally ignoring character case.\n *\n * @param ignoreCase `true` to ignore character case when comparing characters. By default `false`.\n *\n * Two characters are considered the same ignoring case if at least one of the following is `true`:\n * - The two characters are the same (as compared by the == operator)\n * - Applying the method [uppercaseChar] to each character produces the same result\n * - Applying the method [lowercaseChar] to each character produces the same result\n *\n * @sample samples.text.Chars.equals\n */\n@OptIn(ExperimentalStdlibApi::class)\npublic fun Char.equals(other: Char, ignoreCase: Boolean = false): Boolean {\n if (this == other) return true\n if (!ignoreCase) return false\n\n if (this.uppercaseChar() == other.uppercaseChar()) return true\n if (this.lowercaseChar() == other.lowercaseChar()) return true\n return false\n}\n\n/**\n * Returns `true` if this character is a Unicode surrogate code unit.\n */\npublic fun Char.isSurrogate(): Boolean = this in Char.MIN_SURROGATE..Char.MAX_SURROGATE\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\n/**\n * Trims leading whitespace characters followed by [marginPrefix] from every line of a source string and removes\n * the first and the last lines if they are blank (notice difference blank vs empty).\n *\n * Doesn't affect a line if it doesn't contain [marginPrefix] except the first and the last blank lines.\n *\n * Doesn't preserve the original line endings.\n *\n * @param marginPrefix non-blank string, which is used as a margin delimiter. Default is `|` (pipe character).\n *\n * @sample samples.text.Strings.trimMargin\n * @see trimIndent\n * @see kotlin.text.isWhitespace\n */\npublic fun String.trimMargin(marginPrefix: String = \"|\"): String =\n replaceIndentByMargin(\"\", marginPrefix)\n\n/**\n * Detects indent by [marginPrefix] as it does [trimMargin] and replace it with [newIndent].\n *\n * @param marginPrefix non-blank string, which is used as a margin delimiter. Default is `|` (pipe character).\n */\npublic fun String.replaceIndentByMargin(newIndent: String = \"\", marginPrefix: String = \"|\"): String {\n require(marginPrefix.isNotBlank()) { \"marginPrefix must be non-blank string.\" }\n val lines = lines()\n\n return lines.reindent(length + newIndent.length * lines.size, getIndentFunction(newIndent), { line ->\n val firstNonWhitespaceIndex = line.indexOfFirst { !it.isWhitespace() }\n\n when {\n firstNonWhitespaceIndex == -1 -> null\n line.startsWith(marginPrefix, firstNonWhitespaceIndex) -> line.substring(firstNonWhitespaceIndex + marginPrefix.length)\n else -> null\n }\n })\n}\n\n/**\n * Detects a common minimal indent of all the input lines, removes it from every line and also removes the first and the last\n * lines if they are blank (notice difference blank vs empty).\n *\n * Note that blank lines do not affect the detected indent level.\n *\n * In case if there are non-blank lines with no leading whitespace characters (no indent at all) then the\n * common indent is 0, and therefore this function doesn't change the indentation.\n *\n * Doesn't preserve the original line endings.\n *\n * @sample samples.text.Strings.trimIndent\n * @see trimMargin\n * @see kotlin.text.isBlank\n */\npublic fun String.trimIndent(): String = replaceIndent(\"\")\n\n/**\n * Detects a common minimal indent like it does [trimIndent] and replaces it with the specified [newIndent].\n */\npublic fun String.replaceIndent(newIndent: String = \"\"): String {\n val lines = lines()\n\n val minCommonIndent = lines\n .filter(String::isNotBlank)\n .map(String::indentWidth)\n .minOrNull() ?: 0\n\n return lines.reindent(length + newIndent.length * lines.size, getIndentFunction(newIndent), { line -> line.drop(minCommonIndent) })\n}\n\n/**\n * Prepends [indent] to every line of the original string.\n *\n * Doesn't preserve the original line endings.\n */\npublic fun String.prependIndent(indent: String = \" \"): String =\n lineSequence()\n .map {\n when {\n it.isBlank() -> {\n when {\n it.length < indent.length -> indent\n else -> it\n }\n }\n else -> indent + it\n }\n }\n .joinToString(\"\\n\")\n\nprivate fun String.indentWidth(): Int = indexOfFirst { !it.isWhitespace() }.let { if (it == -1) length else it }\n\nprivate fun getIndentFunction(indent: String) = when {\n indent.isEmpty() -> { line: String -> line }\n else -> { line: String -> indent + line }\n}\n\nprivate inline fun List<String>.reindent(\n resultSizeEstimate: Int,\n indentAddFunction: (String) -> String,\n indentCutFunction: (String) -> String?\n): String {\n val lastIndex = lastIndex\n return mapIndexedNotNull { index, value ->\n if ((index == 0 || index == lastIndex) && value.isBlank())\n null\n else\n indentCutFunction(value)?.let(indentAddFunction) ?: value\n }\n .joinTo(StringBuilder(resultSizeEstimate), \"\\n\")\n .toString()\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.text\n\n/**\n * Represents a collection of captured groups in a single match of a regular expression.\n *\n * This collection has size of `groupCount + 1` where `groupCount` is the count of groups in the regular expression.\n * Groups are indexed from 1 to `groupCount` and group with the index 0 corresponds to the entire match.\n *\n * An element of the collection at the particular index can be `null`,\n * if the corresponding group in the regular expression is optional and\n * there was no match captured by that group.\n */\npublic interface MatchGroupCollection : Collection<MatchGroup?> {\n\n /** Returns a group with the specified [index].\n *\n * @return An instance of [MatchGroup] if the group with the specified [index] was matched or `null` otherwise.\n *\n * Groups are indexed from 1 to the count of groups in the regular expression. A group with the index 0\n * corresponds to the entire match.\n */\n public operator fun get(index: Int): MatchGroup?\n}\n\n/**\n * Extends [MatchGroupCollection] by introducing a way to get matched groups by name, when regex supports it.\n */\n@SinceKotlin(\"1.1\")\npublic interface MatchNamedGroupCollection : MatchGroupCollection {\n /**\n * Returns a named group with the specified [name].\n * @return An instance of [MatchGroup] if the group with the specified [name] was matched or `null` otherwise.\n * @throws IllegalArgumentException if there is no group with the specified [name] defined in the regex pattern.\n * @throws UnsupportedOperationException if getting named groups isn't supported on the current platform.\n */\n public operator fun get(name: String): MatchGroup?\n}\n\n/**\n * Represents the results from a single regular expression match.\n */\npublic interface MatchResult {\n /** The range of indices in the original string where match was captured. */\n public val range: IntRange\n /** The substring from the input string captured by this match. */\n public val value: String\n /**\n * A collection of groups matched by the regular expression.\n *\n * This collection has size of `groupCount + 1` where `groupCount` is the count of groups in the regular expression.\n * Groups are indexed from 1 to `groupCount` and group with the index 0 corresponds to the entire match.\n */\n public val groups: MatchGroupCollection\n /**\n * A list of matched indexed group values.\n *\n * This list has size of `groupCount + 1` where `groupCount` is the count of groups in the regular expression.\n * Groups are indexed from 1 to `groupCount` and group with the index 0 corresponds to the entire match.\n *\n * If the group in the regular expression is optional and there were no match captured by that group,\n * corresponding item in [groupValues] is an empty string.\n *\n * @sample samples.text.Regexps.matchDestructuringToGroupValues\n */\n public val groupValues: List<String>\n\n /**\n * An instance of [MatchResult.Destructured] wrapper providing components for destructuring assignment of group values.\n *\n * component1 corresponds to the value of the first group, component2 — of the second, and so on.\n *\n * @sample samples.text.Regexps.matchDestructuringToGroupValues\n */\n public val destructured: Destructured get() = Destructured(this)\n\n /** Returns a new [MatchResult] with the results for the next match, starting at the position\n * at which the last match ended (at the character after the last matched character).\n */\n public fun next(): MatchResult?\n\n /**\n * Provides components for destructuring assignment of group values.\n *\n * [component1] corresponds to the value of the first group, [component2] — of the second, and so on.\n *\n * If the group in the regular expression is optional and there were no match captured by that group,\n * corresponding component value is an empty string.\n *\n * @sample samples.text.Regexps.matchDestructuringToGroupValues\n */\n public class Destructured internal constructor(public val match: MatchResult) {\n @kotlin.internal.InlineOnly\n public operator inline fun component1(): String = match.groupValues[1]\n @kotlin.internal.InlineOnly\n public operator inline fun component2(): String = match.groupValues[2]\n @kotlin.internal.InlineOnly\n public operator inline fun component3(): String = match.groupValues[3]\n @kotlin.internal.InlineOnly\n public operator inline fun component4(): String = match.groupValues[4]\n @kotlin.internal.InlineOnly\n public operator inline fun component5(): String = match.groupValues[5]\n @kotlin.internal.InlineOnly\n public operator inline fun component6(): String = match.groupValues[6]\n @kotlin.internal.InlineOnly\n public operator inline fun component7(): String = match.groupValues[7]\n @kotlin.internal.InlineOnly\n public operator inline fun component8(): String = match.groupValues[8]\n @kotlin.internal.InlineOnly\n public operator inline fun component9(): String = match.groupValues[9]\n @kotlin.internal.InlineOnly\n public operator inline fun component10(): String = match.groupValues[10]\n\n /**\n * Returns destructured group values as a list of strings.\n * First value in the returned list corresponds to the value of the first group, and so on.\n *\n * @sample samples.text.Regexps.matchDestructuringToGroupValues\n */\n public fun toList(): List<String> = match.groupValues.subList(1, match.groupValues.size)\n }\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\nimport kotlin.contracts.*\nimport kotlin.math.abs\n\n@OptIn(ExperimentalTime::class)\nprivate inline val storageUnit get() = DurationUnit.NANOSECONDS\n\n/**\n * Represents the amount of time one instant of time is away from another instant.\n *\n * A negative duration is possible in a situation when the second instant is earlier than the first one.\n * An infinite duration value [Duration.INFINITE] can be used to represent infinite timeouts.\n *\n * To construct a duration use either the extension function [toDuration],\n * or the extension properties [hours], [minutes], [seconds], and so on,\n * available on [Int], [Long], and [Double] numeric types.\n *\n * To get the value of this duration expressed in a particular [duration units][DurationUnit]\n * use the functions [toInt], [toLong], and [toDouble]\n * or the properties [inHours], [inMinutes], [inSeconds], [inNanoseconds], and so on.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\npublic inline class Duration internal constructor(internal val value: Double) : Comparable<Duration> {\n// TODO: backend fails on init block, wait for KT-28055\n\n// init {\n// require(_value.isNaN().not())\n// }\n\n companion object {\n /** The duration equal to exactly 0 seconds. */\n public val ZERO: Duration = Duration(0.0)\n\n /** The duration whose value is positive infinity. It is useful for representing timeouts that should never expire. */\n public val INFINITE: Duration = Duration(Double.POSITIVE_INFINITY)\n\n /** Converts the given time duration [value] expressed in the specified [sourceUnit] into the specified [targetUnit]. */\n public fun convert(value: Double, sourceUnit: DurationUnit, targetUnit: DurationUnit): Double =\n convertDurationUnit(value, sourceUnit, targetUnit)\n }\n\n // arithmetic operators\n\n /** Returns the negative of this value. */\n public operator fun unaryMinus(): Duration = Duration(-value)\n\n /** Returns a duration whose value is the sum of this and [other] duration values. */\n public operator fun plus(other: Duration): Duration = Duration(value + other.value)\n\n /** Returns a duration whose value is the difference between this and [other] duration values. */\n public operator fun minus(other: Duration): Duration = Duration(value - other.value)\n\n /** Returns a duration whose value is this duration value multiplied by the given [scale] number. */\n public operator fun times(scale: Int): Duration = Duration(value * scale)\n\n /** Returns a duration whose value is this duration value multiplied by the given [scale] number. */\n public operator fun times(scale: Double): Duration = Duration(value * scale)\n\n /** Returns a duration whose value is this duration value divided by the given [scale] number. */\n public operator fun div(scale: Int): Duration = Duration(value / scale)\n\n /** Returns a duration whose value is this duration value divided by the given [scale] number. */\n public operator fun div(scale: Double): Duration = Duration(value / scale)\n\n /** Returns a number that is the ratio of this and [other] duration values. */\n public operator fun div(other: Duration): Double = this.value / other.value\n\n /** Returns true, if the duration value is less than zero. */\n public fun isNegative(): Boolean = value < 0\n\n /** Returns true, if the duration value is greater than zero. */\n public fun isPositive(): Boolean = value > 0\n\n /** Returns true, if the duration value is infinite. */\n public fun isInfinite(): Boolean = value.isInfinite()\n\n /** Returns true, if the duration value is finite. */\n public fun isFinite(): Boolean = value.isFinite()\n\n /** Returns the absolute value of this value. The returned value is always non-negative. */\n public val absoluteValue: Duration get() = if (isNegative()) -this else this\n\n override fun compareTo(other: Duration): Int = this.value.compareTo(other.value)\n\n\n // splitting to components\n\n /**\n * Splits this duration into days, hours, minutes, seconds, and nanoseconds and executes the given [action] with these components.\n * The result of [action] is returned as the result of this function.\n *\n * - `nanoseconds` represents the whole number of nanoseconds in this duration, and its absolute value is less than 1_000_000_000;\n * - `seconds` represents the whole number of seconds in this duration, and its absolute value is less than 60;\n * - `minutes` represents the whole number of minutes in this duration, and its absolute value is less than 60;\n * - `hours` represents the whole number of hours in this duration, and its absolute value is less than 24;\n * - `days` represents the whole number of days in this duration.\n * If the value doesn't fit in [Int] range, i.e. it's greater than [Int.MAX_VALUE] or less than [Int.MIN_VALUE],\n * it is coerced into that range.\n */\n public inline fun <T> toComponents(action: (days: Int, hours: Int, minutes: Int, seconds: Int, nanoseconds: Int) -> T): T {\n contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }\n return action(inDays.toInt(), hoursComponent, minutesComponent, secondsComponent, nanosecondsComponent)\n }\n\n /**\n * Splits this duration into hours, minutes, seconds, and nanoseconds and executes the given [action] with these components.\n * The result of [action] is returned as the result of this function.\n *\n * - `nanoseconds` represents the whole number of nanoseconds in this duration, and its absolute value is less than 1_000_000_000;\n * - `seconds` represents the whole number of seconds in this duration, and its absolute value is less than 60;\n * - `minutes` represents the whole number of minutes in this duration, and its absolute value is less than 60;\n * - `hours` represents the whole number of hours in this duration.\n * If the value doesn't fit in [Int] range, i.e. it's greater than [Int.MAX_VALUE] or less than [Int.MIN_VALUE],\n * it is coerced into that range.\n */\n public inline fun <T> toComponents(action: (hours: Int, minutes: Int, seconds: Int, nanoseconds: Int) -> T): T {\n contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }\n return action(inHours.toInt(), minutesComponent, secondsComponent, nanosecondsComponent)\n }\n\n /**\n * Splits this duration into minutes, seconds, and nanoseconds and executes the given [action] with these components.\n * The result of [action] is returned as the result of this function.\n *\n * - `nanoseconds` represents the whole number of nanoseconds in this duration, and its absolute value is less than 1_000_000_000;\n * - `seconds` represents the whole number of seconds in this duration, and its absolute value is less than 60;\n * - `minutes` represents the whole number of minutes in this duration.\n * If the value doesn't fit in [Int] range, i.e. it's greater than [Int.MAX_VALUE] or less than [Int.MIN_VALUE],\n * it is coerced into that range.\n */\n public inline fun <T> toComponents(action: (minutes: Int, seconds: Int, nanoseconds: Int) -> T): T {\n contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }\n return action(inMinutes.toInt(), secondsComponent, nanosecondsComponent)\n }\n\n /**\n * Splits this duration into seconds, and nanoseconds and executes the given [action] with these components.\n * The result of [action] is returned as the result of this function.\n *\n * - `nanoseconds` represents the whole number of nanoseconds in this duration, and its absolute value is less than 1_000_000_000;\n * - `seconds` represents the whole number of seconds in this duration.\n * If the value doesn't fit in [Long] range, i.e. it's greater than [Long.MAX_VALUE] or less than [Long.MIN_VALUE],\n * it is coerced into that range.\n */\n public inline fun <T> toComponents(action: (seconds: Long, nanoseconds: Int) -> T): T {\n contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }\n return action(inSeconds.toLong(), nanosecondsComponent)\n }\n\n @PublishedApi\n internal val hoursComponent: Int get() = (inHours % 24).toInt()\n @PublishedApi\n internal val minutesComponent: Int get() = (inMinutes % 60).toInt()\n @PublishedApi\n internal val secondsComponent: Int get() = (inSeconds % 60).toInt()\n @PublishedApi\n internal val nanosecondsComponent: Int get() = (inNanoseconds % 1e9).toInt()\n\n\n // conversion to units\n\n /** Returns the value of this duration expressed as a [Double] number of the specified [unit]. */\n public fun toDouble(unit: DurationUnit): Double = convertDurationUnit(value, storageUnit, unit)\n\n /**\n * Returns the value of this duration expressed as a [Long] number of the specified [unit].\n *\n * If the value doesn't fit in the range of [Long] type, it is coerced into that range, see the conversion [Double.toLong] for details.\n */\n public fun toLong(unit: DurationUnit): Long = toDouble(unit).toLong()\n\n /**\n * Returns the value of this duration expressed as an [Int] number of the specified [unit].\n *\n * If the value doesn't fit in the range of [Int] type, it is coerced into that range, see the conversion [Double.toInt] for details.\n */\n public fun toInt(unit: DurationUnit): Int = toDouble(unit).toInt()\n\n /** The value of this duration expressed as a [Double] number of days. */\n public val inDays: Double get() = toDouble(DurationUnit.DAYS)\n\n /** The value of this duration expressed as a [Double] number of hours. */\n public val inHours: Double get() = toDouble(DurationUnit.HOURS)\n\n /** The value of this duration expressed as a [Double] number of minutes. */\n public val inMinutes: Double get() = toDouble(DurationUnit.MINUTES)\n\n /** The value of this duration expressed as a [Double] number of seconds. */\n public val inSeconds: Double get() = toDouble(DurationUnit.SECONDS)\n\n /** The value of this duration expressed as a [Double] number of milliseconds. */\n public val inMilliseconds: Double get() = toDouble(DurationUnit.MILLISECONDS)\n\n /** The value of this duration expressed as a [Double] number of microseconds. */\n public val inMicroseconds: Double get() = toDouble(DurationUnit.MICROSECONDS)\n\n /** The value of this duration expressed as a [Double] number of nanoseconds. */\n public val inNanoseconds: Double get() = toDouble(DurationUnit.NANOSECONDS)\n\n // shortcuts\n\n /**\n * Returns the value of this duration expressed as a [Long] number of nanoseconds.\n *\n * If the value doesn't fit in the range of [Long] type, it is coerced into that range, see the conversion [Double.toLong] for details.\n *\n * The range of durations that can be expressed as a `Long` number of nanoseconds is approximately ±292 years.\n */\n public fun toLongNanoseconds(): Long = toLong(DurationUnit.NANOSECONDS)\n\n /**\n * Returns the value of this duration expressed as a [Long] number of milliseconds.\n *\n * The value is coerced to the range of [Long] type, if it doesn't fit in that range, see the conversion [Double.toLong] for details.\n *\n * The range of durations that can be expressed as a `Long` number of milliseconds is approximately ±292 million years.\n */\n public fun toLongMilliseconds(): Long = toLong(DurationUnit.MILLISECONDS)\n\n /**\n * Returns a string representation of this duration value expressed in the unit which yields the most compact and readable number value.\n *\n * Special cases:\n * - zero duration is formatted as `\"0s\"`\n * - the infinite duration is formatted as `\"Infinity\"` without unit\n * - very small durations (less than 1e-15 s) are expressed in seconds and formatted in scientific notation\n * - very big durations (more than 1e+7 days) are expressed in days and formatted in scientific notation\n *\n * @return the value of duration in the automatically determined unit followed by that unit abbreviated name: `d`, `h`, `m`, `s`, `ms`, `us`, or `ns`.\n *\n * @sample samples.time.Durations.toStringDefault\n */\n override fun toString(): String = when {\n isInfinite() -> value.toString()\n value == 0.0 -> \"0s\"\n else -> {\n val absNs = absoluteValue.inNanoseconds\n var scientific = false\n var maxDecimals = 0\n val unit = when {\n absNs < 1e-6 -> DurationUnit.SECONDS.also { scientific = true }\n absNs < 1 -> DurationUnit.NANOSECONDS.also { maxDecimals = 7 }\n absNs < 1e3 -> DurationUnit.NANOSECONDS\n absNs < 1e6 -> DurationUnit.MICROSECONDS\n absNs < 1e9 -> DurationUnit.MILLISECONDS\n absNs < 1000e9 -> DurationUnit.SECONDS\n absNs < 60_000e9 -> DurationUnit.MINUTES\n absNs < 3600_000e9 -> DurationUnit.HOURS\n absNs < 86400e9 * 1e7 -> DurationUnit.DAYS\n else -> DurationUnit.DAYS.also { scientific = true }\n }\n val value = toDouble(unit)\n when {\n scientific -> formatScientific(value)\n maxDecimals > 0 -> formatUpToDecimals(value, maxDecimals)\n else -> formatToExactDecimals(value, precision(abs(value)))\n } + unit.shortName()\n }\n }\n\n private fun precision(value: Double): Int = when {\n value < 1 -> 3\n value < 10 -> 2\n value < 100 -> 1\n else -> 0\n }\n\n /**\n * Returns a string representation of this duration value expressed in the given [unit]\n * and formatted with the specified [decimals] number of digits after decimal point.\n *\n * Special cases:\n * - the infinite duration is formatted as `\"Infinity\"` without unit\n *\n * @return the value of duration in the specified [unit] followed by that unit abbreviated name: `d`, `h`, `m`, `s`, `ms`, `us`, or `ns`.\n *\n * @throws IllegalArgumentException if [decimals] is less than zero.\n *\n * @sample samples.time.Durations.toStringDecimals\n */\n public fun toString(unit: DurationUnit, decimals: Int = 0): String {\n require(decimals >= 0) { \"decimals must be not negative, but was $decimals\" }\n if (isInfinite()) return value.toString()\n val number = toDouble(unit)\n return when {\n abs(number) < 1e14 -> formatToExactDecimals(number, decimals.coerceAtMost(12))\n else -> formatScientific(number)\n } + unit.shortName()\n }\n\n\n /**\n * Returns an ISO-8601 based string representation of this duration.\n *\n * The returned value is presented in the format `PThHmMs.fS`, where `h`, `m`, `s` are the integer components of this duration (see [toComponents])\n * and `f` is a fractional part of second. Depending on the roundness of the value the fractional part can be formatted with either\n * 0, 3, 6, or 9 decimal digits.\n *\n * If the hours component absolute value of this duration is greater than [Int.MAX_VALUE], it is replaced with [Int.MAX_VALUE],\n * so the infinite duration is formatted as `\"PT2147483647H\".\n *\n * Negative durations are indicated with the sign `-` in the beginning of the returned string, for example, `\"-PT5M30S\"`.\n *\n * @sample samples.time.Durations.toIsoString\n */\n @OptIn(ExperimentalStdlibApi::class)\n public fun toIsoString(): String = buildString {\n if (isNegative()) append('-')\n append(\"PT\")\n absoluteValue.toComponents { hours, minutes, seconds, nanoseconds ->\n val hasHours = hours != 0\n val hasSeconds = seconds != 0 || nanoseconds != 0\n val hasMinutes = minutes != 0 || (hasSeconds && hasHours)\n if (hasHours) {\n append(hours).append('H')\n }\n if (hasMinutes) {\n append(minutes).append('M')\n }\n if (hasSeconds || (!hasHours && !hasMinutes)) {\n append(seconds)\n if (nanoseconds != 0) {\n append('.')\n val nss = nanoseconds.toString().padStart(9, '0')\n when {\n nanoseconds % 1_000_000 == 0 -> appendRange(nss, 0, 3)\n nanoseconds % 1_000 == 0 -> appendRange(nss, 0, 6)\n else -> append(nss)\n }\n }\n append('S')\n }\n }\n }\n\n}\n\n// constructing from number of units\n// extension functions\n\n/** Returns a [Duration] equal to this [Int] number of the specified [unit]. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic fun Int.toDuration(unit: DurationUnit): Duration = toDouble().toDuration(unit)\n\n/** Returns a [Duration] equal to this [Long] number of the specified [unit]. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic fun Long.toDuration(unit: DurationUnit): Duration = toDouble().toDuration(unit)\n\n/** Returns a [Duration] equal to this [Double] number of the specified [unit]. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic fun Double.toDuration(unit: DurationUnit): Duration = Duration(convertDurationUnit(this, unit, storageUnit))\n\n// constructing from number of units\n// extension properties\n\n/** Returns a [Duration] equal to this [Int] number of nanoseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)\n\n/** Returns a [Duration] equal to this [Long] number of nanoseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)\n\n/** Returns a [Duration] equal to this [Double] number of nanoseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)\n\n/** Returns a [Duration] equal to this [Int] number of microseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.microseconds get() = toDuration(DurationUnit.MICROSECONDS)\n\n/** Returns a [Duration] equal to this [Long] number of microseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.microseconds get() = toDuration(DurationUnit.MICROSECONDS)\n\n/** Returns a [Duration] equal to this [Double] number of microseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.microseconds get() = toDuration(DurationUnit.MICROSECONDS)\n\n/** Returns a [Duration] equal to this [Int] number of milliseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)\n\n/** Returns a [Duration] equal to this [Long] number of milliseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)\n\n/** Returns a [Duration] equal to this [Double] number of milliseconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)\n\n/** Returns a [Duration] equal to this [Int] number of seconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.seconds get() = toDuration(DurationUnit.SECONDS)\n\n/** Returns a [Duration] equal to this [Long] number of seconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.seconds get() = toDuration(DurationUnit.SECONDS)\n\n/** Returns a [Duration] equal to this [Double] number of seconds. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.seconds get() = toDuration(DurationUnit.SECONDS)\n\n/** Returns a [Duration] equal to this [Int] number of minutes. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.minutes get() = toDuration(DurationUnit.MINUTES)\n\n/** Returns a [Duration] equal to this [Long] number of minutes. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.minutes get() = toDuration(DurationUnit.MINUTES)\n\n/** Returns a [Duration] equal to this [Double] number of minutes. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.minutes get() = toDuration(DurationUnit.MINUTES)\n\n/** Returns a [Duration] equal to this [Int] number of hours. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.hours get() = toDuration(DurationUnit.HOURS)\n\n/** Returns a [Duration] equal to this [Long] number of hours. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.hours get() = toDuration(DurationUnit.HOURS)\n\n/** Returns a [Duration] equal to this [Double] number of hours. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.hours get() = toDuration(DurationUnit.HOURS)\n\n/** Returns a [Duration] equal to this [Int] number of days. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Int.days get() = toDuration(DurationUnit.DAYS)\n\n/** Returns a [Duration] equal to this [Long] number of days. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Long.days get() = toDuration(DurationUnit.DAYS)\n\n/** Returns a [Duration] equal to this [Double] number of days. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic val Double.days get() = toDuration(DurationUnit.DAYS)\n\n\n/** Returns a duration whose value is the specified [duration] value multiplied by this number. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@kotlin.internal.InlineOnly\npublic inline operator fun Int.times(duration: Duration): Duration = duration * this\n\n/** Returns a duration whose value is the specified [duration] value multiplied by this number. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@kotlin.internal.InlineOnly\npublic inline operator fun Double.times(duration: Duration): Duration = duration * this\n\n\ninternal expect fun formatToExactDecimals(value: Double, decimals: Int): String\ninternal expect fun formatUpToDecimals(value: Double, decimals: Int): String\ninternal expect fun formatScientific(value: Double): String","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass()\n@file:kotlin.jvm.JvmName(\"DurationUnitKt\")\n\npackage kotlin.time\n\n\n/**\n * The list of possible time measurement units, in which a duration can be expressed.\n *\n * The smallest time unit is [NANOSECONDS] and the largest is [DAYS], which corresponds to exactly 24 [HOURS].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic expect enum class DurationUnit {\n /**\n * Time unit representing one nanosecond, which is 1/1000 of a microsecond.\n */\n NANOSECONDS,\n /**\n * Time unit representing one microsecond, which is 1/1000 of a millisecond.\n */\n MICROSECONDS,\n /**\n * Time unit representing one millisecond, which is 1/1000 of a second.\n */\n MILLISECONDS,\n /**\n * Time unit representing one second.\n */\n SECONDS,\n /**\n * Time unit representing one minute.\n */\n MINUTES,\n /**\n * Time unit representing one hour.\n */\n HOURS,\n /**\n * Time unit representing one day, which is always equal to 24 hours.\n */\n DAYS;\n}\n\n/** Converts the given time duration [value] expressed in the specified [sourceUnit] into the specified [targetUnit]. */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal expect fun convertDurationUnit(value: Double, sourceUnit: DurationUnit, targetUnit: DurationUnit): Double\n\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal fun DurationUnit.shortName(): String = when (this) {\n DurationUnit.NANOSECONDS -> \"ns\"\n DurationUnit.MICROSECONDS -> \"us\"\n DurationUnit.MILLISECONDS -> \"ms\"\n DurationUnit.SECONDS -> \"s\"\n DurationUnit.MINUTES -> \"m\"\n DurationUnit.HOURS -> \"h\"\n DurationUnit.DAYS -> \"d\"\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\n/**\n * A source of time for measuring time intervals.\n *\n * The only operation provided by the time source is [markNow]. It returns a [TimeMark], which can be used to query the elapsed time later.\n *\n * @see [measureTime]\n * @see [measureTimedValue]\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic interface TimeSource {\n /**\n * Marks a point in time on this time source.\n *\n * The returned [TimeMark] instance encapsulates the captured time point and allows querying\n * the duration of time interval [elapsed][TimeMark.elapsedNow] from that point.\n */\n public fun markNow(): TimeMark\n\n /**\n * The most precise time source available in the platform.\n *\n * This time source returns its readings from a source of monotonic time when it is available in a target platform,\n * and resorts to a non-monotonic time source otherwise.\n */\n public object Monotonic : TimeSource by MonotonicTimeSource {\n override fun toString(): String = MonotonicTimeSource.toString()\n }\n\n\n public companion object {\n\n }\n}\n\n/**\n * Represents a time point notched on a particular [TimeSource]. Remains bound to the time source it was taken from\n * and allows querying for the duration of time elapsed from that point (see the function [elapsedNow]).\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic abstract class TimeMark {\n /**\n * Returns the amount of time passed from this mark measured with the time source from which this mark was taken.\n *\n * Note that the value returned by this function can change on subsequent invocations.\n */\n public abstract fun elapsedNow(): Duration\n\n /**\n * Returns a time mark on the same time source that is ahead of this time mark by the specified [duration].\n *\n * The returned time mark is more _late_ when the [duration] is positive, and more _early_ when the [duration] is negative.\n */\n public open operator fun plus(duration: Duration): TimeMark = AdjustedTimeMark(this, duration)\n\n /**\n * Returns a time mark on the same time source that is behind this time mark by the specified [duration].\n *\n * The returned time mark is more _early_ when the [duration] is positive, and more _late_ when the [duration] is negative.\n */\n public open operator fun minus(duration: Duration): TimeMark = plus(-duration)\n\n\n /**\n * Returns true if this time mark has passed according to the time source from which this mark was taken.\n *\n * Note that the value returned by this function can change on subsequent invocations.\n * If the time source is monotonic, it can change only from `false` to `true`, namely, when the time mark becomes behind the current point of the time source.\n */\n public fun hasPassedNow(): Boolean = !elapsedNow().isNegative()\n\n /**\n * Returns false if this time mark has not passed according to the time source from which this mark was taken.\n *\n * Note that the value returned by this function can change on subsequent invocations.\n * If the time source is monotonic, it can change only from `true` to `false`, namely, when the time mark becomes behind the current point of the time source.\n */\n public fun hasNotPassedNow(): Boolean = elapsedNow().isNegative()\n}\n\n\n@ExperimentalTime\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Deprecated(\n \"Subtracting one TimeMark from another is not a well defined operation because these time marks could have been obtained from the different time sources.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"UNUSED_PARAMETER\")\npublic inline operator fun TimeMark.minus(other: TimeMark): Duration = throw Error(\"Operation is disallowed.\")\n\n@ExperimentalTime\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\n@Deprecated(\n \"Comparing one TimeMark to another is not a well defined operation because these time marks could have been obtained from the different time sources.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"UNUSED_PARAMETER\")\npublic inline operator fun TimeMark.compareTo(other: TimeMark): Int = throw Error(\"Operation is disallowed.\")\n\n\n@ExperimentalTime\nprivate class AdjustedTimeMark(val mark: TimeMark, val adjustment: Duration) : TimeMark() {\n override fun elapsedNow(): Duration = mark.elapsedNow() - adjustment\n\n override fun plus(duration: Duration): TimeMark = AdjustedTimeMark(mark, adjustment + duration)\n}\n\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use TimeSource interface instead.\", ReplaceWith(\"TimeSource\", \"kotlin.time.TimeSource\"), DeprecationLevel.ERROR)\npublic typealias Clock = TimeSource\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use TimeMark class instead.\", ReplaceWith(\"TimeMark\", \"kotlin.time.TimeMark\"), DeprecationLevel.ERROR)\npublic typealias ClockMark = TimeMark\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\nimport kotlin.contracts.*\n\n/**\n * A mutable sequence of characters.\n *\n * String builder can be used to efficiently perform multiple string manipulation operations.\n */\nexpect class StringBuilder : Appendable, CharSequence {\n /** Constructs an empty string builder. */\n constructor()\n\n /** Constructs an empty string builder with the specified initial [capacity]. */\n constructor(capacity: Int)\n\n /** Constructs a string builder that contains the same characters as the specified [content] char sequence. */\n constructor(content: CharSequence)\n\n /** Constructs a string builder that contains the same characters as the specified [content] string. */\n @SinceKotlin(\"1.3\")\n// @ExperimentalStdlibApi\n constructor(content: String)\n\n override val length: Int\n\n override operator fun get(index: Int): Char\n\n override fun subSequence(startIndex: Int, endIndex: Int): CharSequence\n\n override fun append(value: Char): StringBuilder\n override fun append(value: CharSequence?): StringBuilder\n override fun append(value: CharSequence?, startIndex: Int, endIndex: Int): StringBuilder\n\n /**\n * Reverses the contents of this string builder and returns this instance.\n *\n * Surrogate pairs included in this string builder are treated as single characters.\n * Therefore, the order of the high-low surrogates is never reversed.\n *\n * Note that the reverse operation may produce new surrogate pairs that were unpaired low-surrogates and high-surrogates before the operation.\n * For example, reversing `\"\\uDC00\\uD800\"` produces `\"\\uD800\\uDC00\"` which is a valid surrogate pair.\n */\n fun reverse(): StringBuilder\n\n /**\n * Appends the string representation of the specified object [value] to this string builder and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was appended to this string builder.\n */\n fun append(value: Any?): StringBuilder\n\n /**\n * Appends the string representation of the specified boolean [value] to this string builder and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was appended to this string builder.\n */\n @SinceKotlin(\"1.3\")\n fun append(value: Boolean): StringBuilder\n\n /**\n * Appends characters in the specified character array [value] to this string builder and returns this instance.\n *\n * Characters are appended in order, starting at the index 0.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun append(value: CharArray): StringBuilder\n\n /**\n * Appends the specified string [value] to this string builder and returns this instance.\n *\n * If [value] is `null`, then the four characters `\"null\"` are appended.\n */\n @SinceKotlin(\"1.3\")\n fun append(value: String?): StringBuilder\n\n /**\n * Returns the current capacity of this string builder.\n *\n * The capacity is the maximum length this string builder can have before an allocation occurs.\n */\n @SinceKotlin(\"1.3\")\n// @ExperimentalStdlibApi\n @Deprecated(\"Obtaining StringBuilder capacity is not supported in JS and common code.\", level = DeprecationLevel.ERROR)\n fun capacity(): Int\n\n /**\n * Ensures that the capacity of this string builder is at least equal to the specified [minimumCapacity].\n *\n * If the current capacity is less than the [minimumCapacity], a new backing storage is allocated with greater capacity.\n * Otherwise, this method takes no action and simply returns.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun ensureCapacity(minimumCapacity: Int)\n\n /**\n * Returns the index within this string builder of the first occurrence of the specified [string].\n *\n * Returns `-1` if the specified [string] does not occur in this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun indexOf(string: String): Int\n\n /**\n * Returns the index within this string builder of the first occurrence of the specified [string],\n * starting at the specified [startIndex].\n *\n * Returns `-1` if the specified [string] does not occur in this string builder starting at the specified [startIndex].\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun indexOf(string: String, startIndex: Int): Int\n\n /**\n * Returns the index within this string builder of the last occurrence of the specified [string].\n * The last occurrence of empty string `\"\"` is considered to be at the index equal to `this.length`.\n *\n * Returns `-1` if the specified [string] does not occur in this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun lastIndexOf(string: String): Int\n\n /**\n * Returns the index within this string builder of the last occurrence of the specified [string],\n * starting from the specified [startIndex] toward the beginning.\n *\n * Returns `-1` if the specified [string] does not occur in this string builder starting at the specified [startIndex].\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun lastIndexOf(string: String, startIndex: Int): Int\n\n /**\n * Inserts the string representation of the specified boolean [value] into this string builder at the specified [index] and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was inserted into this string builder at the specified [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: Boolean): StringBuilder\n\n /**\n * Inserts the specified character [value] into this string builder at the specified [index] and returns this instance.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: Char): StringBuilder\n\n /**\n * Inserts characters in the specified character array [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in same order as in the [value] character array, starting at [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: CharArray): StringBuilder\n\n /**\n * Inserts characters in the specified character sequence [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in the same order as in the [value] character sequence, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the character sequence from which characters are inserted. If [value] is `null`, then the four characters `\"null\"` are inserted.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: CharSequence?): StringBuilder\n\n /**\n * Inserts the string representation of the specified object [value] into this string builder at the specified [index] and returns this instance.\n *\n * The overall effect is exactly as if the [value] were converted to a string by the `value.toString()` method,\n * and then that string was inserted into this string builder at the specified [index].\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: Any?): StringBuilder\n\n /**\n * Inserts the string [value] into this string builder at the specified [index] and returns this instance.\n *\n * If [value] is `null`, then the four characters `\"null\"` are inserted.\n *\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun insert(index: Int, value: String?): StringBuilder\n\n /**\n * Sets the length of this string builder to the specified [newLength].\n *\n * If the [newLength] is less than the current length, it is changed to the specified [newLength].\n * Otherwise, null characters '\\u0000' are appended to this string builder until its length is less than the [newLength].\n *\n * Note that in Kotlin/JS [set] operator function has non-constant execution time complexity.\n * Therefore, increasing length of this string builder and then updating each character by index may slow down your program.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] if [newLength] is less than zero.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun setLength(newLength: Int)\n\n /**\n * Returns a new [String] that contains characters in this string builder at [startIndex] (inclusive) and up to the [length] (exclusive).\n *\n * @throws IndexOutOfBoundsException if [startIndex] is less than zero or greater than the length of this string builder.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun substring(startIndex: Int): String\n\n /**\n * Returns a new [String] that contains characters in this string builder at [startIndex] (inclusive) and up to the [endIndex] (exclusive).\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun substring(startIndex: Int, endIndex: Int): String\n\n /**\n * Attempts to reduce storage used for this string builder.\n *\n * If the backing storage of this string builder is larger than necessary to hold its current contents,\n * then it may be resized to become more space efficient.\n * Calling this method may, but is not required to, affect the value of the [capacity] property.\n */\n @SinceKotlin(\"1.4\")\n @WasExperimental(ExperimentalStdlibApi::class)\n fun trimToSize()\n}\n\n\n/**\n * Clears the content of this string builder making it empty and returns this instance.\n *\n * @sample samples.text.Strings.clearStringBuilder\n */\n@SinceKotlin(\"1.3\")\npublic expect fun StringBuilder.clear(): StringBuilder\n\n/**\n * Sets the character at the specified [index] to the specified [value].\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect operator fun StringBuilder.set(index: Int, value: Char)\n\n/**\n * Replaces characters in the specified range of this string builder with characters in the specified string [value] and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to replace.\n * @param endIndex the end (exclusive) of the range to replace.\n * @param value the string to replace with.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] if [startIndex] is less than zero, greater than the length of this string builder, or `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.setRange(startIndex: Int, endIndex: Int, value: String): StringBuilder\n\n/**\n * Removes the character at the specified [index] from this string builder and returns this instance.\n *\n * If the `Char` at the specified [index] is part of a supplementary code point, this method does not remove the entire supplementary character.\n *\n * @param index the index of `Char` to remove.\n *\n * @throws IndexOutOfBoundsException if [index] is out of bounds of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.deleteAt(index: Int): StringBuilder\n\n/**\n * Removes characters in the specified range from this string builder and returns this instance.\n *\n * @param startIndex the beginning (inclusive) of the range to remove.\n * @param endIndex the end (exclusive) of the range to remove.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.deleteRange(startIndex: Int, endIndex: Int): StringBuilder\n\n/**\n * Copies characters from this string builder into the [destination] character array.\n *\n * @param destination the array to copy to.\n * @param destinationOffset the position in the array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the range to copy, 0 by default.\n * @param endIndex the end (exclusive) of the range to copy, length of this string builder by default.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this string builder indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.toCharArray(destination: CharArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = this.length)\n\n/**\n * Appends characters in a subarray of the specified character array [value] to this string builder and returns this instance.\n *\n * Characters are appended in order, starting at specified [startIndex].\n *\n * @param value the array from which characters are appended.\n * @param startIndex the beginning (inclusive) of the subarray to append.\n * @param endIndex the end (exclusive) of the subarray to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.appendRange(value: CharArray, startIndex: Int, endIndex: Int): StringBuilder\n\n/**\n * Appends a subsequence of the specified character sequence [value] to this string builder and returns this instance.\n *\n * @param value the character sequence from which a subsequence is appended.\n * @param startIndex the beginning (inclusive) of the subsequence to append.\n * @param endIndex the end (exclusive) of the subsequence to append.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.appendRange(value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder\n\n/**\n * Inserts characters in a subarray of the specified character array [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in same order as in the [value] array, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the array from which characters are inserted.\n * @param startIndex the beginning (inclusive) of the subarray to insert.\n * @param endIndex the end (exclusive) of the subarray to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.insertRange(index: Int, value: CharArray, startIndex: Int, endIndex: Int): StringBuilder\n\n/**\n * Inserts characters in a subsequence of the specified character sequence [value] into this string builder at the specified [index] and returns this instance.\n *\n * The inserted characters go in the same order as in the [value] character sequence, starting at [index].\n *\n * @param index the position in this string builder to insert at.\n * @param value the character sequence from which a subsequence is inserted.\n * @param startIndex the beginning (inclusive) of the subsequence to insert.\n * @param endIndex the end (exclusive) of the subsequence to insert.\n *\n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of the [value] character sequence indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException if [index] is less than zero or greater than the length of this string builder.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic expect fun StringBuilder.insertRange(index: Int, value: CharSequence, startIndex: Int, endIndex: Int): StringBuilder\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\n@Deprecated(\"Use append(value: Any?) instead\", ReplaceWith(\"append(value = obj)\"), DeprecationLevel.WARNING)\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.append(obj: Any?): StringBuilder = this.append(obj)\n\n/**\n * Builds new string by populating newly created [StringBuilder] using provided [builderAction]\n * and then converting it to [String].\n */\n@kotlin.internal.InlineOnly\npublic inline fun buildString(builderAction: StringBuilder.() -> Unit): String {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return StringBuilder().apply(builderAction).toString()\n}\n\n/**\n * Builds new string by populating newly created [StringBuilder] initialized with the given [capacity]\n * using provided [builderAction] and then converting it to [String].\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun buildString(capacity: Int, builderAction: StringBuilder.() -> Unit): String {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return StringBuilder(capacity).apply(builderAction).toString()\n}\n\n/**\n * Appends all arguments to the given StringBuilder.\n */\npublic fun StringBuilder.append(vararg value: String?): StringBuilder {\n for (item in value)\n append(item)\n return this\n}\n\n/**\n * Appends all arguments to the given StringBuilder.\n */\npublic fun StringBuilder.append(vararg value: Any?): StringBuilder {\n for (item in value)\n append(item)\n return this\n}\n\n/** Appends a line feed character (`\\n`) to this StringBuilder. */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(): StringBuilder = append('\\n')\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: CharSequence?): StringBuilder = append(value).appendLine()\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: String?): StringBuilder = append(value).appendLine()\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: Any?): StringBuilder = append(value).appendLine()\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: CharArray): StringBuilder = append(value).appendLine()\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: Char): StringBuilder = append(value).appendLine()\n\n/** Appends [value] to this [StringBuilder], followed by a line feed character (`\\n`). */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun StringBuilder.appendLine(value: Boolean): StringBuilder = append(value).appendLine()\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\ninternal expect object MonotonicTimeSource : TimeSource\n\n/**\n * An abstract class used to implement time sources that return their readings as [Long] values in the specified [unit].\n *\n * @property unit The unit in which this time source's readings are expressed.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic abstract class AbstractLongTimeSource(protected val unit: DurationUnit) : TimeSource {\n /**\n * This protected method should be overridden to return the current reading of the time source expressed as a [Long] number\n * in the unit specified by the [unit] property.\n */\n protected abstract fun read(): Long\n\n private class LongTimeMark(private val startedAt: Long, private val timeSource: AbstractLongTimeSource, private val offset: Duration) : TimeMark() {\n override fun elapsedNow(): Duration = (timeSource.read() - startedAt).toDuration(timeSource.unit) - offset\n override fun plus(duration: Duration): TimeMark = LongTimeMark(startedAt, timeSource, offset + duration)\n }\n\n override fun markNow(): TimeMark = LongTimeMark(read(), this, Duration.ZERO)\n}\n\n/**\n * An abstract class used to implement time sources that return their readings as [Double] values in the specified [unit].\n *\n * @property unit The unit in which this time source's readings are expressed.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic abstract class AbstractDoubleTimeSource(protected val unit: DurationUnit) : TimeSource {\n /**\n * This protected method should be overridden to return the current reading of the time source expressed as a [Double] number\n * in the unit specified by the [unit] property.\n */\n protected abstract fun read(): Double\n\n private class DoubleTimeMark(private val startedAt: Double, private val timeSource: AbstractDoubleTimeSource, private val offset: Duration) : TimeMark() {\n override fun elapsedNow(): Duration = (timeSource.read() - startedAt).toDuration(timeSource.unit) - offset\n override fun plus(duration: Duration): TimeMark = DoubleTimeMark(startedAt, timeSource, offset + duration)\n }\n\n override fun markNow(): TimeMark = DoubleTimeMark(read(), this, Duration.ZERO)\n}\n\n/**\n * A time source that has programmatically updatable readings. It is useful as a predictable source of time in tests.\n *\n * The current reading value can be advanced by the specified duration amount with the operator [plusAssign]:\n *\n * ```\n * val timeSource = TestTimeSource()\n * timeSource += 10.seconds\n * ```\n *\n * Implementation note: the current reading value is stored as a [Long] number of nanoseconds,\n * thus it's capable to represent a time range of approximately ±292 years.\n * Should the reading value overflow as the result of [plusAssign] operation, an [IllegalStateException] is thrown.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic class TestTimeSource : AbstractLongTimeSource(unit = DurationUnit.NANOSECONDS) {\n private var reading: Long = 0L\n\n override fun read(): Long = reading\n\n /**\n * Advances the current reading value of this time source by the specified [duration].\n *\n * [duration] value is rounded down towards zero when converting it to a [Long] number of nanoseconds.\n * For example, if the duration being added is `0.6.nanoseconds`, the reading doesn't advance because\n * the duration value is rounded to zero nanoseconds.\n *\n * @throws IllegalStateException when the reading value overflows as the result of this operation.\n */\n public operator fun plusAssign(duration: Duration) {\n val delta = duration.toDouble(unit)\n val longDelta = delta.toLong()\n reading = if (longDelta != Long.MIN_VALUE && longDelta != Long.MAX_VALUE) {\n // when delta fits in long, add it as long\n val newReading = reading + longDelta\n if (reading xor longDelta >= 0 && reading xor newReading < 0) overflow(duration)\n newReading\n } else {\n // when delta is greater than long, add it as double\n val newReading = reading + delta\n if (newReading > Long.MAX_VALUE || newReading < Long.MIN_VALUE) overflow(duration)\n newReading.toLong()\n }\n }\n\n private fun overflow(duration: Duration) {\n throw IllegalStateException(\"TestTimeSource will overflow if its reading ${reading}ns is advanced by $duration.\")\n }\n}\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use TimeSource.Monotonic instead.\", ReplaceWith(\"TimeSource.Monotonic\", \"kotlin.time.TimeSource\"), DeprecationLevel.ERROR)\npublic typealias MonoClock = TimeSource.Monotonic\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use AbstractLongTimeSource instead.\", ReplaceWith(\"AbstractLongTimeSource\", \"kotlin.time.AbstractLongTimeSource\"), DeprecationLevel.ERROR)\npublic typealias AbstractLongClock = AbstractLongTimeSource\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use AbstractDoubleTimeSource instead.\", ReplaceWith(\"AbstractDoubleTimeSource\", \"kotlin.time.AbstractDoubleTimeSource\"), DeprecationLevel.ERROR)\npublic typealias AbstractDoubleClock = AbstractDoubleTimeSource\n\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\n@Deprecated(\"Use TestTimeSource instead.\", ReplaceWith(\"TestTimeSource\", \"kotlin.time.TestTimeSource\"), DeprecationLevel.ERROR)\npublic typealias TestClock = TestTimeSource\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.time\n\nimport kotlin.contracts.*\n\n/**\n * Executes the given function [block] and returns the duration of elapsed time interval.\n *\n * The elapsed time is measured with [TimeSource.Monotonic].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic inline fun measureTime(block: () -> Unit): Duration {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return TimeSource.Monotonic.measureTime(block)\n}\n\n\n/**\n * Executes the given function [block] and returns the duration of elapsed time interval.\n *\n * The elapsed time is measured with the specified `this` [TimeSource] instance.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic inline fun TimeSource.measureTime(block: () -> Unit): Duration {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val mark = markNow()\n block()\n return mark.elapsedNow()\n}\n\n\n/**\n * Data class representing a result of executing an action, along with the duration of elapsed time interval.\n *\n * @property value the result of the action.\n * @property duration the time elapsed to execute the action.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic data class TimedValue<T>(val value: T, val duration: Duration)\n\n/**\n * Executes the given function [block] and returns an instance of [TimedValue] class, containing both\n * the result of the function execution and the duration of elapsed time interval.\n *\n * The elapsed time is measured with [TimeSource.Monotonic].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic inline fun <T> measureTimedValue(block: () -> T): TimedValue<T> {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n return TimeSource.Monotonic.measureTimedValue(block)\n}\n\n/**\n * Executes the given [block] and returns an instance of [TimedValue] class, containing both\n * the result of function execution and the duration of elapsed time interval.\n *\n * The elapsed time is measured with the specified `this` [TimeSource] instance.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalTime\npublic inline fun <T> TimeSource.measureTimedValue(block: () -> T): TimedValue<T> {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val mark = markNow()\n val result = block()\n return TimedValue(result, mark.elapsedNow())\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmName(\"LazyKt\")\n@file:kotlin.jvm.JvmMultifileClass\n\npackage kotlin\n\nimport kotlin.reflect.KProperty\n\n/**\n * Represents a value with lazy initialization.\n *\n * To create an instance of [Lazy] use the [lazy] function.\n */\npublic interface Lazy<out T> {\n /**\n * Gets the lazily initialized value of the current Lazy instance.\n * Once the value was initialized it must not change during the rest of lifetime of this Lazy instance.\n */\n public val value: T\n\n /**\n * Returns `true` if a value for this Lazy instance has been already initialized, and `false` otherwise.\n * Once this function has returned `true` it stays `true` for the rest of lifetime of this Lazy instance.\n */\n public fun isInitialized(): Boolean\n}\n\n/**\n * Creates a new instance of the [Lazy] that is already initialized with the specified [value].\n */\npublic fun <T> lazyOf(value: T): Lazy<T> = InitializedLazyImpl(value)\n\n/**\n * An extension to delegate a read-only property of type [T] to an instance of [Lazy].\n *\n * This extension allows to use instances of Lazy for property delegation:\n * `val property: String by lazy { initializer }`\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> Lazy<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value\n\n/**\n * Specifies how a [Lazy] instance synchronizes initialization among multiple threads.\n */\npublic enum class LazyThreadSafetyMode {\n\n /**\n * Locks are used to ensure that only a single thread can initialize the [Lazy] instance.\n */\n SYNCHRONIZED,\n\n /**\n * Initializer function can be called several times on concurrent access to uninitialized [Lazy] instance value,\n * but only the first returned value will be used as the value of [Lazy] instance.\n */\n PUBLICATION,\n\n /**\n * No locks are used to synchronize an access to the [Lazy] instance value; if the instance is accessed from multiple threads, its behavior is undefined.\n *\n * This mode should not be used unless the [Lazy] instance is guaranteed never to be initialized from more than one thread.\n */\n NONE,\n}\n\n\ninternal object UNINITIALIZED_VALUE\n\n// internal to be called from lazy in JS\ninternal class UnsafeLazyImpl<out T>(initializer: () -> T) : Lazy<T>, Serializable {\n private var initializer: (() -> T)? = initializer\n private var _value: Any? = UNINITIALIZED_VALUE\n\n override val value: T\n get() {\n if (_value === UNINITIALIZED_VALUE) {\n _value = initializer!!()\n initializer = null\n }\n @Suppress(\"UNCHECKED_CAST\")\n return _value as T\n }\n\n override fun isInitialized(): Boolean = _value !== UNINITIALIZED_VALUE\n\n override fun toString(): String = if (isInitialized()) value.toString() else \"Lazy value not initialized yet.\"\n\n private fun writeReplace(): Any = InitializedLazyImpl(value)\n}\n\ninternal class InitializedLazyImpl<out T>(override val value: T) : Lazy<T>, Serializable {\n\n override fun isInitialized(): Boolean = true\n\n override fun toString(): String = value.toString()\n\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmName(\"TuplesKt\")\n\npackage kotlin\n\n\n/**\n * Represents a generic pair of two values.\n *\n * There is no meaning attached to values in this class, it can be used for any purpose.\n * Pair exhibits value semantics, i.e. two pairs are equal if both components are equal.\n *\n * An example of decomposing it into values:\n * @sample samples.misc.Tuples.pairDestructuring\n *\n * @param A type of the first value.\n * @param B type of the second value.\n * @property first First value.\n * @property second Second value.\n * @constructor Creates a new instance of Pair.\n */\npublic data class Pair<out A, out B>(\n public val first: A,\n public val second: B\n) : Serializable {\n\n /**\n * Returns string representation of the [Pair] including its [first] and [second] values.\n */\n public override fun toString(): String = \"($first, $second)\"\n}\n\n/**\n * Creates a tuple of type [Pair] from this and [that].\n *\n * This can be useful for creating [Map] literals with less noise, for example:\n * @sample samples.collections.Maps.Instantiation.mapFromPairs\n */\npublic infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)\n\n/**\n * Converts this pair into a list.\n * @sample samples.misc.Tuples.pairToList\n */\npublic fun <T> Pair<T, T>.toList(): List<T> = listOf(first, second)\n\n/**\n * Represents a triad of values\n *\n * There is no meaning attached to values in this class, it can be used for any purpose.\n * Triple exhibits value semantics, i.e. two triples are equal if all three components are equal.\n * An example of decomposing it into values:\n * @sample samples.misc.Tuples.tripleDestructuring\n *\n * @param A type of the first value.\n * @param B type of the second value.\n * @param C type of the third value.\n * @property first First value.\n * @property second Second value.\n * @property third Third value.\n */\npublic data class Triple<out A, out B, out C>(\n public val first: A,\n public val second: B,\n public val third: C\n) : Serializable {\n\n /**\n * Returns string representation of the [Triple] including its [first], [second] and [third] values.\n */\n public override fun toString(): String = \"($first, $second, $third)\"\n}\n\n/**\n * Converts this triple into a list.\n * @sample samples.misc.Tuples.tripleToList\n */\npublic fun <T> Triple<T, T, T>.toList(): List<T> = listOf(first, second, third)\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin\n\nimport kotlin.experimental.*\n\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline class ULong @PublishedApi internal constructor(@PublishedApi internal val data: Long) : Comparable<ULong> {\n\n companion object {\n /**\n * A constant holding the minimum value an instance of ULong can have.\n */\n public const val MIN_VALUE: ULong = ULong(0)\n\n /**\n * A constant holding the maximum value an instance of ULong can have.\n */\n public const val MAX_VALUE: ULong = ULong(-1)\n\n /**\n * The number of bytes used to represent an instance of ULong in a binary form.\n */\n public const val SIZE_BYTES: Int = 8\n\n /**\n * The number of bits used to represent an instance of ULong in a binary form.\n */\n public const val SIZE_BITS: Int = 64\n }\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UByte): Int = this.compareTo(other.toULong())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UShort): Int = this.compareTo(other.toULong())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UInt): Int = this.compareTo(other.toULong())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n @Suppress(\"OVERRIDE_BY_INLINE\")\n public override inline operator fun compareTo(other: ULong): Int = ulongCompare(this.data, other.data)\n\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UByte): ULong = this.plus(other.toULong())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UShort): ULong = this.plus(other.toULong())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UInt): ULong = this.plus(other.toULong())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: ULong): ULong = ULong(this.data.plus(other.data))\n\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UByte): ULong = this.minus(other.toULong())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UShort): ULong = this.minus(other.toULong())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UInt): ULong = this.minus(other.toULong())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: ULong): ULong = ULong(this.data.minus(other.data))\n\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UByte): ULong = this.times(other.toULong())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UShort): ULong = this.times(other.toULong())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: UInt): ULong = this.times(other.toULong())\n /** Multiplies this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun times(other: ULong): ULong = ULong(this.data.times(other.data))\n\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UByte): ULong = this.div(other.toULong())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UShort): ULong = this.div(other.toULong())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: UInt): ULong = this.div(other.toULong())\n /** Divides this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun div(other: ULong): ULong = ulongDivide(this, other)\n\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UByte): ULong = this.rem(other.toULong())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UShort): ULong = this.rem(other.toULong())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: UInt): ULong = this.rem(other.toULong())\n /** Calculates the remainder of dividing this value by the other value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rem(other: ULong): ULong = ulongRemainder(this, other)\n\n /** Increments this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun inc(): ULong = ULong(data.inc())\n /** Decrements this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun dec(): ULong = ULong(data.dec())\n\n /** Creates a range from this value to the specified [other] value. */\n @kotlin.internal.InlineOnly\n public inline operator fun rangeTo(other: ULong): ULongRange = ULongRange(this, other)\n\n /**\n * Shifts this value left by the [bitCount] number of bits.\n *\n * Note that only the six lowest-order bits of the [bitCount] are used as the shift distance.\n * The shift distance actually used is therefore always in the range `0..63`.\n */\n @kotlin.internal.InlineOnly\n public inline infix fun shl(bitCount: Int): ULong = ULong(data shl bitCount)\n\n /**\n * Shifts this value right by the [bitCount] number of bits, filling the leftmost bits with zeros.\n *\n * Note that only the six lowest-order bits of the [bitCount] are used as the shift distance.\n * The shift distance actually used is therefore always in the range `0..63`.\n */\n @kotlin.internal.InlineOnly\n public inline infix fun shr(bitCount: Int): ULong = ULong(data ushr bitCount)\n\n /** Performs a bitwise AND operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun and(other: ULong): ULong = ULong(this.data and other.data)\n /** Performs a bitwise OR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun or(other: ULong): ULong = ULong(this.data or other.data)\n /** Performs a bitwise XOR operation between the two values. */\n @kotlin.internal.InlineOnly\n public inline infix fun xor(other: ULong): ULong = ULong(this.data xor other.data)\n /** Inverts the bits in this value. */\n @kotlin.internal.InlineOnly\n public inline fun inv(): ULong = ULong(data.inv())\n\n /**\n * Converts this [ULong] value to [Byte].\n *\n * If this value is less than or equals to [Byte.MAX_VALUE], the resulting `Byte` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `Byte` value is represented by the least significant 8 bits of this `ULong` value.\n * Note that the resulting `Byte` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toByte(): Byte = data.toByte()\n /**\n * Converts this [ULong] value to [Short].\n *\n * If this value is less than or equals to [Short.MAX_VALUE], the resulting `Short` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `Short` value is represented by the least significant 16 bits of this `ULong` value.\n * Note that the resulting `Short` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toShort(): Short = data.toShort()\n /**\n * Converts this [ULong] value to [Int].\n *\n * If this value is less than or equals to [Int.MAX_VALUE], the resulting `Int` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `Int` value is represented by the least significant 32 bits of this `ULong` value.\n * Note that the resulting `Int` value may be negative.\n */\n @kotlin.internal.InlineOnly\n public inline fun toInt(): Int = data.toInt()\n /**\n * Converts this [ULong] value to [Long].\n *\n * If this value is less than or equals to [Long.MAX_VALUE], the resulting `Long` value represents\n * the same numerical value as this `ULong`. Otherwise the result is negative.\n *\n * The resulting `Long` value has the same binary representation as this `ULong` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toLong(): Long = data\n\n /**\n * Converts this [ULong] value to [UByte].\n *\n * If this value is less than or equals to [UByte.MAX_VALUE], the resulting `UByte` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `UByte` value is represented by the least significant 8 bits of this `ULong` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUByte(): UByte = data.toUByte()\n /**\n * Converts this [ULong] value to [UShort].\n *\n * If this value is less than or equals to [UShort.MAX_VALUE], the resulting `UShort` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `UShort` value is represented by the least significant 16 bits of this `ULong` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUShort(): UShort = data.toUShort()\n /**\n * Converts this [ULong] value to [UInt].\n *\n * If this value is less than or equals to [UInt.MAX_VALUE], the resulting `UInt` value represents\n * the same numerical value as this `ULong`.\n *\n * The resulting `UInt` value is represented by the least significant 32 bits of this `ULong` value.\n */\n @kotlin.internal.InlineOnly\n public inline fun toUInt(): UInt = data.toUInt()\n /** Returns this value. */\n @kotlin.internal.InlineOnly\n public inline fun toULong(): ULong = this\n\n /**\n * Converts this [ULong] value to [Float].\n *\n * The resulting value is the closest `Float` to this `ULong` value.\n * In case when this `ULong` value is exactly between two `Float`s,\n * the one with zero at least significant bit of mantissa is selected.\n */\n @kotlin.internal.InlineOnly\n public inline fun toFloat(): Float = this.toDouble().toFloat()\n /**\n * Converts this [ULong] value to [Double].\n *\n * The resulting value is the closest `Double` to this `ULong` value.\n * In case when this `ULong` value is exactly between two `Double`s,\n * the one with zero at least significant bit of mantissa is selected.\n */\n @kotlin.internal.InlineOnly\n public inline fun toDouble(): Double = ulongToDouble(data)\n\n public override fun toString(): String = ulongToString(data)\n\n}\n\n/**\n * Converts this [Byte] value to [ULong].\n *\n * If this value is positive, the resulting `ULong` value represents the same numerical value as this `Byte`.\n *\n * The least significant 8 bits of the resulting `ULong` value are the same as the bits of this `Byte` value,\n * whereas the most significant 56 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Byte.toULong(): ULong = ULong(this.toLong())\n/**\n * Converts this [Short] value to [ULong].\n *\n * If this value is positive, the resulting `ULong` value represents the same numerical value as this `Short`.\n *\n * The least significant 16 bits of the resulting `ULong` value are the same as the bits of this `Short` value,\n * whereas the most significant 48 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Short.toULong(): ULong = ULong(this.toLong())\n/**\n * Converts this [Int] value to [ULong].\n *\n * If this value is positive, the resulting `ULong` value represents the same numerical value as this `Int`.\n *\n * The least significant 32 bits of the resulting `ULong` value are the same as the bits of this `Int` value,\n * whereas the most significant 32 bits are filled with the sign bit of this value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Int.toULong(): ULong = ULong(this.toLong())\n/**\n * Converts this [Long] value to [ULong].\n *\n * If this value is positive, the resulting `ULong` value represents the same numerical value as this `Long`.\n *\n * The resulting `ULong` value has the same binary representation as this `Long` value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Long.toULong(): ULong = ULong(this)\n\n/**\n * Converts this [Float] value to [ULong].\n *\n * The fractional part, if any, is rounded down towards zero.\n * Returns zero if this `Float` value is negative or `NaN`, [ULong.MAX_VALUE] if it's bigger than `ULong.MAX_VALUE`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Float.toULong(): ULong = doubleToULong(this.toDouble())\n/**\n * Converts this [Double] value to [ULong].\n *\n * The fractional part, if any, is rounded down towards zero.\n * Returns zero if this `Double` value is negative or `NaN`, [ULong.MAX_VALUE] if it's bigger than `ULong.MAX_VALUE`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun Double.toULong(): ULong = doubleToULong(this)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.experimental\n\n/** Performs a bitwise AND operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Byte.and(other: Byte): Byte = (this.toInt() and other.toInt()).toByte()\n\n/** Performs a bitwise OR operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Byte.or(other: Byte): Byte = (this.toInt() or other.toInt()).toByte()\n\n/** Performs a bitwise XOR operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Byte.xor(other: Byte): Byte = (this.toInt() xor other.toInt()).toByte()\n\n/** Inverts the bits in this value. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun Byte.inv(): Byte = (this.toInt().inv()).toByte()\n\n\n/** Performs a bitwise AND operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Short.and(other: Short): Short = (this.toInt() and other.toInt()).toShort()\n\n/** Performs a bitwise OR operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Short.or(other: Short): Short = (this.toInt() or other.toInt()).toShort()\n\n/** Performs a bitwise XOR operation between the two values. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline infix fun Short.xor(other: Short): Short = (this.toInt() xor other.toInt()).toShort()\n\n/** Inverts the bits in this value. */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun Short.inv(): Short = (this.toInt().inv()).toShort()\n\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.ranges\n\n\n\nimport kotlin.internal.*\n\n/**\n * A range of values of type `UInt`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic class UIntRange(start: UInt, endInclusive: UInt) : UIntProgression(start, endInclusive, 1), ClosedRange<UInt> {\n override val start: UInt get() = first\n override val endInclusive: UInt get() = last\n\n override fun contains(value: UInt): Boolean = first <= value && value <= last\n\n override fun isEmpty(): Boolean = first > last\n\n override fun equals(other: Any?): Boolean =\n other is UIntRange && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * first.toInt() + last.toInt())\n\n override fun toString(): String = \"$first..$last\"\n\n companion object {\n /** An empty range of values of type UInt. */\n public val EMPTY: UIntRange = UIntRange(UInt.MAX_VALUE, UInt.MIN_VALUE)\n }\n}\n\n/**\n * A progression of values of type `UInt`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic open class UIntProgression\ninternal constructor(\n start: UInt,\n endInclusive: UInt,\n step: Int\n) : Iterable<UInt> {\n init {\n if (step == 0.toInt()) throw kotlin.IllegalArgumentException(\"Step must be non-zero.\")\n if (step == Int.MIN_VALUE) throw kotlin.IllegalArgumentException(\"Step must be greater than Int.MIN_VALUE to avoid overflow on negation.\")\n }\n\n /**\n * The first element in the progression.\n */\n public val first: UInt = start\n\n /**\n * The last element in the progression.\n */\n public val last: UInt = getProgressionLastElement(start, endInclusive, step)\n\n /**\n * The step of the progression.\n */\n public val step: Int = step\n\n override fun iterator(): UIntIterator = UIntProgressionIterator(first, last, step)\n\n /** Checks if the progression is empty. */\n public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last\n\n override fun equals(other: Any?): Boolean =\n other is UIntProgression && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last && step == other.step)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (31 * first.toInt() + last.toInt()) + step.toInt())\n\n override fun toString(): String = if (step > 0) \"$first..$last step $step\" else \"$first downTo $last step ${-step}\"\n\n companion object {\n /**\n * Creates UIntProgression within the specified bounds of a closed range.\n\n * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step].\n * In order to go backwards the [step] must be negative.\n *\n * [step] must be greater than `Int.MIN_VALUE` and not equal to zero.\n */\n public fun fromClosedRange(rangeStart: UInt, rangeEnd: UInt, step: Int): UIntProgression = UIntProgression(rangeStart, rangeEnd, step)\n }\n}\n\n\n/**\n * An iterator over a progression of values of type `UInt`.\n * @property step the number by which the value is incremented on each step.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\nprivate class UIntProgressionIterator(first: UInt, last: UInt, step: Int) : UIntIterator() {\n private val finalElement = last\n private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n private val step = step.toUInt() // use 2-complement math for negative steps\n private var next = if (hasNext) first else finalElement\n\n override fun hasNext(): Boolean = hasNext\n\n override fun nextUInt(): UInt {\n val value = next\n if (value == finalElement) {\n if (!hasNext) throw kotlin.NoSuchElementException()\n hasNext = false\n } else {\n next += step\n }\n return value\n }\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.collections\n\n/** An iterator over a sequence of values of type `UByte`. */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic abstract class UByteIterator : Iterator<UByte> {\n override final fun next() = nextUByte()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextUByte(): UByte\n}\n\n/** An iterator over a sequence of values of type `UShort`. */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic abstract class UShortIterator : Iterator<UShort> {\n override final fun next() = nextUShort()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextUShort(): UShort\n}\n\n/** An iterator over a sequence of values of type `UInt`. */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic abstract class UIntIterator : Iterator<UInt> {\n override final fun next() = nextUInt()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextUInt(): UInt\n}\n\n/** An iterator over a sequence of values of type `ULong`. */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic abstract class ULongIterator : Iterator<ULong> {\n override final fun next() = nextULong()\n\n /** Returns the next value in the sequence without boxing. */\n public abstract fun nextULong(): ULong\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin.ranges\n\n\n\nimport kotlin.internal.*\n\n/**\n * A range of values of type `ULong`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic class ULongRange(start: ULong, endInclusive: ULong) : ULongProgression(start, endInclusive, 1), ClosedRange<ULong> {\n override val start: ULong get() = first\n override val endInclusive: ULong get() = last\n\n override fun contains(value: ULong): Boolean = first <= value && value <= last\n\n override fun isEmpty(): Boolean = first > last\n\n override fun equals(other: Any?): Boolean =\n other is ULongRange && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (first xor (first shr 32)).toInt() + (last xor (last shr 32)).toInt())\n\n override fun toString(): String = \"$first..$last\"\n\n companion object {\n /** An empty range of values of type ULong. */\n public val EMPTY: ULongRange = ULongRange(ULong.MAX_VALUE, ULong.MIN_VALUE)\n }\n}\n\n/**\n * A progression of values of type `ULong`.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic open class ULongProgression\ninternal constructor(\n start: ULong,\n endInclusive: ULong,\n step: Long\n) : Iterable<ULong> {\n init {\n if (step == 0.toLong()) throw kotlin.IllegalArgumentException(\"Step must be non-zero.\")\n if (step == Long.MIN_VALUE) throw kotlin.IllegalArgumentException(\"Step must be greater than Long.MIN_VALUE to avoid overflow on negation.\")\n }\n\n /**\n * The first element in the progression.\n */\n public val first: ULong = start\n\n /**\n * The last element in the progression.\n */\n public val last: ULong = getProgressionLastElement(start, endInclusive, step)\n\n /**\n * The step of the progression.\n */\n public val step: Long = step\n\n override fun iterator(): ULongIterator = ULongProgressionIterator(first, last, step)\n\n /** Checks if the progression is empty. */\n public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last\n\n override fun equals(other: Any?): Boolean =\n other is ULongProgression && (isEmpty() && other.isEmpty() ||\n first == other.first && last == other.last && step == other.step)\n\n override fun hashCode(): Int =\n if (isEmpty()) -1 else (31 * (31 * (first xor (first shr 32)).toInt() + (last xor (last shr 32)).toInt()) + (step xor (step ushr 32)).toInt())\n\n override fun toString(): String = if (step > 0) \"$first..$last step $step\" else \"$first downTo $last step ${-step}\"\n\n companion object {\n /**\n * Creates ULongProgression within the specified bounds of a closed range.\n\n * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step].\n * In order to go backwards the [step] must be negative.\n *\n * [step] must be greater than `Long.MIN_VALUE` and not equal to zero.\n */\n public fun fromClosedRange(rangeStart: ULong, rangeEnd: ULong, step: Long): ULongProgression = ULongProgression(rangeStart, rangeEnd, step)\n }\n}\n\n\n/**\n * An iterator over a progression of values of type `ULong`.\n * @property step the number by which the value is incremented on each step.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\nprivate class ULongProgressionIterator(first: ULong, last: ULong, step: Long) : ULongIterator() {\n private val finalElement = last\n private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n private val step = step.toULong() // use 2-complement math for negative steps\n private var next = if (hasNext) first else finalElement\n\n override fun hasNext(): Boolean = hasNext\n\n override fun nextULong(): ULong {\n val value = next\n if (value == finalElement) {\n if (!hasNext) throw kotlin.NoSuchElementException()\n hasNext = false\n } else {\n next += step\n }\n return value\n }\n}\n\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:OptIn(ExperimentalUnsignedTypes::class)\npackage kotlin.internal\n\n// (a - b) mod c\nprivate fun differenceModulo(a: UInt, b: UInt, c: UInt): UInt {\n val ac = a % c\n val bc = b % c\n return if (ac >= bc) ac - bc else ac - bc + c\n}\n\nprivate fun differenceModulo(a: ULong, b: ULong, c: ULong): ULong {\n val ac = a % c\n val bc = b % c\n return if (ac >= bc) ac - bc else ac - bc + c\n}\n\n/**\n * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range\n * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative\n * [step].\n *\n * No validation on passed parameters is performed. The given parameters should satisfy the condition:\n *\n * - either `step > 0` and `start <= end`,\n * - or `step < 0` and `start >= end`.\n *\n * @param start first element of the progression\n * @param end ending bound for the progression\n * @param step increment, or difference of successive elements in the progression\n * @return the final element of the progression\n * @suppress\n */\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun getProgressionLastElement(start: UInt, end: UInt, step: Int): UInt = when {\n step > 0 -> if (start >= end) end else end - differenceModulo(end, start, step.toUInt())\n step < 0 -> if (start <= end) end else end + differenceModulo(start, end, (-step).toUInt())\n else -> throw kotlin.IllegalArgumentException(\"Step is zero.\")\n}\n\n/**\n * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range\n * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative\n * [step].\n *\n * No validation on passed parameters is performed. The given parameters should satisfy the condition:\n *\n * - either `step > 0` and `start <= end`,\n * - or `step < 0` and `start >= end`.\n *\n * @param start first element of the progression\n * @param end ending bound for the progression\n * @param step increment, or difference of successive elements in the progression\n * @return the final element of the progression\n * @suppress\n */\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal fun getProgressionLastElement(start: ULong, end: ULong, step: Long): ULong = when {\n step > 0 -> if (start >= end) end else end - differenceModulo(end, start, step.toULong())\n step < 0 -> if (start <= end) end else end + differenceModulo(start, end, (-step).toULong())\n else -> throw kotlin.IllegalArgumentException(\"Step is zero.\")\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmName(\"UStringsKt\") // string representation of unsigned numbers\n\npackage kotlin.text\n\n/**\n * Returns a string representation of this [Byte] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n//@kotlin.internal.InlineOnly\npublic /*inline*/ fun UByte.toString(radix: Int): String = this.toInt().toString(radix)\n\n/**\n * Returns a string representation of this [Short] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n//@kotlin.internal.InlineOnly\npublic /*inline*/ fun UShort.toString(radix: Int): String = this.toInt().toString(radix)\n\n\n/**\n * Returns a string representation of this [Int] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n//@kotlin.internal.InlineOnly\npublic /*inline*/ fun UInt.toString(radix: Int): String = this.toLong().toString(radix)\n\n/**\n * Returns a string representation of this [Long] value in the specified [radix].\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for number to string conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULong.toString(radix: Int): String = ulongToString(this.toLong(), checkRadix(radix))\n\n\n/**\n * Parses the string as a signed [UByte] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUByte(): UByte = toUByteOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a signed [UByte] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUByte(radix: Int): UByte = toUByteOrNull(radix) ?: numberFormatError(this)\n\n\n/**\n * Parses the string as a [UShort] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUShort(): UShort = toUShortOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a [UShort] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUShort(radix: Int): UShort = toUShortOrNull(radix) ?: numberFormatError(this)\n\n/**\n * Parses the string as an [UInt] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUInt(): UInt = toUIntOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as an [UInt] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUInt(radix: Int): UInt = toUIntOrNull(radix) ?: numberFormatError(this)\n\n/**\n * Parses the string as a [ULong] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toULong(): ULong = toULongOrNull() ?: numberFormatError(this)\n\n/**\n * Parses the string as a [ULong] number and returns the result.\n * @throws NumberFormatException if the string is not a valid representation of a number.\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toULong(radix: Int): ULong = toULongOrNull(radix) ?: numberFormatError(this)\n\n\n\n\n\n/**\n * Parses the string as an [UByte] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUByteOrNull(): UByte? = toUByteOrNull(radix = 10)\n\n/**\n * Parses the string as an [UByte] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUByteOrNull(radix: Int): UByte? {\n val int = this.toUIntOrNull(radix) ?: return null\n if (int > UByte.MAX_VALUE) return null\n return int.toUByte()\n}\n\n/**\n * Parses the string as an [UShort] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUShortOrNull(): UShort? = toUShortOrNull(radix = 10)\n\n/**\n * Parses the string as an [UShort] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUShortOrNull(radix: Int): UShort? {\n val int = this.toUIntOrNull(radix) ?: return null\n if (int > UShort.MAX_VALUE) return null\n return int.toUShort()\n}\n\n/**\n * Parses the string as an [UInt] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUIntOrNull(): UInt? = toUIntOrNull(radix = 10)\n\n/**\n * Parses the string as an [UInt] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toUIntOrNull(radix: Int): UInt? {\n checkRadix(radix)\n\n val length = this.length\n if (length == 0) return null\n\n val limit: UInt = UInt.MAX_VALUE\n val start: Int\n\n val firstChar = this[0]\n if (firstChar < '0') {\n if (length == 1 || firstChar != '+') return null\n start = 1\n } else {\n start = 0\n }\n\n val limitForMaxRadix = 119304647u // limit / 36\n\n var limitBeforeMul = limitForMaxRadix\n val uradix = radix.toUInt()\n var result = 0u\n for (i in start until length) {\n val digit = digitOf(this[i], radix)\n\n if (digit < 0) return null\n if (result > limitBeforeMul) {\n if (limitBeforeMul == limitForMaxRadix) {\n limitBeforeMul = limit / uradix\n\n if (result > limitBeforeMul) {\n return null\n }\n } else {\n return null\n }\n }\n\n result *= uradix\n\n val beforeAdding = result\n result += digit.toUInt()\n if (result < beforeAdding) return null // overflow has happened\n }\n\n return result\n}\n\n/**\n * Parses the string as an [ULong] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toULongOrNull(): ULong? = toULongOrNull(radix = 10)\n\n/**\n * Parses the string as an [ULong] number and returns the result\n * or `null` if the string is not a valid representation of a number.\n *\n * @throws IllegalArgumentException when [radix] is not a valid radix for string to number conversion.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun String.toULongOrNull(radix: Int): ULong? {\n checkRadix(radix)\n\n val length = this.length\n if (length == 0) return null\n\n val limit: ULong = ULong.MAX_VALUE\n val start: Int\n\n val firstChar = this[0]\n if (firstChar < '0') {\n if (length == 1 || firstChar != '+') return null\n start = 1\n } else {\n start = 0\n }\n\n\n val limitForMaxRadix = 512409557603043100uL // limit / 36\n\n var limitBeforeMul = limitForMaxRadix\n val uradix = radix.toULong()\n var result = 0uL\n for (i in start until length) {\n val digit = digitOf(this[i], radix)\n\n if (digit < 0) return null\n if (result > limitBeforeMul) {\n if (limitBeforeMul == limitForMaxRadix) {\n limitBeforeMul = limit / uradix\n\n if (result > limitBeforeMul) {\n return null\n }\n } else {\n return null\n }\n }\n\n result *= uradix\n\n val beforeAdding = result\n result += digit.toUInt()\n if (result < beforeAdding) return null // overflow has happened\n }\n\n return result\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"MapsKt\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns a [List] containing all key-value pairs.\n */\npublic fun <K, V> Map<out K, V>.toList(): List<Pair<K, V>> {\n if (size == 0)\n return emptyList()\n val iterator = entries.iterator()\n if (!iterator.hasNext())\n return emptyList()\n val first = iterator.next()\n if (!iterator.hasNext())\n return listOf(first.toPair())\n val result = ArrayList<Pair<K, V>>(size)\n result.add(first.toPair())\n do {\n result.add(iterator.next().toPair())\n } while (iterator.hasNext())\n return result\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each entry of original map.\n * \n * @sample samples.collections.Maps.Transformations.flatMap\n */\npublic inline fun <K, V, R> Map<out K, V>.flatMap(transform: (Map.Entry<K, V>) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each entry of original map.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequence\")\npublic inline fun <K, V, R> Map<out K, V>.flatMap(transform: (Map.Entry<K, V>) -> Sequence<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each entry of original map, to the given [destination].\n */\npublic inline fun <K, V, R, C : MutableCollection<in R>> Map<out K, V>.flatMapTo(destination: C, transform: (Map.Entry<K, V>) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each entry of original map, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequenceTo\")\npublic inline fun <K, V, R, C : MutableCollection<in R>> Map<out K, V>.flatMapTo(destination: C, transform: (Map.Entry<K, V>) -> Sequence<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each entry in the original map.\n * \n * @sample samples.collections.Maps.Transformations.mapToList\n */\npublic inline fun <K, V, R> Map<out K, V>.map(transform: (Map.Entry<K, V>) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each entry in the original map.\n * \n * @sample samples.collections.Maps.Transformations.mapNotNull\n */\npublic inline fun <K, V, R : Any> Map<out K, V>.mapNotNull(transform: (Map.Entry<K, V>) -> R?): List<R> {\n return mapNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each entry in the original map\n * and appends only the non-null results to the given [destination].\n */\npublic inline fun <K, V, R : Any, C : MutableCollection<in R>> Map<out K, V>.mapNotNullTo(destination: C, transform: (Map.Entry<K, V>) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each entry of the original map\n * and appends the results to the given [destination].\n */\npublic inline fun <K, V, R, C : MutableCollection<in R>> Map<out K, V>.mapTo(destination: C, transform: (Map.Entry<K, V>) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns `true` if all entries match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun <K, V> Map<out K, V>.all(predicate: (Map.Entry<K, V>) -> Boolean): Boolean {\n if (isEmpty()) return true\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if map has at least one entry.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun <K, V> Map<out K, V>.any(): Boolean {\n return !isEmpty()\n}\n\n/**\n * Returns `true` if at least one entry matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun <K, V> Map<out K, V>.any(predicate: (Map.Entry<K, V>) -> Boolean): Boolean {\n if (isEmpty()) return false\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of entries in this map.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.count(): Int {\n return size\n}\n\n/**\n * Returns the number of entries matching the given [predicate].\n */\npublic inline fun <K, V> Map<out K, V>.count(predicate: (Map.Entry<K, V>) -> Boolean): Int {\n if (isEmpty()) return 0\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Performs the given [action] on each entry.\n */\n@kotlin.internal.HidesMembers\npublic inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.maxBy(selector: (Map.Entry<K, V>) -> R): Map.Entry<K, V>? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first entry yielding the largest value of the given function or `null` if there are no entries.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.maxByOrNull(selector: (Map.Entry<K, V>) -> R): Map.Entry<K, V>? {\n return entries.maxByOrNull(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxOf(selector: (Map.Entry<K, V>) -> Double): Double {\n return entries.maxOf(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxOf(selector: (Map.Entry<K, V>) -> Float): Float {\n return entries.maxOf(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.maxOf(selector: (Map.Entry<K, V>) -> R): R {\n return entries.maxOf(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxOfOrNull(selector: (Map.Entry<K, V>) -> Double): Double? {\n return entries.maxOfOrNull(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxOfOrNull(selector: (Map.Entry<K, V>) -> Float): Float? {\n return entries.maxOfOrNull(selector)\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.maxOfOrNull(selector: (Map.Entry<K, V>) -> R): R? {\n return entries.maxOfOrNull(selector)\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each entry in the map.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R> Map<out K, V>.maxOfWith(comparator: Comparator<in R>, selector: (Map.Entry<K, V>) -> R): R {\n return entries.maxOfWith(comparator, selector)\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each entry in the map or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R> Map<out K, V>.maxOfWithOrNull(comparator: Comparator<in R>, selector: (Map.Entry<K, V>) -> R): R? {\n return entries.maxOfWithOrNull(comparator, selector)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxWith(comparator: Comparator<in Map.Entry<K, V>>): Map.Entry<K, V>? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first entry having the largest value according to the provided [comparator] or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.maxWithOrNull(comparator: Comparator<in Map.Entry<K, V>>): Map.Entry<K, V>? {\n return entries.maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.minBy(selector: (Map.Entry<K, V>) -> R): Map.Entry<K, V>? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first entry yielding the smallest value of the given function or `null` if there are no entries.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.minByOrNull(selector: (Map.Entry<K, V>) -> R): Map.Entry<K, V>? {\n return entries.minByOrNull(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.minOf(selector: (Map.Entry<K, V>) -> Double): Double {\n return entries.minOf(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.minOf(selector: (Map.Entry<K, V>) -> Float): Float {\n return entries.minOf(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.minOf(selector: (Map.Entry<K, V>) -> R): R {\n return entries.minOf(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.minOfOrNull(selector: (Map.Entry<K, V>) -> Double): Double? {\n return entries.minOfOrNull(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.minOfOrNull(selector: (Map.Entry<K, V>) -> Float): Float? {\n return entries.minOfOrNull(selector)\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each entry in the map or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R : Comparable<R>> Map<out K, V>.minOfOrNull(selector: (Map.Entry<K, V>) -> R): R? {\n return entries.minOfOrNull(selector)\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each entry in the map.\n * \n * @throws NoSuchElementException if the map is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R> Map<out K, V>.minOfWith(comparator: Comparator<in R>, selector: (Map.Entry<K, V>) -> R): R {\n return entries.minOfWith(comparator, selector)\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each entry in the map or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, R> Map<out K, V>.minOfWithOrNull(comparator: Comparator<in R>, selector: (Map.Entry<K, V>) -> R): R? {\n return entries.minOfWithOrNull(comparator, selector)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <K, V> Map<out K, V>.minWith(comparator: Comparator<in Map.Entry<K, V>>): Map.Entry<K, V>? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first entry having the smallest value according to the provided [comparator] or `null` if there are no entries.\n */\n@SinceKotlin(\"1.4\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.minWithOrNull(comparator: Comparator<in Map.Entry<K, V>>): Map.Entry<K, V>? {\n return entries.minWithOrNull(comparator)\n}\n\n/**\n * Returns `true` if the map has no entries.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun <K, V> Map<out K, V>.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if no entries match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun <K, V> Map<out K, V>.none(predicate: (Map.Entry<K, V>) -> Boolean): Boolean {\n if (isEmpty()) return true\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each entry and returns the map itself afterwards.\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <K, V, M : Map<out K, V>> M.onEach(action: (Map.Entry<K, V>) -> Unit): M {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each entry, providing sequential index with the entry,\n * and returns the map itself afterwards.\n * @param [action] function that takes the index of an entry and the entry itself\n * and performs the action on the entry.\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <K, V, M : Map<out K, V>> M.onEachIndexed(action: (index: Int, Map.Entry<K, V>) -> Unit): M {\n return apply { entries.forEachIndexed(action) }\n}\n\n/**\n * Creates an [Iterable] instance that wraps the original map returning its entries when being iterated.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.asIterable(): Iterable<Map.Entry<K, V>> {\n return entries\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original map returning its entries when being iterated.\n */\npublic fun <K, V> Map<out K, V>.asSequence(): Sequence<Map.Entry<K, V>> {\n return entries.asSequence()\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"SetsKt\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns a set containing all elements of the original set except the given [element].\n * \n * The returned set preserves the element iteration order of the original set.\n */\npublic operator fun <T> Set<T>.minus(element: T): Set<T> {\n val result = LinkedHashSet<T>(mapCapacity(size))\n var removed = false\n return this.filterTo(result) { if (!removed && it == element) { removed = true; false } else true }\n}\n\n/**\n * Returns a set containing all elements of the original set except the elements contained in the given [elements] array.\n * \n * The returned set preserves the element iteration order of the original set.\n * \n * The [elements] array may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Set<T>.minus(elements: Array<out T>): Set<T> {\n val result = LinkedHashSet<T>(this)\n result.removeAll(elements)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set except the elements contained in the given [elements] collection.\n * \n * The returned set preserves the element iteration order of the original set.\n * \n * The [elements] collection may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Set<T>.minus(elements: Iterable<T>): Set<T> {\n val other = elements.convertToSetForSetOperationWith(this)\n if (other.isEmpty())\n return this.toSet()\n if (other is Set)\n return this.filterNotTo(LinkedHashSet<T>()) { it in other }\n val result = LinkedHashSet<T>(this)\n result.removeAll(other)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set except the elements contained in the given [elements] sequence.\n * \n * The returned set preserves the element iteration order of the original set.\n * \n * The [elements] sequence may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Set<T>.minus(elements: Sequence<T>): Set<T> {\n val result = LinkedHashSet<T>(this)\n result.removeAll(elements)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set except the given [element].\n * \n * The returned set preserves the element iteration order of the original set.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Set<T>.minusElement(element: T): Set<T> {\n return minus(element)\n}\n\n/**\n * Returns a set containing all elements of the original set and then the given [element] if it isn't already in this set.\n * \n * The returned set preserves the element iteration order of the original set.\n */\npublic operator fun <T> Set<T>.plus(element: T): Set<T> {\n val result = LinkedHashSet<T>(mapCapacity(size + 1))\n result.addAll(this)\n result.add(element)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set and the given [elements] array,\n * which aren't already in this set.\n * \n * The returned set preserves the element iteration order of the original set.\n */\npublic operator fun <T> Set<T>.plus(elements: Array<out T>): Set<T> {\n val result = LinkedHashSet<T>(mapCapacity(this.size + elements.size))\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set and the given [elements] collection,\n * which aren't already in this set.\n * The returned set preserves the element iteration order of the original set.\n */\npublic operator fun <T> Set<T>.plus(elements: Iterable<T>): Set<T> {\n val result = LinkedHashSet<T>(mapCapacity(elements.collectionSizeOrNull()?.let { this.size + it } ?: this.size * 2))\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set and the given [elements] sequence,\n * which aren't already in this set.\n * \n * The returned set preserves the element iteration order of the original set.\n */\npublic operator fun <T> Set<T>.plus(elements: Sequence<T>): Set<T> {\n val result = LinkedHashSet<T>(mapCapacity(this.size * 2))\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a set containing all elements of the original set and then the given [element] if it isn't already in this set.\n * \n * The returned set preserves the element iteration order of the original set.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Set<T>.plusElement(element: T): Set<T> {\n return plus(element)\n}\n\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nimport kotlin.reflect.KClass\n\n@PublishedApi\ninternal fun <T : Annotation> KClass<*>.findAssociatedObject(@Suppress(\"UNUSED_PARAMETER\") annotationClass: KClass<T>): Any? {\n // This API is not supported in js-v1. Return `null` to be source-compatible with js-ir.\n return null\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.js\n\nimport getKClass\nimport kotlin.reflect.KClass\nimport kotlin.reflect.js.internal.KClassImpl\n\n/**\n * Represents the constructor of a class. Instances of `JsClass` can be passed to JavaScript APIs that expect a constructor reference.\n */\nexternal interface JsClass<T : Any> {\n /**\n * Returns the unqualified name of the class represented by this instance.\n */\n val name: String\n}\n\n/**\n * Obtains a constructor reference for the given `KClass`.\n */\nval <T : Any> KClass<T>.js: JsClass<T>\n get() = (this as KClassImpl<T>).jClass\n\n/**\n * Obtains a `KClass` instance for the given constructor reference.\n */\nval <T : Any> JsClass<T>.kotlin: KClass<T>\n get() = getKClass(this)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// a package is omitted to get declarations directly under the module\n\n// TODO: Remove once JsReflectionAPICallChecker supports more reflection types\n@file:Suppress(\"Unsupported\")\n\nimport kotlin.reflect.*\nimport kotlin.reflect.js.internal.*\n\n@JsName(\"createKType\")\ninternal fun createKType(\n classifier: KClassifier,\n arguments: Array<KTypeProjection>,\n isMarkedNullable: Boolean\n) =\n KTypeImpl(classifier, arguments.asList(), isMarkedNullable)\n\n@JsName(\"createDynamicKType\")\ninternal fun createDynamicKType(): KType = DynamicKType\n\n@JsName(\"markKTypeNullable\")\ninternal fun markKTypeNullable(kType: KType) = KTypeImpl(kType.classifier!!, kType.arguments, true)\n\n@JsName(\"createKTypeParameter\")\ninternal fun createKTypeParameter(\n name: String,\n upperBounds: Array<KType>,\n variance: String\n): KTypeParameter {\n val kVariance = when (variance) {\n \"in\" -> KVariance.IN\n \"out\" -> KVariance.OUT\n else -> KVariance.INVARIANT\n }\n\n return KTypeParameterImpl(name, upperBounds.asList(), kVariance, false)\n}\n\n@JsName(\"getStarKTypeProjection\")\ninternal fun getStarKTypeProjection(): KTypeProjection =\n KTypeProjection.STAR\n\n@JsName(\"createCovariantKTypeProjection\")\ninternal fun createCovariantKTypeProjection(type: KType): KTypeProjection =\n KTypeProjection.covariant(type)\n\n@JsName(\"createInvariantKTypeProjection\")\ninternal fun createInvariantKTypeProjection(type: KType): KTypeProjection =\n KTypeProjection.invariant(type)\n\n@JsName(\"createContravariantKTypeProjection\")\ninternal fun createContravariantKTypeProjection(type: KType): KTypeProjection =\n KTypeProjection.contravariant(type)\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\n/**\n * Returns the detailed description of this throwable with its stack trace.\n *\n * The detailed description includes:\n * - the short description (see [Throwable.toString]) of this throwable;\n * - the complete stack trace;\n * - detailed descriptions of the exceptions that were [suppressed][suppressedExceptions] in order to deliver this exception;\n * - the detailed description of each throwable in the [Throwable.cause] chain.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun Throwable.stackTraceToString(): String = ExceptionTraceBuilder().buildFor(this)\n\n/**\n * Prints the [detailed description][Throwable.stackTraceToString] of this throwable to console error output.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun Throwable.printStackTrace() {\n console.error(this.stackTraceToString())\n}\n\n/**\n * Adds the specified exception to the list of exceptions that were\n * suppressed in order to deliver this exception.\n */\n@SinceKotlin(\"1.4\")\npublic actual fun Throwable.addSuppressed(exception: Throwable) {\n if (this !== exception) {\n val suppressed = this.asDynamic()._suppressed.unsafeCast<MutableList<Throwable>?>()\n if (suppressed == null) {\n this.asDynamic()._suppressed = mutableListOf(exception)\n } else {\n suppressed.add(exception)\n }\n }\n}\n\n/**\n * Returns a list of all exceptions that were suppressed in order to deliver this exception.\n */\n@SinceKotlin(\"1.4\")\npublic actual val Throwable.suppressedExceptions: List<Throwable>\n get() {\n return this.asDynamic()._suppressed?.unsafeCast<List<Throwable>>() ?: emptyList()\n }\n\n\nprivate class ExceptionTraceBuilder {\n private val target = StringBuilder()\n private val visited = arrayOf<Throwable>()\n private var topStack: String = \"\"\n private var topStackStart: Int = 0\n\n fun buildFor(exception: Throwable): String {\n exception.dumpFullTrace(\"\", \"\")\n return target.toString()\n }\n\n private fun hasSeen(exception: Throwable): Boolean = visited.any { it === exception }\n\n private fun Throwable.dumpFullTrace(indent: String, qualifier: String) {\n this.dumpSelfTrace(indent, qualifier) || return\n\n var cause = this.cause\n while (cause != null) {\n cause.dumpSelfTrace(indent, \"Caused by: \") || return\n cause = cause.cause\n }\n }\n\n private fun Throwable.dumpSelfTrace(indent: String, qualifier: String): Boolean {\n target.append(indent).append(qualifier)\n val shortInfo = this.toString()\n if (hasSeen(this)) {\n target.append(\"[CIRCULAR REFERENCE, SEE ABOVE: \").append(shortInfo).append(\"]\\n\")\n return false\n }\n visited.asDynamic().push(this)\n\n var stack = this.asDynamic().stack as String?\n if (stack != null) {\n val stackStart = stack.indexOf(shortInfo).let { if (it < 0) 0 else it + shortInfo.length }\n if (stackStart == 0) target.append(shortInfo).append(\"\\n\")\n if (topStack.isEmpty()) {\n topStack = stack\n topStackStart = stackStart\n } else {\n stack = dropCommonFrames(stack, stackStart)\n }\n if (indent.isNotEmpty()) {\n // indent stack, but avoid indenting exception message lines\n val messageLines = if (stackStart == 0) 0 else 1 + shortInfo.count { c -> c == '\\n' }\n stack.lineSequence().forEachIndexed { index: Int, line: String ->\n if (index >= messageLines) target.append(indent)\n target.append(line).append(\"\\n\")\n }\n } else {\n target.append(stack).append(\"\\n\")\n }\n } else {\n target.append(shortInfo).append(\"\\n\")\n }\n\n val suppressed = suppressedExceptions\n if (suppressed.isNotEmpty()) {\n val suppressedIndent = indent + \" \"\n for (s in suppressed) {\n s.dumpFullTrace(suppressedIndent, \"Suppressed: \")\n }\n }\n return true\n }\n\n private fun dropCommonFrames(stack: String, stackStart: Int): String {\n var commonFrames: Int = 0\n var lastBreak: Int = 0\n var preLastBreak: Int = 0\n for (pos in 0 until minOf(topStack.length - topStackStart, stack.length - stackStart)) {\n val c = stack[stack.lastIndex - pos]\n if (c != topStack[topStack.lastIndex - pos]) break\n if (c == '\\n') {\n commonFrames += 1\n preLastBreak = lastBreak\n lastBreak = pos\n }\n }\n if (commonFrames <= 1) return stack\n while (preLastBreak > 0 && stack[stack.lastIndex - (preLastBreak - 1)] == ' ')\n preLastBreak -= 1\n\n // leave 1 common frame to ease matching with the top exception stack\n return stack.dropLast(preLastBreak) + \"... and ${commonFrames - 1} more common stack frames skipped\"\n }\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"MathKt\")\n\n\npackage kotlin.math\n\n\n\n// constants, can't use them from nativeMath as they are not constants there\n\n/** Ratio of the circumference of a circle to its diameter, approximately 3.14159. */\n@SinceKotlin(\"1.2\")\npublic const val PI: Double = 3.141592653589793\n/** Base of the natural logarithms, approximately 2.71828. */\n@SinceKotlin(\"1.2\")\npublic const val E: Double = 2.718281828459045\n\n// region ================ Double Math ========================================\n\n/** Computes the sine of the angle [x] given in radians.\n *\n * Special cases:\n * - `sin(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sin(x: Double): Double\n\n/** Computes the cosine of the angle [x] given in radians.\n *\n * Special cases:\n * - `cos(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun cos(x: Double): Double\n\n/** Computes the tangent of the angle [x] given in radians.\n *\n * Special cases:\n * - `tan(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun tan(x: Double): Double\n\n/**\n * Computes the arc sine of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `asin(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun asin(x: Double): Double\n\n/**\n * Computes the arc cosine of the value [x];\n * the returned value is an angle in the range from `0.0` to `PI` radians.\n *\n * Special cases:\n * - `acos(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun acos(x: Double): Double\n\n/**\n * Computes the arc tangent of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `atan(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atan(x: Double): Double\n\n/**\n * Returns the angle `theta` of the polar coordinates `(r, theta)` that correspond\n * to the rectangular coordinates `(x, y)` by computing the arc tangent of the value [y] / [x];\n * the returned value is an angle in the range from `-PI` to `PI` radians.\n *\n * Special cases:\n * - `atan2(0.0, 0.0)` is `0.0`\n * - `atan2(0.0, x)` is `0.0` for `x > 0` and `PI` for `x < 0`\n * - `atan2(-0.0, x)` is `-0.0` for 'x > 0` and `-PI` for `x < 0`\n * - `atan2(y, +Inf)` is `0.0` for `0 < y < +Inf` and `-0.0` for '-Inf < y < 0`\n * - `atan2(y, -Inf)` is `PI` for `0 < y < +Inf` and `-PI` for `-Inf < y < 0`\n * - `atan2(y, 0.0)` is `PI/2` for `y > 0` and `-PI/2` for `y < 0`\n * - `atan2(+Inf, x)` is `PI/2` for finite `x`y\n * - `atan2(-Inf, x)` is `-PI/2` for finite `x`\n * - `atan2(NaN, x)` and `atan2(y, NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atan2(y: Double, x: Double): Double\n\n/**\n * Computes the hyperbolic sine of the value [x].\n *\n * Special cases:\n * - `sinh(NaN)` is `NaN`\n * - `sinh(+Inf)` is `+Inf`\n * - `sinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sinh(x: Double): Double\n\n/**\n * Computes the hyperbolic cosine of the value [x].\n *\n * Special cases:\n * - `cosh(NaN)` is `NaN`\n * - `cosh(+Inf|-Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun cosh(x: Double): Double\n\n/**\n * Computes the hyperbolic tangent of the value [x].\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(+Inf)` is `1.0`\n * - `tanh(-Inf)` is `-1.0`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun tanh(x: Double): Double\n\n/**\n * Computes the inverse hyperbolic sine of the value [x].\n *\n * The returned value is `y` such that `sinh(y) == x`.\n *\n * Special cases:\n * - `asinh(NaN)` is `NaN`\n * - `asinh(+Inf)` is `+Inf`\n * - `asinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun asinh(x: Double): Double\n\n/**\n * Computes the inverse hyperbolic cosine of the value [x].\n *\n * The returned value is positive `y` such that `cosh(y) == x`.\n *\n * Special cases:\n * - `acosh(NaN)` is `NaN`\n * - `acosh(x)` is `NaN` when `x < 1`\n * - `acosh(+Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun acosh(x: Double): Double\n\n/**\n * Computes the inverse hyperbolic tangent of the value [x].\n *\n * The returned value is `y` such that `tanh(y) == x`.\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(x)` is `NaN` when `x > 1` or `x < -1`\n * - `tanh(1.0)` is `+Inf`\n * - `tanh(-1.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atanh(x: Double): Double\n\n/**\n * Computes `sqrt(x^2 + y^2)` without intermediate overflow or underflow.\n *\n * Special cases:\n * - returns `+Inf` if any of arguments is infinite\n * - returns `NaN` if any of arguments is `NaN` and the other is not infinite\n */\n@SinceKotlin(\"1.2\")\npublic expect fun hypot(x: Double, y: Double): Double\n\n/**\n * Computes the positive square root of the value [x].\n *\n * Special cases:\n * - `sqrt(x)` is `NaN` when `x < 0` or `x` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sqrt(x: Double): Double\n\n/**\n * Computes Euler's number `e` raised to the power of the value [x].\n *\n * Special cases:\n * - `exp(NaN)` is `NaN`\n * - `exp(+Inf)` is `+Inf`\n * - `exp(-Inf)` is `0.0`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun exp(x: Double): Double\n\n/**\n * Computes `exp(x) - 1`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `expm1(NaN)` is `NaN`\n * - `expm1(+Inf)` is `+Inf`\n * - `expm1(-Inf)` is `-1.0`\n *\n * @see [exp] function.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun expm1(x: Double): Double\n\n/**\n * Computes the logarithm of the value [x] to the given [base].\n *\n * Special cases:\n * - `log(x, b)` is `NaN` if either `x` or `b` are `NaN`\n * - `log(x, b)` is `NaN` when `x < 0` or `b <= 0` or `b == 1.0`\n * - `log(+Inf, +Inf)` is `NaN`\n * - `log(+Inf, b)` is `+Inf` for `b > 1` and `-Inf` for `b < 1`\n * - `log(0.0, b)` is `-Inf` for `b > 1` and `+Inf` for `b > 1`\n *\n * See also logarithm functions for common fixed bases: [ln], [log10] and [log2].\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log(x: Double, base: Double): Double\n\n/**\n * Computes the natural logarithm (base `E`) of the value [x].\n *\n * Special cases:\n * - `ln(NaN)` is `NaN`\n * - `ln(x)` is `NaN` when `x < 0.0`\n * - `ln(+Inf)` is `+Inf`\n * - `ln(0.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ln(x: Double): Double\n\n/**\n * Computes the common logarithm (base 10) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log10(x: Double): Double\n\n/**\n * Computes the binary logarithm (base 2) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log2(x: Double): Double\n\n/**\n * Computes `ln(x + 1)`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `ln1p(NaN)` is `NaN`\n * - `ln1p(x)` is `NaN` where `x < -1.0`\n * - `ln1p(-1.0)` is `-Inf`\n * - `ln1p(+Inf)` is `+Inf`\n *\n * @see [ln] function\n * @see [expm1] function\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ln1p(x: Double): Double\n\n/**\n * Rounds the given value [x] to an integer towards positive infinity.\n\n * @return the smallest double value that is greater than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `ceil(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ceil(x: Double): Double\n\n/**\n * Rounds the given value [x] to an integer towards negative infinity.\n\n * @return the largest double value that is smaller than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `floor(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun floor(x: Double): Double\n\n/**\n * Rounds the given value [x] to an integer towards zero.\n *\n * @return the value [x] having its fractional part truncated.\n *\n * Special cases:\n * - `truncate(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun truncate(x: Double): Double\n\n/**\n * Rounds the given value [x] towards the closest integer with ties rounded towards even integer.\n *\n * Special cases:\n * - `round(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun round(x: Double): Double\n\n/**\n * Returns the absolute value of the given value [x].\n *\n * Special cases:\n * - `abs(NaN)` is `NaN`\n *\n * @see absoluteValue extension property for [Double]\n */\n@SinceKotlin(\"1.2\")\npublic expect fun abs(x: Double): Double\n\n/**\n * Returns the sign of the given value [x]:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `sign(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sign(x: Double): Double\n\n\n/**\n * Returns the smaller of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun min(a: Double, b: Double): Double\n\n/**\n * Returns the greater of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun max(a: Double, b: Double): Double\n\n// extensions\n\n/**\n * Raises this value to the power [x].\n *\n * Special cases:\n * - `b.pow(0.0)` is `1.0`\n * - `b.pow(1.0) == b`\n * - `b.pow(NaN)` is `NaN`\n * - `NaN.pow(x)` is `NaN` for `x != 0.0`\n * - `b.pow(Inf)` is `NaN` for `abs(b) == 1.0`\n * - `b.pow(x)` is `NaN` for `b < 0` and `x` is finite and not an integer\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.pow(x: Double): Double\n\n/**\n * Raises this value to the integer power [n].\n *\n * See the other overload of [pow] for details.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.pow(n: Int): Double\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `NaN.absoluteValue` is `NaN`\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\npublic expect val Double.absoluteValue: Double\n\n/**\n * Returns the sign of this value:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `NaN.sign` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect val Double.sign: Double\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n *\n * If [sign] is `NaN` the sign of the result is undefined.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.withSign(sign: Double): Double\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.withSign(sign: Int): Double\n\n/**\n * Returns the ulp (unit in the last place) of this value.\n *\n * An ulp is a positive distance between this value and the next nearest [Double] value larger in magnitude.\n *\n * Special Cases:\n * - `NaN.ulp` is `NaN`\n * - `x.ulp` is `+Inf` when `x` is `+Inf` or `-Inf`\n * - `0.0.ulp` is `Double.MIN_VALUE`\n */\n@SinceKotlin(\"1.2\")\npublic expect val Double.ulp: Double\n\n/**\n * Returns the [Double] value nearest to this value in direction of positive infinity.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.nextUp(): Double\n\n/**\n * Returns the [Double] value nearest to this value in direction of negative infinity.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.nextDown(): Double\n\n/**\n * Returns the [Double] value nearest to this value in direction from this value towards the value [to].\n *\n * Special cases:\n * - `x.nextTowards(y)` is `NaN` if either `x` or `y` are `NaN`\n * - `x.nextTowards(x) == x`\n *\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.nextTowards(to: Double): Double\n\n/**\n * Rounds this [Double] value to the nearest integer and converts the result to [Int].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToInt() == Int.MAX_VALUE` when `x > Int.MAX_VALUE`\n * - `x.roundToInt() == Int.MIN_VALUE` when `x < Int.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.roundToInt(): Int\n\n/**\n * Rounds this [Double] value to the nearest integer and converts the result to [Long].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToLong() == Long.MAX_VALUE` when `x > Long.MAX_VALUE`\n * - `x.roundToLong() == Long.MIN_VALUE` when `x < Long.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Double.roundToLong(): Long\n\n// endregion\n\n\n\n// region ================ Float Math ========================================\n\n/** Computes the sine of the angle [x] given in radians.\n *\n * Special cases:\n * - `sin(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sin(x: Float): Float\n\n/** Computes the cosine of the angle [x] given in radians.\n *\n * Special cases:\n * - `cos(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun cos(x: Float): Float\n\n/** Computes the tangent of the angle [x] given in radians.\n *\n * Special cases:\n * - `tan(NaN|+Inf|-Inf)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun tan(x: Float): Float\n\n/**\n * Computes the arc sine of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `asin(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun asin(x: Float): Float\n\n/**\n * Computes the arc cosine of the value [x];\n * the returned value is an angle in the range from `0.0` to `PI` radians.\n *\n * Special cases:\n * - `acos(x)` is `NaN`, when `abs(x) > 1` or x is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun acos(x: Float): Float\n\n/**\n * Computes the arc tangent of the value [x];\n * the returned value is an angle in the range from `-PI/2` to `PI/2` radians.\n *\n * Special cases:\n * - `atan(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atan(x: Float): Float\n\n/**\n * Returns the angle `theta` of the polar coordinates `(r, theta)` that correspond\n * to the rectangular coordinates `(x, y)` by computing the arc tangent of the value [y] / [x];\n * the returned value is an angle in the range from `-PI` to `PI` radians.\n *\n * Special cases:\n * - `atan2(0.0, 0.0)` is `0.0`\n * - `atan2(0.0, x)` is `0.0` for `x > 0` and `PI` for `x < 0`\n * - `atan2(-0.0, x)` is `-0.0` for 'x > 0` and `-PI` for `x < 0`\n * - `atan2(y, +Inf)` is `0.0` for `0 < y < +Inf` and `-0.0` for '-Inf < y < 0`\n * - `atan2(y, -Inf)` is `PI` for `0 < y < +Inf` and `-PI` for `-Inf < y < 0`\n * - `atan2(y, 0.0)` is `PI/2` for `y > 0` and `-PI/2` for `y < 0`\n * - `atan2(+Inf, x)` is `PI/2` for finite `x`y\n * - `atan2(-Inf, x)` is `-PI/2` for finite `x`\n * - `atan2(NaN, x)` and `atan2(y, NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atan2(y: Float, x: Float): Float\n\n/**\n * Computes the hyperbolic sine of the value [x].\n *\n * Special cases:\n * - `sinh(NaN)` is `NaN`\n * - `sinh(+Inf)` is `+Inf`\n * - `sinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sinh(x: Float): Float\n\n/**\n * Computes the hyperbolic cosine of the value [x].\n *\n * Special cases:\n * - `cosh(NaN)` is `NaN`\n * - `cosh(+Inf|-Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun cosh(x: Float): Float\n\n/**\n * Computes the hyperbolic tangent of the value [x].\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(+Inf)` is `1.0`\n * - `tanh(-Inf)` is `-1.0`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun tanh(x: Float): Float\n\n/**\n * Computes the inverse hyperbolic sine of the value [x].\n *\n * The returned value is `y` such that `sinh(y) == x`.\n *\n * Special cases:\n * - `asinh(NaN)` is `NaN`\n * - `asinh(+Inf)` is `+Inf`\n * - `asinh(-Inf)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun asinh(x: Float): Float\n\n/**\n * Computes the inverse hyperbolic cosine of the value [x].\n *\n * The returned value is positive `y` such that `cosh(y) == x`.\n *\n * Special cases:\n * - `acosh(NaN)` is `NaN`\n * - `acosh(x)` is `NaN` when `x < 1`\n * - `acosh(+Inf)` is `+Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun acosh(x: Float): Float\n\n/**\n * Computes the inverse hyperbolic tangent of the value [x].\n *\n * The returned value is `y` such that `tanh(y) == x`.\n *\n * Special cases:\n * - `tanh(NaN)` is `NaN`\n * - `tanh(x)` is `NaN` when `x > 1` or `x < -1`\n * - `tanh(1.0)` is `+Inf`\n * - `tanh(-1.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun atanh(x: Float): Float\n\n/**\n * Computes `sqrt(x^2 + y^2)` without intermediate overflow or underflow.\n *\n * Special cases:\n * - returns `+Inf` if any of arguments is infinite\n * - returns `NaN` if any of arguments is `NaN` and the other is not infinite\n */\n@SinceKotlin(\"1.2\")\npublic expect fun hypot(x: Float, y: Float): Float\n\n/**\n * Computes the positive square root of the value [x].\n *\n * Special cases:\n * - `sqrt(x)` is `NaN` when `x < 0` or `x` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sqrt(x: Float): Float\n\n/**\n * Computes Euler's number `e` raised to the power of the value [x].\n *\n * Special cases:\n * - `exp(NaN)` is `NaN`\n * - `exp(+Inf)` is `+Inf`\n * - `exp(-Inf)` is `0.0`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun exp(x: Float): Float\n\n/**\n * Computes `exp(x) - 1`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `expm1(NaN)` is `NaN`\n * - `expm1(+Inf)` is `+Inf`\n * - `expm1(-Inf)` is `-1.0`\n *\n * @see [exp] function.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun expm1(x: Float): Float\n\n/**\n * Computes the logarithm of the value [x] to the given [base].\n *\n * Special cases:\n * - `log(x, b)` is `NaN` if either `x` or `b` are `NaN`\n * - `log(x, b)` is `NaN` when `x < 0` or `b <= 0` or `b == 1.0`\n * - `log(+Inf, +Inf)` is `NaN`\n * - `log(+Inf, b)` is `+Inf` for `b > 1` and `-Inf` for `b < 1`\n * - `log(0.0, b)` is `-Inf` for `b > 1` and `+Inf` for `b > 1`\n *\n * See also logarithm functions for common fixed bases: [ln], [log10] and [log2].\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log(x: Float, base: Float): Float\n\n/**\n * Computes the natural logarithm (base `E`) of the value [x].\n *\n * Special cases:\n * - `ln(NaN)` is `NaN`\n * - `ln(x)` is `NaN` when `x < 0.0`\n * - `ln(+Inf)` is `+Inf`\n * - `ln(0.0)` is `-Inf`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ln(x: Float): Float\n\n/**\n * Computes the common logarithm (base 10) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log10(x: Float): Float\n\n/**\n * Computes the binary logarithm (base 2) of the value [x].\n *\n * @see [ln] function for special cases.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun log2(x: Float): Float\n\n/**\n * Computes `ln(a + 1)`.\n *\n * This function can be implemented to produce more precise result for [x] near zero.\n *\n * Special cases:\n * - `ln1p(NaN)` is `NaN`\n * - `ln1p(x)` is `NaN` where `x < -1.0`\n * - `ln1p(-1.0)` is `-Inf`\n * - `ln1p(+Inf)` is `+Inf`\n *\n * @see [ln] function\n * @see [expm1] function\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ln1p(x: Float): Float\n\n/**\n * Rounds the given value [x] to an integer towards positive infinity.\n\n * @return the smallest Float value that is greater than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `ceil(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun ceil(x: Float): Float\n\n/**\n * Rounds the given value [x] to an integer towards negative infinity.\n\n * @return the largest Float value that is smaller than or equal to the given value [x] and is a mathematical integer.\n *\n * Special cases:\n * - `floor(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun floor(x: Float): Float\n\n/**\n * Rounds the given value [x] to an integer towards zero.\n *\n * @return the value [x] having its fractional part truncated.\n *\n * Special cases:\n * - `truncate(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun truncate(x: Float): Float\n\n/**\n * Rounds the given value [x] towards the closest integer with ties rounded towards even integer.\n *\n * Special cases:\n * - `round(x)` is `x` where `x` is `NaN` or `+Inf` or `-Inf` or already a mathematical integer.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun round(x: Float): Float\n\n\n/**\n * Returns the absolute value of the given value [x].\n *\n * Special cases:\n * - `abs(NaN)` is `NaN`\n *\n * @see absoluteValue extension property for [Float]\n */\n@SinceKotlin(\"1.2\")\npublic expect fun abs(x: Float): Float\n\n/**\n * Returns the sign of the given value [x]:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `sign(NaN)` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun sign(x: Float): Float\n\n\n\n/**\n * Returns the smaller of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun min(a: Float, b: Float): Float\n\n/**\n * Returns the greater of two values.\n *\n * If either value is `NaN`, then the result is `NaN`.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun max(a: Float, b: Float): Float\n\n// extensions\n\n\n/**\n * Raises this value to the power [x].\n *\n * Special cases:\n * - `b.pow(0.0)` is `1.0`\n * - `b.pow(1.0) == b`\n * - `b.pow(NaN)` is `NaN`\n * - `NaN.pow(x)` is `NaN` for `x != 0.0`\n * - `b.pow(Inf)` is `NaN` for `abs(b) == 1.0`\n * - `b.pow(x)` is `NaN` for `b < 0` and `x` is finite and not an integer\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.pow(x: Float): Float\n\n/**\n * Raises this value to the integer power [n].\n *\n * See the other overload of [pow] for details.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.pow(n: Int): Float\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `NaN.absoluteValue` is `NaN`\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\npublic expect val Float.absoluteValue: Float\n\n/**\n * Returns the sign of this value:\n * - `-1.0` if the value is negative,\n * - zero if the value is zero,\n * - `1.0` if the value is positive\n *\n * Special case:\n * - `NaN.sign` is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect val Float.sign: Float\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n *\n * If [sign] is `NaN` the sign of the result is undefined.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.withSign(sign: Float): Float\n\n/**\n * Returns this value with the sign bit same as of the [sign] value.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.withSign(sign: Int): Float\n\n\n/**\n * Rounds this [Float] value to the nearest integer and converts the result to [Int].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToInt() == Int.MAX_VALUE` when `x > Int.MAX_VALUE`\n * - `x.roundToInt() == Int.MIN_VALUE` when `x < Int.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.roundToInt(): Int\n\n/**\n * Rounds this [Float] value to the nearest integer and converts the result to [Long].\n * Ties are rounded towards positive infinity.\n *\n * Special cases:\n * - `x.roundToLong() == Long.MAX_VALUE` when `x > Long.MAX_VALUE`\n * - `x.roundToLong() == Long.MIN_VALUE` when `x < Long.MIN_VALUE`\n *\n * @throws IllegalArgumentException when this value is `NaN`\n */\n@SinceKotlin(\"1.2\")\npublic expect fun Float.roundToLong(): Long\n\n\n// endregion\n\n// region ================ Integer Math ========================================\n\n\n/**\n * Returns the absolute value of the given value [n].\n *\n * Special cases:\n * - `abs(Int.MIN_VALUE)` is `Int.MIN_VALUE` due to an overflow\n *\n * @see absoluteValue extension property for [Int]\n */\n@SinceKotlin(\"1.2\")\npublic expect fun abs(n: Int): Int\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun min(a: Int, b: Int): Int\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun max(a: Int, b: Int): Int\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `Int.MIN_VALUE.absoluteValue` is `Int.MIN_VALUE` due to an overflow\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\npublic expect val Int.absoluteValue: Int\n\n/**\n * Returns the sign of this value:\n * - `-1` if the value is negative,\n * - `0` if the value is zero,\n * - `1` if the value is positive\n */\n@SinceKotlin(\"1.2\")\npublic expect val Int.sign: Int\n\n\n\n/**\n * Returns the absolute value of the given value [n].\n *\n * Special cases:\n * - `abs(Long.MIN_VALUE)` is `Long.MIN_VALUE` due to an overflow\n *\n * @see absoluteValue extension property for [Long]\n */\n@SinceKotlin(\"1.2\")\npublic expect fun abs(n: Long): Long\n\n/**\n * Returns the smaller of two values.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun min(a: Long, b: Long): Long\n\n/**\n * Returns the greater of two values.\n */\n@SinceKotlin(\"1.2\")\npublic expect fun max(a: Long, b: Long): Long\n\n/**\n * Returns the absolute value of this value.\n *\n * Special cases:\n * - `Long.MIN_VALUE.absoluteValue` is `Long.MIN_VALUE` due to an overflow\n *\n * @see abs function\n */\n@SinceKotlin(\"1.2\")\npublic expect val Long.absoluteValue: Long\n\n/**\n * Returns the sign of this value:\n * - `-1` if the value is negative,\n * - `0` if the value is zero,\n * - `1` if the value is positive\n */\n@SinceKotlin(\"1.2\")\npublic expect val Long.sign: Int\n\n\n// endregion\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.coroutines.js.internal\n\nimport kotlin.coroutines.Continuation\nimport kotlin.coroutines.EmptyCoroutineContext\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\ninternal val EmptyContinuation = Continuation<Any?>(EmptyCoroutineContext) { result ->\n result.getOrThrow()\n}","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\nimport kotlin.coroutines.*\nimport kotlin.coroutines.intrinsics.*\n\n/**\n * Defines deep recursive function that keeps its stack on the heap,\n * which allows very deep recursive computations that do not use the actual call stack.\n * To initiate a call to this deep recursive function use its [invoke] function.\n * As a rule of thumb, it should be used if recursion goes deeper than a thousand calls.\n *\n * The [DeepRecursiveFunction] takes one parameter of type [T] and returns a result of type [R].\n * The [block] of code defines the body of a recursive function. In this block\n * [callRecursive][DeepRecursiveScope.callRecursive] function can be used to make a recursive call\n * to the declared function. Other instances of [DeepRecursiveFunction] can be called\n * in this scope with `callRecursive` extension, too.\n *\n * For example, take a look at the following recursive tree class and a deeply\n * recursive instance of this tree with 100K nodes:\n *\n * ```\n * class Tree(val left: Tree? = null, val right: Tree? = null)\n * val deepTree = generateSequence(Tree()) { Tree(it) }.take(100_000).last()\n * ```\n *\n * A regular recursive function can be defined to compute a depth of a tree:\n *\n * ```\n * fun depth(t: Tree?): Int =\n * if (t == null) 0 else max(depth(t.left), depth(t.right)) + 1\n * println(depth(deepTree)) // StackOverflowError\n * ```\n *\n * If this `depth` function is called for a `deepTree` it produces [StackOverflowError] because of deep recursion.\n * However, the `depth` function can be rewritten using `DeepRecursiveFunction` in the following way, and then\n * it successfully computes [`depth(deepTree)`][DeepRecursiveFunction.invoke] expression:\n *\n * ```\n * val depth = DeepRecursiveFunction<Tree?, Int> { t ->\n * if (t == null) 0 else max(callRecursive(t.left), callRecursive(t.right)) + 1\n * }\n * println(depth(deepTree)) // Ok\n * ```\n *\n * Deep recursive functions can also mutually call each other using a heap for the stack via\n * [callRecursive][DeepRecursiveScope.callRecursive] extension. For example, the\n * following pair of mutually recursive functions computes the number of tree nodes at even depth in the tree.\n *\n * ```\n * val mutualRecursion = object {\n * val even: DeepRecursiveFunction<Tree?, Int> = DeepRecursiveFunction { t ->\n * if (t == null) 0 else odd.callRecursive(t.left) + odd.callRecursive(t.right) + 1\n * }\n * val odd: DeepRecursiveFunction<Tree?, Int> = DeepRecursiveFunction { t ->\n * if (t == null) 0 else even.callRecursive(t.left) + even.callRecursive(t.right)\n * }\n * }\n * ```\n *\n * @param [T] the function parameter type.\n * @param [R] the function result type.\n * @param block the function body.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic class DeepRecursiveFunction<T, R>(\n internal val block: suspend DeepRecursiveScope<T, R>.(T) -> R\n)\n\n/**\n * Initiates a call to this deep recursive function, forming a root of the call tree.\n *\n * This operator should not be used from inside of [DeepRecursiveScope] as it uses the call stack slot for\n * initial recursive invocation. From inside of [DeepRecursiveScope] use\n * [callRecursive][DeepRecursiveScope.callRecursive].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic operator fun <T, R> DeepRecursiveFunction<T, R>.invoke(value: T): R =\n DeepRecursiveScopeImpl<T, R>(block, value).runCallLoop()\n\n/**\n * A scope class for [DeepRecursiveFunction] function declaration that defines [callRecursive] methods to\n * recursively call this function or another [DeepRecursiveFunction] putting the call activation frame on the heap.\n *\n * @param [T] function parameter type.\n * @param [R] function result type.\n */\n@RestrictsSuspension\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic sealed class DeepRecursiveScope<T, R> {\n /**\n * Makes recursive call to this [DeepRecursiveFunction] function putting the call activation frame on the heap,\n * as opposed to the actual call stack that is used by a regular recursive call.\n */\n public abstract suspend fun callRecursive(value: T): R\n\n /**\n * Makes call to the specified [DeepRecursiveFunction] function putting the call activation frame on the heap,\n * as opposed to the actual call stack that is used by a regular call.\n */\n public abstract suspend fun <U, S> DeepRecursiveFunction<U, S>.callRecursive(value: U): S\n\n @Deprecated(\n level = DeprecationLevel.ERROR,\n message =\n \"'invoke' should not be called from DeepRecursiveScope. \" +\n \"Use 'callRecursive' to do recursion in the heap instead of the call stack.\",\n replaceWith = ReplaceWith(\"this.callRecursive(value)\")\n )\n @Suppress(\"UNUSED_PARAMETER\")\n public operator fun DeepRecursiveFunction<*, *>.invoke(value: Any?): Nothing =\n throw UnsupportedOperationException(\"Should not be called from DeepRecursiveScope\")\n}\n\n// ================== Implementation ==================\n\n@ExperimentalStdlibApi\nprivate typealias DeepRecursiveFunctionBlock = suspend DeepRecursiveScope<*, *>.(Any?) -> Any?\n\nprivate val UNDEFINED_RESULT = Result.success(COROUTINE_SUSPENDED)\n\n@Suppress(\"UNCHECKED_CAST\")\n@ExperimentalStdlibApi\nprivate class DeepRecursiveScopeImpl<T, R>(\n block: suspend DeepRecursiveScope<T, R>.(T) -> R,\n value: T\n) : DeepRecursiveScope<T, R>(), Continuation<R> {\n // Active function block\n private var function: DeepRecursiveFunctionBlock = block as DeepRecursiveFunctionBlock\n\n // Value to call function with\n private var value: Any? = value\n\n // Continuation of the current call\n private var cont: Continuation<Any?>? = this as Continuation<Any?>\n\n // Completion result (completion of the whole call stack)\n private var result: Result<Any?> = UNDEFINED_RESULT\n\n override val context: CoroutineContext\n get() = EmptyCoroutineContext\n\n override fun resumeWith(result: Result<R>) {\n this.cont = null\n this.result = result\n }\n\n override suspend fun callRecursive(value: T): R = suspendCoroutineUninterceptedOrReturn { cont ->\n // calling the same function that is currently active\n this.cont = cont as Continuation<Any?>\n this.value = value\n COROUTINE_SUSPENDED\n }\n\n override suspend fun <U, S> DeepRecursiveFunction<U, S>.callRecursive(value: U): S = suspendCoroutineUninterceptedOrReturn { cont ->\n // calling another recursive function\n val function = block as DeepRecursiveFunctionBlock\n with(this@DeepRecursiveScopeImpl) {\n val currentFunction = this.function\n if (function !== currentFunction) {\n // calling a different function -- create a trampoline to restore function ref\n this.function = function\n this.cont = crossFunctionCompletion(currentFunction, cont as Continuation<Any?>)\n } else {\n // calling the same function -- direct\n this.cont = cont as Continuation<Any?>\n }\n this.value = value\n }\n COROUTINE_SUSPENDED\n }\n\n private fun crossFunctionCompletion(\n currentFunction: DeepRecursiveFunctionBlock,\n cont: Continuation<Any?>\n ): Continuation<Any?> = Continuation(EmptyCoroutineContext) {\n this.function = currentFunction\n // When going back from a trampoline we cannot just call cont.resume (stack usage!)\n // We delegate the cont.resumeWith(it) call to runCallLoop\n this.cont = cont\n this.result = it\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n fun runCallLoop(): R {\n while (true) {\n // Note: cont is set to null in DeepRecursiveScopeImpl.resumeWith when the whole computation completes\n val result = this.result\n val cont = this.cont\n ?: return (result as Result<R>).getOrThrow() // done -- final result\n // The order of comparison is important here for that case of rogue class with broken equals\n if (UNDEFINED_RESULT == result) {\n // call \"function\" with \"value\" using \"cont\" as completion\n val r = try {\n // This is block.startCoroutine(this, value, cont)\n function.startCoroutineUninterceptedOrReturn(this, value, cont)\n } catch (e: Throwable) {\n cont.resumeWithException(e)\n continue\n }\n // If the function returns without suspension -- calls its continuation immediately\n if (r !== COROUTINE_SUSPENDED)\n cont.resume(r as R)\n } else {\n // we returned from a crossFunctionCompletion trampoline -- call resume here\n this.result = UNDEFINED_RESULT // reset result back\n cont.resumeWith(result)\n }\n }\n }\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin\n\nimport kotlin.internal.InlineOnly\n\n\n/**\n * Returns a hash code value for the object or zero if the object is `null`.\n *\n * @see Any.hashCode\n */\n@SinceKotlin(\"1.3\")\n@InlineOnly\npublic inline fun Any?.hashCode(): Int = this?.hashCode() ?: 0\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.js\n\n/**\n * Function corresponding to JavaScript's `typeof` operator\n */\n@kotlin.internal.InlineOnly\n@Suppress(\"UNUSED_PARAMETER\")\npublic inline fun jsTypeOf(a: Any?): String = js(\"typeof a\")\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isPrefixedValue;\nvar regex = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n return typeof value === 'string' && regex.test(value);\n}\nmodule.exports = exports['default'];","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.concurrent.*\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.internal.*\nimport io.ktor.utils.io.pool.*\nimport kotlinx.atomicfu.locks.*\nimport kotlin.math.*\n\n@Deprecated(\"This is going to become internal. Use ByteReadChannel receiver instead.\", level = DeprecationLevel.ERROR)\npublic suspend fun ByteChannelSequentialBase.joinTo(dst: ByteChannelSequentialBase, closeOnEnd: Boolean) {\n return joinToImpl(dst, closeOnEnd)\n}\n\n@Deprecated(\"This is going to become internal. Use ByteReadChannel receiver instead.\", level = DeprecationLevel.ERROR)\npublic suspend fun ByteChannelSequentialBase.copyTo(\n dst: ByteChannelSequentialBase,\n limit: Long = Long.MAX_VALUE\n): Long {\n return copyToSequentialImpl(dst, limit)\n}\n\nprivate const val EXPECTED_CAPACITY: Long = 4088L\n\n/**\n * Sequential (non-concurrent) byte channel implementation\n */\n@Suppress(\"OverridingDeprecatedMember\")\n@DangerousInternalIoApi\npublic abstract class ByteChannelSequentialBase(\n initial: IoBuffer,\n override val autoFlush: Boolean,\n pool: ObjectPool<ChunkBuffer> = ChunkBuffer.Pool\n) : ByteChannel, ByteReadChannel, ByteWriteChannel, SuspendableReadSession, HasReadSession, HasWriteSession {\n\n @Suppress(\"unused\", \"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public constructor(initial: IoBuffer, autoFlush: Boolean) : this(initial, autoFlush, ChunkBuffer.Pool)\n\n private val state = ByteChannelSequentialBaseSharedState()\n\n protected var closed: Boolean\n get() = state.closed\n set(value) {\n state.closed = value\n }\n\n protected val writable: BytePacketBuilder = BytePacketBuilder(0, pool)\n protected val readable: ByteReadPacket = ByteReadPacket(initial, pool)\n\n private val slot = AwaitingSlot()\n\n @Suppress(\"NOTHING_TO_INLINE\")\n private inline fun totalPending(): Int = availableForRead + writable.size\n\n private val flushSize: Int get() = flushBuffer.size\n\n override val availableForRead: Int\n get() = flushSize + readable.remaining.toInt()\n\n override val availableForWrite: Int\n get() = maxOf(0, EXPECTED_CAPACITY.toInt() - totalPending())\n\n override var readByteOrder: ByteOrder\n get() = state.readByteOrder\n set(value) {\n state.readByteOrder = value\n }\n\n override var writeByteOrder: ByteOrder\n get() = state.writeByteOrder\n set(value) {\n state.writeByteOrder = value\n }\n\n override val isClosedForRead: Boolean\n get() = closed && readable.isEmpty && flushSize == 0 && writable.isEmpty\n\n override val isClosedForWrite: Boolean\n get() = closed\n\n private var _totalBytesRead: Long\n get() = state.totalBytesRead\n set(value) {\n state.totalBytesRead = value\n }\n\n override val totalBytesRead: Long get() = state.totalBytesRead\n\n private var _totalBytesWritten: Long\n get() = state.totalBytesWritten\n set(value) {\n state.totalBytesWritten = value\n }\n\n override val totalBytesWritten: Long get() = state.totalBytesWritten\n\n final override var closedCause: Throwable?\n get() = state.closedCause\n private set(value) {\n state.closedCause = value\n }\n\n private val flushMutex = SynchronizedObject()\n private val flushBuffer: BytePacketBuilder = BytePacketBuilder()\n\n internal suspend fun awaitAtLeastNBytesAvailableForWrite(count: Int) {\n while (availableForWrite < count && !closed) {\n if (!flushImpl()) {\n slot.sleep()\n }\n }\n }\n\n internal suspend fun awaitAtLeastNBytesAvailableForRead(count: Int) {\n while (availableForRead < count && !closed) {\n slot.sleep()\n }\n }\n\n override fun flush() {\n flushImpl()\n }\n\n private fun flushImpl(): Boolean {\n if (writable.isEmpty) {\n return false\n }\n\n flushWrittenBytes()\n slot.resume()\n return true\n }\n\n /**\n * Send bytes to thread-safe storage.\n *\n * This method is writer-only safe.\n */\n private fun flushWrittenBytes() {\n synchronized(flushMutex) {\n val buffer = writable.stealAll()!!\n flushBuffer.writeChunkBuffer(buffer)\n }\n }\n\n /**\n * Take flushed bytes before read.\n *\n * This method is reader-only safe.\n */\n protected fun prepareFlushedBytes() {\n synchronized(flushMutex) {\n readable.unsafeAppend(flushBuffer)\n }\n }\n\n private fun ensureNotClosed() {\n if (closed) {\n throw closedCause ?: ClosedWriteChannelException(\"Channel is already closed\")\n }\n }\n\n private fun ensureNotFailed() {\n closedCause?.let { throw it }\n }\n\n private fun ensureNotFailed(closeable: BytePacketBuilder) {\n closedCause?.let { cause ->\n closeable.release()\n throw cause\n }\n }\n\n override suspend fun writeByte(b: Byte) {\n awaitAtLeastNBytesAvailableForWrite(1)\n writable.writeByte(b)\n afterWrite(1)\n }\n\n private inline fun <T : Any> reverseWrite(value: () -> T, reversed: () -> T): T {\n @Suppress(\"DEPRECATION_ERROR\")\n return if (writeByteOrder == ByteOrder.BIG_ENDIAN) {\n value()\n } else {\n reversed()\n }\n }\n\n override suspend fun writeShort(s: Short) {\n awaitAtLeastNBytesAvailableForWrite(2)\n writable.writeShort(reverseWrite({ s }, { s.reverseByteOrder() }))\n afterWrite(2)\n }\n\n override suspend fun writeInt(i: Int) {\n awaitAtLeastNBytesAvailableForWrite(4)\n writable.writeInt(reverseWrite({ i }, { i.reverseByteOrder() }))\n afterWrite(4)\n }\n\n override suspend fun writeLong(l: Long) {\n awaitAtLeastNBytesAvailableForWrite(8)\n writable.writeLong(reverseWrite({ l }, { l.reverseByteOrder() }))\n afterWrite(8)\n }\n\n override suspend fun writeFloat(f: Float) {\n awaitAtLeastNBytesAvailableForWrite(4)\n writable.writeFloat(reverseWrite({ f }, { f.reverseByteOrder() }))\n afterWrite(4)\n }\n\n override suspend fun writeDouble(d: Double) {\n awaitAtLeastNBytesAvailableForWrite(8)\n writable.writeDouble(reverseWrite({ d }, { d.reverseByteOrder() }))\n afterWrite(8)\n }\n\n override suspend fun writePacket(packet: ByteReadPacket) {\n awaitAtLeastNBytesAvailableForWrite(1)\n val size = packet.remaining.toInt()\n writable.writePacket(packet)\n afterWrite(size)\n }\n\n override suspend fun writeFully(src: IoBuffer) {\n writeFully(src as Buffer)\n }\n\n override suspend fun writeFully(src: Buffer) {\n awaitAtLeastNBytesAvailableForWrite(1)\n val count = src.readRemaining\n writable.writeFully(src)\n afterWrite(count)\n }\n\n override suspend fun writeFully(src: ByteArray, offset: Int, length: Int) {\n var currentIndex = offset\n val endIndex = offset + length\n\n while (currentIndex < endIndex) {\n awaitAtLeastNBytesAvailableForWrite(1)\n\n val bytesCount = min(availableForWrite, endIndex - currentIndex)\n writable.writeFully(src, currentIndex, bytesCount)\n\n currentIndex += bytesCount\n afterWrite(bytesCount)\n }\n }\n\n override suspend fun writeFully(memory: Memory, startIndex: Int, endIndex: Int) {\n var currentIndex = startIndex\n\n while (currentIndex < endIndex) {\n awaitAtLeastNBytesAvailableForWrite(1)\n\n val bytesCount = min(availableForWrite, endIndex - currentIndex)\n writable.writeFully(memory, currentIndex, bytesCount)\n\n currentIndex += bytesCount\n afterWrite(bytesCount)\n }\n }\n\n override suspend fun writeAvailable(src: IoBuffer): Int {\n val srcRemaining = src.readRemaining\n if (srcRemaining == 0) return 0\n val size = minOf(srcRemaining, availableForWrite)\n\n return if (size == 0) writeAvailableSuspend(src)\n else {\n writable.writeFully(src, size)\n afterWrite(size)\n size\n }\n }\n\n override suspend fun writeAvailable(src: ByteArray, offset: Int, length: Int): Int {\n if (length == 0) return 0\n val size = minOf(length, availableForWrite)\n\n return if (size == 0) writeAvailableSuspend(src, offset, length)\n else {\n writable.writeFully(src, offset, size)\n afterWrite(size)\n size\n }\n }\n\n @ExperimentalIoApi\n @Suppress(\"DEPRECATION\")\n override suspend fun writeSuspendSession(visitor: suspend WriterSuspendSession.() -> Unit) {\n val session = beginWriteSession()\n visitor(session)\n }\n\n @Suppress(\"DEPRECATION\")\n override fun beginWriteSession(): WriterSuspendSession {\n return object : WriterSuspendSession {\n override fun request(min: Int): IoBuffer? {\n if (availableForWrite == 0) return null\n return writable.prepareWriteHead(min) as IoBuffer\n }\n\n override fun written(n: Int) {\n writable.afterHeadWrite()\n afterWrite(n)\n }\n\n override fun flush() {\n this@ByteChannelSequentialBase.flush()\n }\n\n override suspend fun tryAwait(n: Int) {\n if (availableForWrite < n) {\n awaitAtLeastNBytesAvailableForWrite(n)\n }\n }\n }\n }\n\n override fun endWriteSession(written: Int) {\n writable.afterHeadWrite()\n afterWrite(written)\n }\n\n override suspend fun readByte(): Byte {\n return if (readable.isNotEmpty) {\n readable.readByte().also { afterRead(1) }\n } else {\n readByteSlow()\n }\n }\n\n private fun checkClosed(n: Int) {\n if (closed) {\n throw closedCause ?: prematureClose(n)\n }\n }\n\n private fun prematureClose(n: Int): Exception {\n return EOFException(\"$n bytes required but EOF reached\")\n }\n\n private suspend fun readByteSlow(): Byte {\n do {\n awaitSuspend(1)\n\n if (readable.isNotEmpty) return readable.readByte().also { afterRead(1) }\n checkClosed(1)\n } while (true)\n }\n\n override suspend fun readShort(): Short {\n return if (readable.hasBytes(2)) {\n readable.readShort().reverseRead().also { afterRead(2) }\n } else {\n readShortSlow()\n }\n }\n\n private suspend fun readShortSlow(): Short {\n readNSlow(2) { return readable.readShort().reverseRead().also { afterRead(2) } }\n }\n\n @Deprecated(\"Consider providing consumed count of bytes\", level = DeprecationLevel.ERROR)\n protected fun afterRead() {\n afterRead(0)\n }\n\n protected fun afterRead(count: Int) {\n _totalBytesRead += count\n slot.resume()\n }\n\n @Suppress(\"NOTHING_TO_INLINE\", \"DEPRECATION_ERROR\")\n private inline fun Short.reverseRead(): Short = when {\n readByteOrder == ByteOrder.BIG_ENDIAN -> this\n else -> this.reverseByteOrder()\n }\n\n @Suppress(\"NOTHING_TO_INLINE\", \"DEPRECATION_ERROR\")\n private inline fun Int.reverseRead(): Int = when {\n readByteOrder == ByteOrder.BIG_ENDIAN -> this\n else -> this.reverseByteOrder()\n }\n\n @Suppress(\"NOTHING_TO_INLINE\", \"DEPRECATION_ERROR\")\n private inline fun Long.reverseRead(): Long = when {\n readByteOrder == ByteOrder.BIG_ENDIAN -> this\n else -> this.reverseByteOrder()\n }\n\n @Suppress(\"NOTHING_TO_INLINE\", \"DEPRECATION_ERROR\")\n private inline fun Float.reverseRead(): Float = when {\n readByteOrder == ByteOrder.BIG_ENDIAN -> this\n else -> this.reverseByteOrder()\n }\n\n @Suppress(\"NOTHING_TO_INLINE\", \"DEPRECATION_ERROR\")\n private inline fun Double.reverseRead(): Double = when {\n readByteOrder == ByteOrder.BIG_ENDIAN -> this\n else -> this.reverseByteOrder()\n }\n\n override suspend fun readInt(): Int {\n return if (readable.hasBytes(4)) {\n readable.readInt().reverseRead().also { afterRead(4) }\n } else {\n readIntSlow()\n }\n }\n\n private suspend fun readIntSlow(): Int {\n readNSlow(4) {\n return readable.readInt().reverseRead().also { afterRead(4) }\n }\n }\n\n override suspend fun readLong(): Long {\n return if (readable.hasBytes(8)) {\n readable.readLong().reverseRead().also { afterRead(8) }\n } else {\n readLongSlow()\n }\n }\n\n private suspend fun readLongSlow(): Long {\n readNSlow(8) {\n return readable.readLong().reverseRead().also { afterRead(8) }\n }\n }\n\n override suspend fun readFloat(): Float = if (readable.hasBytes(4)) {\n readable.readFloat().reverseRead().also { afterRead(4) }\n } else {\n readFloatSlow()\n }\n\n private suspend fun readFloatSlow(): Float {\n readNSlow(4) {\n return readable.readFloat().reverseRead().also { afterRead(4) }\n }\n }\n\n override suspend fun readDouble(): Double = if (readable.hasBytes(8)) {\n readable.readDouble().reverseRead().also { afterRead(8) }\n } else {\n readDoubleSlow()\n }\n\n private suspend fun readDoubleSlow(): Double {\n readNSlow(8) {\n return readable.readDouble().reverseRead().also { afterRead(8) }\n }\n }\n\n override suspend fun readRemaining(limit: Long, headerSizeHint: Int): ByteReadPacket {\n ensureNotFailed()\n\n val builder = BytePacketBuilder(headerSizeHint)\n\n val size = minOf(limit, readable.remaining)\n builder.writePacket(readable, size)\n val remaining = limit - builder.size\n\n return if (remaining == 0L || isClosedForRead) {\n afterRead(remaining.toInt())\n ensureNotFailed(builder)\n builder.build()\n } else {\n readRemainingSuspend(builder, limit)\n }\n }\n\n private suspend fun readRemainingSuspend(builder: BytePacketBuilder, limit: Long): ByteReadPacket {\n while (builder.size < limit) {\n val partLimit = minOf(limit - builder.size, readable.remaining)\n builder.writePacket(readable, partLimit)\n afterRead(partLimit.toInt())\n ensureNotFailed(builder)\n\n if (isClosedForRead || builder.size == limit.toInt()) {\n break\n }\n\n awaitSuspend(1)\n }\n\n ensureNotFailed(builder)\n return builder.build()\n }\n\n override suspend fun readPacket(size: Int, headerSizeHint: Int): ByteReadPacket {\n val builder = BytePacketBuilder(headerSizeHint)\n\n var remaining = size\n val partSize = minOf(remaining.toLong(), readable.remaining).toInt()\n remaining -= partSize\n builder.writePacket(readable, partSize)\n afterRead(partSize)\n\n return if (remaining > 0) readPacketSuspend(builder, remaining)\n else builder.build()\n }\n\n private suspend fun readPacketSuspend(builder: BytePacketBuilder, size: Int): ByteReadPacket {\n var remaining = size\n while (remaining > 0) {\n val partSize = minOf(remaining.toLong(), readable.remaining).toInt()\n remaining -= partSize\n builder.writePacket(readable, partSize)\n afterRead(partSize)\n\n if (remaining > 0) {\n awaitSuspend(1)\n }\n }\n\n return builder.build()\n }\n\n protected fun readAvailableClosed(): Int {\n closedCause?.let { throw it }\n return -1\n }\n\n override suspend fun readAvailable(dst: IoBuffer): Int = readAvailable(dst as Buffer)\n\n internal suspend fun readAvailable(dst: Buffer): Int = when {\n closedCause != null -> throw closedCause!!\n readable.canRead() -> {\n val size = minOf(dst.writeRemaining.toLong(), readable.remaining).toInt()\n readable.readFully(dst, size)\n afterRead(size)\n size\n }\n closed -> readAvailableClosed()\n !dst.canWrite() -> 0\n else -> readAvailableSuspend(dst)\n }\n\n private suspend fun readAvailableSuspend(dst: Buffer): Int {\n awaitSuspend(1)\n return readAvailable(dst)\n }\n\n override suspend fun readFully(dst: IoBuffer, n: Int) {\n readFully(dst as Buffer, n)\n }\n\n private suspend fun readFully(dst: Buffer, n: Int) {\n require(n <= dst.writeRemaining) { \"Not enough space in the destination buffer to write $n bytes\" }\n require(n >= 0) { \"n shouldn't be negative\" }\n\n return when {\n closedCause != null -> throw closedCause!!\n readable.remaining >= n -> readable.readFully(dst, n).also { afterRead(n) }\n closed -> throw EOFException(\n \"Channel is closed and not enough bytes available: required $n but $availableForRead available\"\n )\n else -> readFullySuspend(dst, n)\n }\n }\n\n private suspend fun readFullySuspend(dst: Buffer, n: Int) {\n awaitSuspend(n)\n return readFully(dst, n)\n }\n\n override suspend fun readAvailable(dst: ByteArray, offset: Int, length: Int): Int = when {\n readable.canRead() -> {\n val size = minOf(length.toLong(), readable.remaining).toInt()\n readable.readFully(dst, offset, size)\n afterRead(size)\n size\n }\n closed -> readAvailableClosed()\n else -> readAvailableSuspend(dst, offset, length)\n }\n\n private suspend fun readAvailableSuspend(dst: ByteArray, offset: Int, length: Int): Int {\n awaitSuspend(1)\n return readAvailable(dst, offset, length)\n }\n\n override suspend fun readFully(dst: ByteArray, offset: Int, length: Int) {\n val rc = readAvailable(dst, offset, length)\n if (rc == length) return\n if (rc == -1) throw EOFException(\"Unexpected end of stream\")\n\n return readFullySuspend(dst, offset + rc, length - rc)\n }\n\n private suspend fun readFullySuspend(dst: ByteArray, offset: Int, length: Int) {\n var written = 0\n\n while (written < length) {\n val rc = readAvailable(dst, offset + written, length - written)\n if (rc == -1) throw EOFException(\"Unexpected end of stream\")\n written += rc\n }\n }\n\n override suspend fun readBoolean(): Boolean {\n return if (readable.canRead()) (readable.readByte() == 1.toByte()).also { afterRead(1) }\n else readBooleanSlow()\n }\n\n private suspend fun readBooleanSlow(): Boolean {\n awaitSuspend(1)\n checkClosed(1)\n return readBoolean()\n }\n\n private var lastReadAvailable: Int\n get() = state.lastReadAvailable\n set(value) {\n state.lastReadAvailable = value\n }\n\n private var lastReadView: ChunkBuffer\n get() = state.lastReadView\n set(value) {\n state.lastReadView = value\n }\n\n private fun completeReading() {\n val remaining = lastReadView.readRemaining\n val delta = lastReadAvailable - remaining\n if (lastReadView !== Buffer.Empty) {\n readable.completeReadHead(lastReadView)\n }\n if (delta > 0) {\n afterRead(delta)\n }\n lastReadAvailable = 0\n lastReadView = ChunkBuffer.Empty\n }\n\n override suspend fun await(atLeast: Int): Boolean {\n require(atLeast >= 0) { \"atLeast parameter shouldn't be negative: $atLeast\" }\n require(atLeast <= EXPECTED_CAPACITY) {\n \"atLeast parameter shouldn't be larger than max buffer size of $EXPECTED_CAPACITY: $atLeast\"\n }\n\n completeReading()\n\n if (atLeast == 0) return !isClosedForRead\n if (readable.remaining >= atLeast) return true\n\n return awaitSuspend(atLeast)\n }\n\n internal suspend fun awaitInternalAtLeast1(): Boolean = if (readable.isNotEmpty) {\n true\n } else {\n awaitSuspend(1)\n }\n\n protected suspend fun awaitSuspend(atLeast: Int): Boolean {\n require(atLeast >= 0)\n\n awaitAtLeastNBytesAvailableForRead(atLeast)\n prepareFlushedBytes()\n\n closedCause?.let { throw it }\n return !isClosedForRead && availableForRead >= atLeast\n }\n\n override fun discard(n: Int): Int {\n closedCause?.let { throw it }\n\n if (n == 0) {\n return 0\n }\n\n return readable.discard(n).also {\n afterRead(n)\n requestNextView(1)\n }\n }\n\n override fun request(atLeast: Int): IoBuffer? {\n closedCause?.let { throw it }\n\n completeReading()\n\n return requestNextView(atLeast)\n }\n\n private fun requestNextView(atLeast: Int): IoBuffer? {\n if (readable.isEmpty) {\n prepareFlushedBytes()\n }\n\n val view = readable.prepareReadHead(atLeast) as IoBuffer?\n\n if (view == null) {\n lastReadView = ChunkBuffer.Empty\n lastReadAvailable = 0\n } else {\n lastReadView = view\n lastReadAvailable = view.readRemaining\n }\n\n return view\n }\n\n override suspend fun discard(max: Long): Long {\n val discarded = readable.discard(max)\n\n return if (discarded == max || isClosedForRead) {\n ensureNotFailed()\n return discarded\n } else {\n discardSuspend(max, discarded)\n }\n }\n\n private suspend fun discardSuspend(max: Long, discarded0: Long): Long {\n var discarded = discarded0\n\n do {\n if (!await(1)) break\n discarded += readable.discard(max - discarded)\n } while (discarded < max && !isClosedForRead)\n\n ensureNotFailed()\n\n return discarded\n }\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Use read instead.\")\n override fun readSession(consumer: ReadSession.() -> Unit) {\n try {\n consumer(this)\n } finally {\n completeReading()\n }\n }\n\n override fun startReadSession(): SuspendableReadSession = this\n\n override fun endReadSession() {\n completeReading()\n }\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Use read instead.\")\n override suspend fun readSuspendableSession(consumer: suspend SuspendableReadSession.() -> Unit) {\n try {\n consumer(this)\n } finally {\n completeReading()\n }\n }\n\n override suspend fun <A : Appendable> readUTF8LineTo(out: A, limit: Int): Boolean {\n if (isClosedForRead) {\n val cause = closedCause\n if (cause != null) {\n throw cause\n }\n\n return false\n }\n @OptIn(DangerousInternalIoApi::class)\n return decodeUTF8LineLoopSuspend(out, limit) { size ->\n afterRead(size)\n if (await(size)) readable\n else null\n }\n }\n\n override suspend fun readUTF8Line(limit: Int): String? {\n val sb = StringBuilder()\n if (!readUTF8LineTo(sb, limit)) {\n return null\n }\n\n return sb.toString()\n }\n\n override fun cancel(cause: Throwable?): Boolean {\n if (closedCause != null || closed) {\n return false\n }\n\n return close(cause ?: io.ktor.utils.io.CancellationException(\"Channel cancelled\"))\n }\n\n override fun close(cause: Throwable?): Boolean {\n if (closed || closedCause != null) return false\n closedCause = cause\n closed = true\n if (cause != null) {\n readable.release()\n writable.release()\n flushBuffer.release()\n } else {\n flush()\n }\n\n slot.cancel(cause)\n return true\n }\n\n internal fun transferTo(dst: ByteChannelSequentialBase, limit: Long): Long {\n val size = readable.remaining\n return if (size <= limit) {\n dst.writable.writePacket(readable)\n dst.afterWrite(size.toInt())\n afterRead(size.toInt())\n size\n } else {\n 0\n }\n }\n\n private suspend inline fun readNSlow(n: Int, block: () -> Nothing): Nothing {\n do {\n awaitSuspend(n)\n\n if (readable.hasBytes(n)) block()\n checkClosed(n)\n } while (true)\n }\n\n @Suppress(\"DEPRECATION\")\n private suspend fun writeAvailableSuspend(src: IoBuffer): Int {\n awaitAtLeastNBytesAvailableForWrite(1)\n return writeAvailable(src)\n }\n\n private suspend fun writeAvailableSuspend(src: ByteArray, offset: Int, length: Int): Int {\n awaitAtLeastNBytesAvailableForWrite(1)\n return writeAvailable(src, offset, length)\n }\n\n @Deprecated(\"Consider providing written count of bytes\", level = DeprecationLevel.ERROR)\n protected fun afterWrite() {\n afterWrite(0)\n }\n\n protected fun afterWrite(count: Int) {\n _totalBytesWritten += count\n\n if (closed) {\n writable.release()\n ensureNotClosed()\n }\n if (autoFlush || availableForWrite == 0) {\n flush()\n }\n }\n\n override suspend fun awaitFreeSpace() {\n flush()\n awaitAtLeastNBytesAvailableForWrite(1)\n ensureNotClosed()\n }\n\n final override suspend fun peekTo(\n destination: Memory,\n destinationOffset: Long,\n offset: Long,\n min: Long,\n max: Long\n ): Long {\n var bytesCopied = 0L\n\n @Suppress(\"DEPRECATION\")\n readSuspendableSession {\n val desiredSize = (min + offset).coerceAtMost(EXPECTED_CAPACITY).toInt()\n\n await(desiredSize)\n\n val buffer = request(1) ?: IoBuffer.Empty\n if (buffer.readRemaining > offset) {\n bytesCopied = minOf(buffer.readRemaining.toLong() - offset, max, destination.size - destinationOffset)\n buffer.memory.copyTo(destination, offset, bytesCopied, destinationOffset)\n }\n }\n\n return bytesCopied\n }\n}\n","package io.ktor.utils.io.charsets\n\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.*\n\npublic expect abstract class Charset {\n @ExperimentalIoApi\n public abstract fun newEncoder(): CharsetEncoder\n\n @ExperimentalIoApi\n public abstract fun newDecoder(): CharsetDecoder\n\n public companion object {\n public fun forName(name: String): Charset\n }\n}\n\npublic expect val Charset.name: String\n\n// ----------------------------- ENCODER -------------------------------------------------------------------------------\n@ExperimentalIoApi\npublic expect abstract class CharsetEncoder\n\npublic expect val CharsetEncoder.charset: Charset\n\n@Deprecated(\n \"Use writeText on Output instead.\",\n ReplaceWith(\"dst.writeText(input, fromIndex, toIndex, charset)\", \"io.ktor.utils.io.core.writeText\")\n)\npublic fun CharsetEncoder.encode(input: CharSequence, fromIndex: Int, toIndex: Int, dst: Output) {\n encodeToImpl(dst, input, fromIndex, toIndex)\n}\n\n@ExperimentalIoApi\npublic expect fun CharsetEncoder.encodeToByteArray(\n input: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = input.length\n): ByteArray\n\n@Deprecated(\n \"Internal API. Will be hidden in future releases. Use encodeToByteArray instead.\",\n replaceWith = ReplaceWith(\"encodeToByteArray(input, fromIndex, toIndex)\")\n)\npublic fun CharsetEncoder.encodeToByteArrayImpl(\n input: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = input.length\n): ByteArray {\n return encodeToByteArray(input, fromIndex, toIndex)\n}\n\n@ExperimentalIoApi\npublic expect fun CharsetEncoder.encodeUTF8(input: ByteReadPacket, dst: Output)\n\n@ExperimentalIoApi\npublic fun CharsetEncoder.encode(\n input: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = input.length\n): ByteReadPacket = buildPacket {\n encodeToImpl(this, input, fromIndex, toIndex)\n}\n\n@ExperimentalIoApi\npublic fun CharsetEncoder.encodeUTF8(input: ByteReadPacket): ByteReadPacket = buildPacket {\n encodeUTF8(input, this)\n}\n\n@ExperimentalIoApi\npublic fun CharsetEncoder.encode(input: CharArray, fromIndex: Int, toIndex: Int, dst: Output) {\n var start = fromIndex\n\n if (start >= toIndex) return\n dst.writeWhileSize(1) { view: Buffer ->\n val rc = encodeArrayImpl(input, start, toIndex, view)\n check(rc >= 0)\n start += rc\n\n when {\n start >= toIndex -> 0\n rc == 0 -> 8\n else -> 1\n }\n }\n\n encodeCompleteImpl(dst)\n}\n\n// ----------------------------- DECODER -------------------------------------------------------------------------------\n\n@ExperimentalIoApi\npublic expect abstract class CharsetDecoder\n\n/**\n * Decoder's charset it is created for.\n */\npublic expect val CharsetDecoder.charset: Charset\n\n@ExperimentalIoApi\npublic fun CharsetDecoder.decode(input: Input, max: Int = Int.MAX_VALUE): String =\n buildString(minOf(max.toLong(), input.sizeEstimate()).toInt()) {\n decode(input, this, max)\n }\n\n@ExperimentalIoApi\npublic expect fun CharsetDecoder.decode(input: Input, dst: Appendable, max: Int): Int\n\n@ExperimentalIoApi\npublic expect fun CharsetDecoder.decodeExactBytes(input: Input, inputLength: Int): String\n\n// ----------------------------- REGISTRY ------------------------------------------------------------------------------\npublic expect object Charsets {\n public val UTF_8: Charset\n public val ISO_8859_1: Charset\n}\n\npublic expect open class MalformedInputException(message: String) : Throwable\n\npublic class TooLongLineException(message: String) : MalformedInputException(message)\n\n// ----------------------------- INTERNALS -----------------------------------------------------------------------------\n\ninternal fun CharsetEncoder.encodeArrayImpl(input: CharArray, fromIndex: Int, toIndex: Int, dst: Buffer): Int {\n val length = toIndex - fromIndex\n return encodeImpl(CharArraySequence(input, fromIndex, length), 0, length, dst)\n}\n\ninternal expect fun CharsetEncoder.encodeImpl(input: CharSequence, fromIndex: Int, toIndex: Int, dst: Buffer): Int\n\ninternal expect fun CharsetEncoder.encodeComplete(dst: Buffer): Boolean\n\ninternal expect fun CharsetDecoder.decodeBuffer(\n input: Buffer,\n out: Appendable,\n lastBuffer: Boolean,\n max: Int = Int.MAX_VALUE\n): Int\n\ninternal fun CharsetEncoder.encodeToByteArrayImpl1(\n input: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = input.length\n): ByteArray {\n var start = fromIndex\n if (start >= toIndex) return EmptyByteArray\n val single = ChunkBuffer.Pool.borrow()\n\n try {\n val rc = encodeImpl(input, start, toIndex, single)\n start += rc\n if (start == toIndex) {\n val result = ByteArray(single.readRemaining)\n single.readFully(result)\n return result\n }\n\n return buildPacket {\n appendSingleChunk(single.duplicate())\n encodeToImpl(this, input, start, toIndex)\n }.readBytes()\n } finally {\n single.release(ChunkBuffer.Pool)\n }\n}\n\ninternal fun Input.sizeEstimate(): Long = when (this) {\n is ByteReadPacket -> remaining\n is AbstractInput -> maxOf(remaining, 16)\n else -> 16\n}\n\nprivate fun CharsetEncoder.encodeCompleteImpl(dst: Output): Int {\n var size = 1\n var bytesWritten = 0\n\n dst.writeWhile { view ->\n val before = view.writeRemaining\n if (encodeComplete(view)) {\n size = 0\n } else {\n size++\n }\n bytesWritten += before - view.writeRemaining\n size > 0\n }\n\n return bytesWritten\n}\n\ninternal fun CharsetEncoder.encodeToImpl(\n destination: Output,\n input: CharSequence,\n fromIndex: Int,\n toIndex: Int\n): Int {\n var start = fromIndex\n if (start >= toIndex) return 0\n\n var bytesWritten = 0\n\n destination.writeWhileSize(1) { view: Buffer ->\n val before = view.writeRemaining\n val rc = encodeImpl(input, start, toIndex, view)\n check(rc >= 0)\n start += rc\n bytesWritten += before - view.writeRemaining\n\n when {\n start >= toIndex -> 0\n rc == 0 -> 8\n else -> 1\n }\n }\n\n bytesWritten += encodeCompleteImpl(destination)\n return bytesWritten\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\nimport io.ktor.utils.io.core.internal.*\n\npublic actual inline fun Memory.loadShortAt(offset: Int): Short = view.getInt16(offset, false)\n\npublic actual inline fun Memory.loadShortAt(offset: Long): Short = loadShortAt(offset.toIntOrFail(\"offset\"))\n\npublic actual inline fun Memory.loadIntAt(offset: Int): Int = view.getInt32(offset, false)\n\npublic actual inline fun Memory.loadIntAt(offset: Long): Int = loadIntAt(offset.toIntOrFail(\"offset\"))\n\npublic actual inline fun Memory.loadLongAt(offset: Int): Long =\n (view.getUint32(offset, false).toLong() shl 32) or\n view.getUint32(offset + 4, false).toLong()\n\npublic actual inline fun Memory.loadLongAt(offset: Long): Long = loadLongAt(offset.toIntOrFail(\"offset\"))\n\npublic actual inline fun Memory.loadFloatAt(offset: Int): Float = view.getFloat32(offset, false)\n\npublic actual inline fun Memory.loadFloatAt(offset: Long): Float = loadFloatAt(offset.toIntOrFail(\"offset\"))\n\npublic actual inline fun Memory.loadDoubleAt(offset: Int): Double = view.getFloat64(offset, false)\n\npublic actual inline fun Memory.loadDoubleAt(offset: Long): Double = loadDoubleAt(offset.toIntOrFail(\"offset\"))\n\n/**\n * Write regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeIntAt(offset: Int, value: Int) {\n view.setInt32(offset, value, littleEndian = false)\n}\n\n/**\n * Write regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeIntAt(offset: Long, value: Int) {\n view.setInt32(offset.toIntOrFail(\"offset\"), value, littleEndian = false)\n}\n\n/**\n * Write short signed 16bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeShortAt(offset: Int, value: Short) {\n view.setInt16(offset, value, littleEndian = false)\n}\n\n/**\n * Write short signed 16bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeShortAt(offset: Long, value: Short) {\n view.setInt16(offset.toIntOrFail(\"offset\"), value, littleEndian = false)\n}\n\n/**\n * Write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeLongAt(offset: Int, value: Long) {\n view.setInt32(offset, (value shr 32).toInt(), littleEndian = false)\n view.setInt32(offset + 4, (value and 0xffffffffL).toInt(), littleEndian = false)\n}\n\n/**\n * Write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeLongAt(offset: Long, value: Long) {\n storeLongAt(offset.toIntOrFail(\"offset\"), value)\n}\n\n/**\n * Write short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeFloatAt(offset: Int, value: Float) {\n view.setFloat32(offset, value, littleEndian = false)\n}\n\n/**\n * Write short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeFloatAt(offset: Long, value: Float) {\n view.setFloat32(offset.toIntOrFail(\"offset\"), value, littleEndian = false)\n}\n\n/**\n * Write short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeDoubleAt(offset: Int, value: Double) {\n view.setFloat64(offset, value, littleEndian = false)\n}\n\n/**\n * Write short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic actual inline fun Memory.storeDoubleAt(offset: Long, value: Double) {\n view.setFloat64(offset.toIntOrFail(\"offset\"), value, littleEndian = false)\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.Memory\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: ByteArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyBytesTemplate(offset, length) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: ShortArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyTemplate(offset, length, 2) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: IntArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyTemplate(offset, length, 4) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: LongArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyTemplate(offset, length, 8) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: FloatArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyTemplate(offset, length, 4) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: DoubleArray, offset: Int = 0, length: Int = dst.size - offset) {\n readFullyTemplate(offset, length, 8) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }.requireNoRemaining()\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFully(dst: Buffer, length: Int = dst.writeRemaining) {\n readFullyBytesTemplate(0, length) { src, _, count ->\n src.readFully(dst, count)\n }.requireNoRemaining()\n}\n\npublic fun Input.readFully(destination: Memory, destinationOffset: Int, length: Int) {\n readFully(destination, destinationOffset.toLong(), length.toLong())\n}\n\npublic fun Input.readFully(destination: Memory, destinationOffset: Long, length: Long) {\n if (readAvailable(destination, destinationOffset, length) != length) {\n prematureEndOfStream(length)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: ByteArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyBytesTemplate(offset, length) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: ShortArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyTemplate(offset, length, 2) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: IntArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyTemplate(offset, length, 4) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: LongArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyTemplate(offset, length, 8) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: FloatArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyTemplate(offset, length, 4) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readAvailable(dst: DoubleArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return length - readFullyTemplate(offset, length, 8) { src, dstOffset, count ->\n src.readFully(dst, dstOffset, count)\n }\n}\n\npublic fun Input.readAvailable(dst: Buffer, length: Int = dst.writeRemaining): Int {\n return length - readFullyBytesTemplate(0, length) { src, _, count ->\n src.readFully(dst, count)\n }\n}\n\npublic fun Input.readAvailable(destination: Memory, destinationOffset: Int, length: Int): Int {\n return readAvailable(destination, destinationOffset.toLong(), length.toLong()).toInt()\n}\n\npublic fun Input.readAvailable(destination: Memory, destinationOffset: Long, length: Long): Long {\n val remaining = readFullyBytesTemplate(destinationOffset, length) { src, srcOffset, dstOffset, count ->\n src.copyTo(destination, srcOffset, count.toLong(), dstOffset)\n }\n val result = length - remaining\n return when {\n result == 0L && endOfInput -> -1\n else -> result\n }\n}\n\n/**\n * @return number of bytes remaining or 0 if all [length] bytes were copied\n */\nprivate inline fun Input.readFullyBytesTemplate(\n initialDstOffset: Int,\n length: Int,\n readBlock: (src: Buffer, dstOffset: Int, count: Int) -> Unit\n): Int {\n var remaining = length\n var dstOffset = initialDstOffset\n\n takeWhile { buffer ->\n val count = minOf(remaining, buffer.readRemaining)\n readBlock(buffer, dstOffset, count)\n remaining -= count\n dstOffset += count\n\n remaining > 0\n }\n\n return remaining\n}\n\n/**\n * @return number of bytes remaining or 0 if all [length] bytes were copied\n */\nprivate inline fun Input.readFullyBytesTemplate(\n initialDstOffset: Long,\n length: Long,\n readBlock: (src: Memory, srcOffset: Long, dstOffset: Long, count: Int) -> Unit\n): Long {\n var remaining = length\n var dstOffset = initialDstOffset\n\n takeWhile { buffer ->\n val count = minOf(remaining, buffer.readRemaining.toLong()).toInt()\n readBlock(buffer.memory, buffer.readPosition.toLong(), dstOffset, count)\n buffer.discardExact(count)\n remaining -= count\n dstOffset += count\n\n remaining > 0\n }\n\n return remaining\n}\n\n/**\n * @return number of elements remaining or 0 if all [length] elements were copied\n */\nprivate inline fun Input.readFullyTemplate(\n offset: Int,\n length: Int,\n componentSize: Int,\n readBlock: (src: Buffer, dstOffset: Int, count: Int) -> Unit\n): Int {\n var remaining = length\n var dstOffset = offset\n\n takeWhileSize { buffer ->\n val count = minOf(remaining, buffer.readRemaining / componentSize)\n readBlock(buffer, dstOffset, count)\n remaining -= count\n dstOffset += count\n\n when {\n remaining > 0 -> componentSize\n else -> 0\n }\n }\n\n return remaining\n}\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun Int.requireNoRemaining() {\n if (this > 0) {\n prematureEndOfStream(this)\n }\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.Memory\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\nimport kotlin.contracts.*\n\n/**\n * A read-write facade to actual buffer of fixed size. Multiple views could share the same actual buffer.\n * Concurrent unsafe. The only concurrent-safe operation is [release].\n * In most cases [ByteReadPacket] and [BytePacketBuilder] should be used instead.\n */\n@Suppress(\"DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES\", \"DEPRECATION\")\n@Deprecated(\"Use Memory, Input or Output instead.\")\npublic expect class IoBuffer : Input, Output, ChunkBuffer {\n\n @Suppress(\"ConvertSecondaryConstructorToPrimary\")\n public constructor(memory: Memory, origin: ChunkBuffer?)\n\n @Deprecated(\n \"Not supported anymore. All operations are big endian by default. \" +\n \"Read/write with readXXXLittleEndian/writeXXXLittleEndian or \" +\n \"do readXXX/writeXXX with X.reverseByteOrder() instead.\",\n level = DeprecationLevel.ERROR\n )\n final override var byteOrder: ByteOrder\n\n override fun close()\n\n final override fun flush()\n\n public fun release(pool: ObjectPool<IoBuffer>)\n\n @Suppress(\"DEPRECATION\")\n public companion object {\n /**\n * Number of bytes usually reserved in the end of chunk\n * when several instances of [ChunkBuffer] are connected into a chain (usually inside of [ByteReadPacket]\n * or [BytePacketBuilder])\n */\n @DangerousInternalIoApi\n public val ReservedSize: Int\n\n /**\n * The empty buffer singleton: it has zero capacity for read and write.\n */\n public val Empty: IoBuffer\n\n /**\n * The default buffer pool\n */\n public val Pool: ObjectPool<IoBuffer>\n\n /**\n * Pool that always instantiates new buffers instead of reusing it\n */\n public val NoPool: ObjectPool<IoBuffer>\n\n /**\n * A pool that always returns [IoBuffer.Empty]\n */\n public val EmptyPool: ObjectPool<IoBuffer>\n }\n}\n\n/**\n * Read the specified number of bytes specified (optional, read all remaining by default)\n */\npublic fun Buffer.readBytes(count: Int = readRemaining): ByteArray {\n if (count == 0) {\n return EmptyByteArray\n }\n\n val result = ByteArray(count)\n readFully(result)\n return result\n}\n\n@Suppress(\"DEPRECATION\")\ninternal fun IoBuffer.releaseImpl(pool: ObjectPool<IoBuffer>) {\n if (release()) {\n val origin = origin\n if (origin is IoBuffer) {\n unlink()\n origin.release(pool)\n } else {\n pool.recycle(this)\n }\n }\n}\n\n@Suppress(\"DEPRECATION\", \"DEPRECATION_ERROR\")\ninternal object EmptyBufferPoolImpl : NoPoolImpl<IoBuffer>() {\n override fun borrow() = IoBuffer.Empty\n}\n\ninternal tailrec fun ChunkBuffer?.releaseAll(pool: ObjectPool<ChunkBuffer>) {\n if (this == null) return\n val next = cleanNext()\n release(pool)\n next.releaseAll(pool)\n}\n\ninternal inline fun ChunkBuffer.forEachChunk(block: (ChunkBuffer) -> Unit) {\n contract {\n callsInPlace(block, InvocationKind.AT_LEAST_ONCE)\n }\n var current = this\n do {\n block(current)\n current = current.next ?: break\n } while (true)\n}\n\n/**\n * Copy every element of the chain starting from this and setup next links.\n */\ninternal fun ChunkBuffer.copyAll(): ChunkBuffer {\n val copied = duplicate()\n val next = this.next ?: return copied\n\n return next.copyAll(copied, copied)\n}\n\nprivate tailrec fun ChunkBuffer.copyAll(head: ChunkBuffer, prev: ChunkBuffer): ChunkBuffer {\n val copied = duplicate()\n prev.next = copied\n\n val next = this.next ?: return head\n\n return next.copyAll(head, copied)\n}\n\ninternal tailrec fun ChunkBuffer.findTail(): ChunkBuffer {\n val next = this.next ?: return this\n return next.findTail()\n}\n\n/**\n * Summarize remainings of all elements of the chain\n */\n@DangerousInternalIoApi\npublic fun ChunkBuffer.remainingAll(): Long = remainingAll(0L)\n\n@Suppress(\"DEPRECATION\", \"UNUSED\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun remainingAll(buffer: IoBuffer): Long = buffer.remainingAll()\n\nprivate tailrec fun ChunkBuffer.remainingAll(n: Long): Long {\n val rem = readRemaining.toLong() + n\n val next = this.next ?: return rem\n\n return next.remainingAll(rem)\n}\n\ninternal tailrec fun ChunkBuffer.isEmpty(): Boolean {\n if (readRemaining > 0) return false\n val next = this.next ?: return true\n return next.isEmpty()\n}\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Long.coerceAtMostMaxInt(): Int = minOf(this, Int.MAX_VALUE.toLong()).toInt()\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Long.coerceAtMostMaxIntOrFail(message: String): Int {\n if (this > Int.MAX_VALUE.toLong()) throw IllegalArgumentException(message)\n return this.toInt()\n}\n\ninternal fun Buffer.peekTo(destination: Memory, destinationOffset: Long, offset: Long, min: Long, max: Long): Long {\n val size = minOf(\n destination.size - destinationOffset,\n max,\n readRemaining.toLong()\n )\n\n memory.copyTo(\n destination,\n readPosition + offset,\n size,\n destinationOffset\n )\n\n return size\n}\n\npublic class BufferLimitExceededException(message: String) : Exception(message)\n","package io.ktor.utils.io.core.internal\n\nimport kotlin.contracts.*\n\n@PublishedApi\ninternal inline fun require(condition: Boolean, crossinline message: () -> String) {\n contract {\n returns() implies condition\n }\n\n if (!condition) {\n val m = object : RequireFailureCapture() {\n override fun doFail(): Nothing {\n throw IllegalArgumentException(message())\n }\n }\n m.doFail()\n }\n}\n\n@PublishedApi\ninternal abstract class RequireFailureCapture {\n abstract fun doFail(): Nothing\n}\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Channel for asynchronous writing of sequences of bytes.\n * This is a **single-writer channel**.\n *\n * Operations on this channel cannot be invoked concurrently, unless explicitly specified otherwise\n * in description. Exceptions are [close] and [flush].\n */\npublic expect interface ByteWriteChannel {\n /**\n * Returns number of bytes that can be written without suspension. Write operations do no suspend and return\n * immediately when this number is at least the number of bytes requested for write.\n */\n public val availableForWrite: Int\n\n /**\n * Returns `true` is channel has been closed and attempting to write to the channel will cause an exception.\n */\n public val isClosedForWrite: Boolean\n\n /**\n * Returns `true` if channel flushes automatically all pending bytes after every write function call.\n * If `false` then flush only happens at manual [flush] invocation or when the buffer is full.\n */\n public val autoFlush: Boolean\n\n /**\n * Byte order that is used for multi-byte write operations\n * (such as [writeShort], [writeInt], [writeLong], [writeFloat], and [writeDouble]).\n */\n @Deprecated(\n \"Setting byte order is no longer supported. Read/write in big endian and use reverseByteOrder() extensions.\",\n level = DeprecationLevel.ERROR\n )\n public var writeByteOrder: ByteOrder\n\n /**\n * Number of bytes written to the channel.\n * It is not guaranteed to be atomic so could be updated in the middle of write operation.\n */\n public val totalBytesWritten: Long\n\n /**\n * An closure cause exception or `null` if closed successfully or not yet closed\n */\n public val closedCause: Throwable?\n\n /**\n * Writes as much as possible and only suspends if buffer is full\n */\n public suspend fun writeAvailable(src: ByteArray, offset: Int, length: Int): Int\n\n public suspend fun writeAvailable(src: IoBuffer): Int\n\n /**\n * Writes all [src] bytes and suspends until all bytes written. Causes flush if buffer filled up or when [autoFlush]\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeFully(src: ByteArray, offset: Int, length: Int)\n\n public suspend fun writeFully(src: IoBuffer)\n\n public suspend fun writeFully(src: Buffer)\n\n public suspend fun writeFully(memory: Memory, startIndex: Int, endIndex: Int)\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Use write { } instead.\")\n public suspend fun writeSuspendSession(visitor: suspend WriterSuspendSession.() -> Unit)\n\n /**\n * Writes a [packet] fully or fails if channel get closed before the whole packet has been written\n */\n public suspend fun writePacket(packet: ByteReadPacket)\n\n /**\n * Writes long number and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeLong(l: Long)\n\n /**\n * Writes int number and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeInt(i: Int)\n\n /**\n * Writes short number and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeShort(s: Short)\n\n /**\n * Writes byte and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeByte(b: Byte)\n\n /**\n * Writes double number and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeDouble(d: Double)\n\n /**\n * Writes float number and suspends until written.\n * Crashes if channel get closed while writing.\n */\n public suspend fun writeFloat(f: Float)\n\n /**\n * Invokes [block] when at least 1 byte is available for write.\n */\n @ExperimentalIoApi\n public suspend fun awaitFreeSpace()\n\n /**\n * Closes this channel with an optional exceptional [cause].\n * It flushes all pending write bytes (via [flush]).\n * This is an idempotent operation -- repeated invocations of this function have no effect and return `false`.\n *\n * A channel that was closed without a [cause], is considered to be _closed normally_.\n * A channel that was closed with non-null [cause] is called a _failed channel_. Attempts to read or\n * write on a failed channel throw this cause exception.\n *\n * After invocation of this operation [isClosedForWrite] starts returning `true` and\n * all subsequent write operations throw [ClosedWriteChannelException] or the specified [cause].\n * However, [isClosedForRead][ByteReadChannel.isClosedForRead] on the side of [ByteReadChannel]\n * starts returning `true` only after all written bytes have been read.\n *\n * Please note that if the channel has been closed with cause and it has been provided by [reader] or [writer]\n * coroutine then the corresponding coroutine will be cancelled with [cause]. If no [cause] provided then no\n * cancellation will be propagated.\n */\n public fun close(cause: Throwable?): Boolean\n\n /**\n * Flushes all pending write bytes making them available for read.\n *\n * This function is thread-safe and can be invoked in any thread at any time.\n * It does nothing when invoked on a closed channel.\n */\n public fun flush()\n}\n\npublic suspend fun ByteWriteChannel.writeAvailable(src: ByteArray): Int = writeAvailable(src, 0, src.size)\npublic suspend fun ByteWriteChannel.writeFully(src: ByteArray): Unit = writeFully(src, 0, src.size)\n\npublic suspend fun ByteWriteChannel.writeShort(s: Int) {\n return writeShort((s and 0xffff).toShort())\n}\n\npublic suspend fun ByteWriteChannel.writeShort(s: Int, byteOrder: ByteOrder) {\n return writeShort((s and 0xffff).toShort(), byteOrder)\n}\n\npublic suspend fun ByteWriteChannel.writeByte(b: Int) {\n return writeByte((b and 0xff).toByte())\n}\n\npublic suspend fun ByteWriteChannel.writeInt(i: Long) {\n return writeInt(i.toInt())\n}\n\npublic suspend fun ByteWriteChannel.writeInt(i: Long, byteOrder: ByteOrder) {\n return writeInt(i.toInt(), byteOrder)\n}\n\n/**\n * Closes this channel with no failure (successfully)\n */\npublic fun ByteWriteChannel.close(): Boolean = close(null)\n\npublic suspend fun ByteWriteChannel.writeStringUtf8(s: CharSequence) {\n val packet = buildPacket {\n writeStringUtf8(s)\n }\n\n return writePacket(packet)\n}\n\n/*\nTODO\npublic suspend fun ByteWriteChannel.writeStringUtf8(s: CharBuffer) {\n val packet = buildPacket {\n writeStringUtf8(s)\n }\n\n return writePacket(packet)\n}*/\n\npublic suspend fun ByteWriteChannel.writeStringUtf8(s: String) {\n val packet = buildPacket {\n writeText(s)\n }\n\n return writePacket(packet)\n}\n\npublic suspend fun ByteWriteChannel.writeBoolean(b: Boolean) {\n return writeByte(if (b) 1 else 0)\n}\n\n/**\n * Writes UTF16 character\n */\npublic suspend fun ByteWriteChannel.writeChar(ch: Char) {\n return writeShort(ch.toInt())\n}\n\npublic suspend inline fun ByteWriteChannel.writePacket(headerSizeHint: Int = 0, builder: BytePacketBuilder.() -> Unit) {\n return writePacket(buildPacket(headerSizeHint, builder))\n}\n\npublic suspend fun ByteWriteChannel.writePacketSuspend(builder: suspend BytePacketBuilder.() -> Unit) {\n return writePacket(buildPacket { builder() })\n}\n\n/**\n * Indicates attempt to write on [isClosedForWrite][ByteWriteChannel.isClosedForWrite] channel\n * that was closed without a cause. A _failed_ channel rethrows the original [close][ByteWriteChannel.close] cause\n * exception on send attempts.\n */\npublic class ClosedWriteChannelException(message: String?) : CancellationException(message)\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.*\n\npublic suspend inline fun ByteReadChannel.readShort(byteOrder: ByteOrder): Short {\n return readShort().reverseIfNeeded(byteOrder) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readInt(byteOrder: ByteOrder): Int {\n return readInt().reverseIfNeeded(byteOrder) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readLong(byteOrder: ByteOrder): Long {\n return readLong().reverseIfNeeded(byteOrder) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readFloat(byteOrder: ByteOrder): Float {\n return readFloat().reverseIfNeeded(byteOrder) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readDouble(byteOrder: ByteOrder): Double {\n return readDouble().reverseIfNeeded(byteOrder) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readShortLittleEndian(): Short {\n return toLittleEndian(readShort()) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readIntLittleEndian(): Int {\n return toLittleEndian(readInt()) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readLongLittleEndian(): Long {\n return toLittleEndian(readLong()) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readFloatLittleEndian(): Float {\n return toLittleEndian(readFloat()) { reverseByteOrder() }\n}\n\npublic suspend inline fun ByteReadChannel.readDoubleLittleEndian(): Double {\n return toLittleEndian(readDouble()) { reverseByteOrder() }\n}\n\npublic suspend fun ByteWriteChannel.writeShort(value: Short, byteOrder: ByteOrder) {\n writeShort(value.reverseIfNeeded(byteOrder) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeInt(value: Int, byteOrder: ByteOrder) {\n writeInt(value.reverseIfNeeded(byteOrder) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeLong(value: Long, byteOrder: ByteOrder) {\n writeLong(value.reverseIfNeeded(byteOrder) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeFloat(value: Float, byteOrder: ByteOrder) {\n writeFloat(value.reverseIfNeeded(byteOrder) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeDouble(value: Double, byteOrder: ByteOrder) {\n writeDouble(value.reverseIfNeeded(byteOrder) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeShortLittleEndian(value: Short) {\n writeShort(toLittleEndian(value) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeIntLittleEndian(value: Int) {\n writeInt(toLittleEndian(value) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeLongLittleEndian(value: Long) {\n writeLong(toLittleEndian(value) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeFloatLittleEndian(value: Float) {\n writeFloat(toLittleEndian(value) { reverseByteOrder() })\n}\n\npublic suspend fun ByteWriteChannel.writeDoubleLittleEndian(value: Double) {\n writeDouble(toLittleEndian(value) { reverseByteOrder() })\n}\n\n@PublishedApi\n@Suppress(\"DEPRECATION_ERROR\")\ninternal inline fun <T> ByteReadChannel.toLittleEndian(value: T, reverseBlock: T.() -> T): T {\n return when (readByteOrder) {\n ByteOrder.LITTLE_ENDIAN -> value\n else -> value.reverseBlock()\n }\n}\n\n@Suppress(\"DEPRECATION_ERROR\")\nprivate inline fun <T> ByteWriteChannel.toLittleEndian(value: T, reverseBlock: T.() -> T): T {\n return when (writeByteOrder) {\n ByteOrder.LITTLE_ENDIAN -> value\n else -> value.reverseBlock()\n }\n}\n\n@PublishedApi\ninternal inline fun <T> T.reverseIfNeeded(byteOrder: ByteOrder, reverseBlock: T.() -> T): T {\n return when (byteOrder) {\n ByteOrder.BIG_ENDIAN -> this\n else -> reverseBlock()\n }\n}\n","package io.ktor.utils.io\n\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * A coroutine job that is reading from a byte channel\n */\npublic interface ReaderJob : Job {\n /**\n * A reference to the channel that this coroutine is reading from\n */\n public val channel: ByteWriteChannel\n}\n\n/**\n * A coroutine job that is writing to a byte channel\n */\npublic interface WriterJob : Job {\n /**\n * A reference to the channel that this coroutine is writing to\n */\n public val channel: ByteReadChannel\n}\n\npublic interface ReaderScope : CoroutineScope {\n public val channel: ByteReadChannel\n}\n\npublic interface WriterScope : CoroutineScope {\n public val channel: ByteWriteChannel\n}\n\npublic fun CoroutineScope.reader(\n coroutineContext: CoroutineContext = EmptyCoroutineContext,\n channel: ByteChannel,\n block: suspend ReaderScope.() -> Unit\n): ReaderJob = launchChannel(coroutineContext, channel, attachJob = false, block = block)\n\npublic fun CoroutineScope.reader(\n coroutineContext: CoroutineContext = EmptyCoroutineContext,\n autoFlush: Boolean = false,\n block: suspend ReaderScope.() -> Unit\n): ReaderJob = launchChannel(coroutineContext, ByteChannel(autoFlush), attachJob = true, block = block)\n\n@Deprecated(\"Use scope.reader instead\")\npublic fun reader(\n coroutineContext: CoroutineContext,\n channel: ByteChannel,\n parent: Job? = null,\n block: suspend ReaderScope.() -> Unit\n): ReaderJob {\n val newContext = if (parent != null) GlobalScope.newCoroutineContext(coroutineContext + parent)\n else GlobalScope.newCoroutineContext(coroutineContext)\n\n return CoroutineScope(newContext).reader(EmptyCoroutineContext, channel, block)\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Use scope.reader instead\")\npublic fun reader(\n coroutineContext: CoroutineContext,\n autoFlush: Boolean = false,\n parent: Job? = null,\n block: suspend ReaderScope.() -> Unit\n): ReaderJob {\n val channel = ByteChannel(autoFlush)\n return reader(coroutineContext, channel, parent, block).also {\n channel.attachJob(it)\n }\n}\n\npublic fun CoroutineScope.writer(\n coroutineContext: CoroutineContext = EmptyCoroutineContext,\n channel: ByteChannel,\n block: suspend WriterScope.() -> Unit\n): WriterJob = launchChannel(coroutineContext, channel, attachJob = false, block = block)\n\npublic fun CoroutineScope.writer(\n coroutineContext: CoroutineContext = EmptyCoroutineContext,\n autoFlush: Boolean = false,\n block: suspend WriterScope.() -> Unit\n): WriterJob = launchChannel(coroutineContext, ByteChannel(autoFlush), attachJob = true, block = block)\n\n@Deprecated(\"Use scope.writer instead\")\npublic fun writer(\n coroutineContext: CoroutineContext,\n channel: ByteChannel,\n parent: Job? = null,\n block: suspend WriterScope.() -> Unit\n): WriterJob {\n val newContext = if (parent != null) GlobalScope.newCoroutineContext(coroutineContext + parent)\n else GlobalScope.newCoroutineContext(coroutineContext)\n\n return CoroutineScope(newContext).writer(EmptyCoroutineContext, channel, block)\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Use scope.writer instead\")\npublic fun writer(\n coroutineContext: CoroutineContext,\n autoFlush: Boolean = false,\n parent: Job? = null,\n block: suspend WriterScope.() -> Unit\n): WriterJob {\n val channel = ByteChannel(autoFlush)\n return writer(coroutineContext, channel, parent, block).also {\n channel.attachJob(it)\n }\n}\n\n/**\n * @param S not exactly safe (unchecked cast is used) so should be [ReaderScope] or [WriterScope]\n */\n@OptIn(ExperimentalStdlibApi::class)\nprivate fun <S : CoroutineScope> CoroutineScope.launchChannel(\n context: CoroutineContext,\n channel: ByteChannel,\n attachJob: Boolean,\n block: suspend S.() -> Unit\n): ChannelJob {\n val dispatcher = coroutineContext[CoroutineDispatcher]\n val job = launch(context) {\n if (attachJob) {\n channel.attachJob(coroutineContext[Job]!!)\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n val scope = ChannelScope(this, channel) as S\n\n try {\n block(scope)\n } catch (cause: Throwable) {\n if (dispatcher != Dispatchers.Unconfined && dispatcher != null) {\n throw cause\n }\n\n channel.cancel(cause)\n }\n }\n\n job.invokeOnCompletion { cause ->\n channel.close(cause)\n }\n\n return ChannelJob(job, channel)\n}\n\nprivate class ChannelScope(\n delegate: CoroutineScope,\n override val channel: ByteChannel\n) : ReaderScope, WriterScope, CoroutineScope by delegate\n\nprivate class ChannelJob(\n private val delegate: Job,\n override val channel: ByteChannel\n) : ReaderJob, WriterJob, Job by delegate {\n override fun toString(): String = \"ChannelJob[$delegate]\"\n}\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.Memory\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.*\n\n/**\n * Await until at least [desiredSize] is available for read or EOF and invoke [block] function. The block function\n * should never capture a provided [Memory] instance outside otherwise an undefined behaviour may occur including\n * accidental crash or data corruption. Block function should return number of bytes consumed or 0.\n *\n * Specifying [desiredSize] larger than the channel's capacity leads to block function invocation earlier\n * when the channel is full. So specifying too big [desiredSize] is identical to specifying [desiredSize] equal to\n * the channel's capacity. The other case when a provided memory range could be less than [desiredSize] is that\n * all the requested bytes couldn't be represented as a single memory range due to internal implementation reasons.\n *\n * @return number of bytes consumed, possibly 0\n */\n@ExperimentalIoApi\npublic suspend inline fun ByteReadChannel.read(\n desiredSize: Int = 1,\n block: (source: Memory, start: Long, endExclusive: Long) -> Int\n): Int {\n val buffer = requestBuffer(desiredSize) ?: Buffer.Empty\n\n try {\n val bytesRead = block(buffer.memory, buffer.readPosition.toLong(), buffer.writePosition.toLong())\n completeReadingFromBuffer(buffer, bytesRead)\n return bytesRead\n } catch (cause: Throwable) {\n completeReadingFromBuffer(buffer, 0)\n throw cause\n }\n\n // we don't use finally here because of KT-37279\n}\n\n@Deprecated(\"Use read { } instead.\")\npublic interface ReadSession {\n /**\n * Number of bytes available for read. However it doesn't necessarily means that all available bytes could be\n * requested at once\n */\n public val availableForRead: Int\n\n /**\n * Discard at most [n] available bytes or 0 if no bytes available yet\n * @return number of bytes actually discarded, could be 0\n */\n public fun discard(n: Int): Int\n\n /**\n * Request buffer range [atLeast] bytes length\n *\n * There are the following reasons for this function to return `null`:\n * - not enough bytes available yet (should be at least `atLeast` bytes available)\n * - due to buffer fragmentation it is impossible to represent the requested range as a single buffer range\n * - end of stream encountered and all bytes were consumed\n *\n * @return buffer for the requested range or `null` if it is impossible to provide such a buffer view\n * @throws Throwable if the channel has been closed with an exception or cancelled\n */\n @Suppress(\"DEPRECATION\")\n public fun request(atLeast: Int = 1): IoBuffer?\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Use read { } instead.\")\npublic interface SuspendableReadSession : ReadSession {\n /**\n * Suspend until [atLeast] bytes become available or end of stream encountered (possibly due to exceptional close)\n *\n * @return true if there are [atLeast] bytes available or false if end of stream encountered (there still could be\n * bytes available but less than [atLeast])\n * @throws Throwable if the channel has been closed with an exception or cancelled\n * @throws IllegalArgumentException if [atLeast] is negative to too big (usually bigger that 4088)\n */\n public suspend fun await(atLeast: Int = 1): Boolean\n}\n\n@PublishedApi\ninternal suspend fun ByteReadChannel.requestBuffer(desiredSize: Int): Buffer? {\n @Suppress(\"DEPRECATION\")\n val readSession: SuspendableReadSession? = when {\n this is SuspendableReadSession -> this\n this is HasReadSession -> startReadSession()\n else -> null\n }\n\n if (readSession != null) {\n val buffer = readSession.request(desiredSize.coerceAtMost(Buffer.ReservedSize))\n if (buffer != null) {\n return buffer\n }\n\n return readSession.requestBufferSuspend(desiredSize)\n }\n\n return requestBufferFallback(desiredSize)\n}\n\n@PublishedApi\ninternal suspend fun ByteReadChannel.completeReadingFromBuffer(buffer: Buffer?, bytesRead: Int) {\n check(bytesRead >= 0) { \"bytesRead shouldn't be negative: $bytesRead\" }\n @Suppress(\"DEPRECATION\")\n val readSession: SuspendableReadSession? = readSessionFor()\n\n if (readSession != null) {\n readSession.discard(bytesRead)\n if (this is HasReadSession) {\n endReadSession()\n }\n return\n }\n\n if (buffer is ChunkBuffer && buffer !== ChunkBuffer.Empty) {\n buffer.release(ChunkBuffer.Pool)\n discard(bytesRead.toLong())\n }\n}\n\n@Suppress(\"DEPRECATION\")\nprivate suspend fun SuspendableReadSession.requestBufferSuspend(desiredSize: Int): Buffer? {\n await(desiredSize)\n return request(1)\n}\n\nprivate suspend fun ByteReadChannel.requestBufferFallback(desiredSize: Int): ChunkBuffer {\n val chunk = ChunkBuffer.Pool.borrow()\n val copied =\n peekTo(chunk.memory, chunk.writePosition.toLong(), 0L, desiredSize.toLong(), chunk.writeRemaining.toLong())\n chunk.commitWritten(copied.toInt())\n\n return chunk\n}\n\ninternal interface HasReadSession {\n @Suppress(\"DEPRECATION\")\n public fun startReadSession(): SuspendableReadSession\n\n public fun endReadSession()\n}\n\n@Suppress(\"DEPRECATION\", \"NOTHING_TO_INLINE\")\nprivate inline fun ByteReadChannel.readSessionFor(): SuspendableReadSession? = when {\n this is HasReadSession -> startReadSession()\n else -> null\n}\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.Memory\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.ChunkBuffer\n\n/**\n * Await for [desiredSpace] will be available for write and invoke [block] function providing [Memory] instance and\n * the corresponding range suitable for wiring in the memory. The block function should return number of bytes were\n * written, possibly 0.\n *\n * Similar to [ByteReadChannel.read], this function may invoke block function with lesser memory range when the\n * specified [desiredSpace] is bigger that the buffer's capacity\n * or when it is impossible to represent all [desiredSpace] bytes as a single memory range\n * due to internal implementation reasons.\n */\n@ExperimentalIoApi\npublic suspend inline fun ByteWriteChannel.write(\n desiredSpace: Int = 1,\n block: (freeSpace: Memory, startOffset: Long, endExclusive: Long) -> Int\n): Int {\n val buffer = requestWriteBuffer(desiredSpace) ?: Buffer.Empty\n var bytesWritten = 0\n try {\n bytesWritten = block(buffer.memory, buffer.writePosition.toLong(), buffer.limit.toLong())\n buffer.commitWritten(bytesWritten)\n return bytesWritten\n } finally {\n completeWriting(buffer, bytesWritten)\n }\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Use writeMemory instead.\")\npublic interface WriterSession {\n public fun request(min: Int): IoBuffer?\n public fun written(n: Int)\n public fun flush()\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Use writeMemory instead.\")\npublic interface WriterSuspendSession : WriterSession {\n public suspend fun tryAwait(n: Int)\n}\n\n@Suppress(\"DEPRECATION\")\ninternal interface HasWriteSession {\n public fun beginWriteSession(): WriterSuspendSession?\n public fun endWriteSession(written: Int)\n}\n\n@PublishedApi\ninternal suspend fun ByteWriteChannel.requestWriteBuffer(desiredSpace: Int): Buffer? {\n val session = writeSessionFor()\n if (session != null) {\n val buffer = session.request(desiredSpace)\n if (buffer != null) {\n return buffer\n }\n\n return writeBufferSuspend(session, desiredSpace)\n }\n\n return writeBufferFallback()\n}\n\n@PublishedApi\ninternal suspend fun ByteWriteChannel.completeWriting(buffer: Buffer, written: Int) {\n if (this is HasWriteSession) {\n endWriteSession(written)\n return\n }\n\n return completeWritingFallback(buffer)\n}\n\n@Suppress(\"DEPRECATION\")\nprivate suspend fun ByteWriteChannel.completeWritingFallback(buffer: Buffer) {\n if (buffer is IoBuffer) {\n writeFully(buffer)\n buffer.release(IoBuffer.Pool)\n return\n }\n\n throw UnsupportedOperationException(\"Only IoBuffer instance is supported.\")\n}\n\n@Suppress(\"DEPRECATION\")\nprivate suspend fun writeBufferSuspend(session: WriterSuspendSession, desiredSpace: Int): Buffer? {\n session.tryAwait(desiredSpace)\n return session.request(desiredSpace) ?: session.request(1)\n}\n\nprivate fun writeBufferFallback(): Buffer? {\n return ChunkBuffer.Pool.borrow().also { it.resetForWrite(); it.reserveEndGap(Buffer.ReservedSize) }\n}\n\n@Suppress(\"DEPRECATION\", \"NOTHING_TO_INLINE\")\nprivate inline fun ByteWriteChannel.writeSessionFor(): WriterSuspendSession? = when {\n this is HasWriteSession -> beginWriteSession()\n else -> null\n}\n","package io.ktor.utils.io.core.internal\n\n@PublishedApi\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Long.toIntOrFail(name: String): Int {\n if (this >= Int.MAX_VALUE) failLongToIntConversion(this, name)\n return toInt()\n}\n\n@PublishedApi\ninternal fun failLongToIntConversion(value: Long, name: String): Nothing =\n throw IllegalArgumentException(\"Long value $value of $name doesn't fit into 32-bit integer\")\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\n/**\n * Read short signed 16bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadShortAt(offset: Int): Short\n\n/**\n * Read short signed 16bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadShortAt(offset: Long): Short\n\n/**\n * Write short signed 16bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeShortAt(offset: Int, value: Short)\n\n/**\n * Write short signed 16bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeShortAt(offset: Long, value: Short)\n\n/**\n * Read short unsigned 16bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadUShortAt(offset: Int): UShort = loadShortAt(offset).toUShort()\n\n/**\n * Read short unsigned 16bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadUShortAt(offset: Long): UShort = loadShortAt(offset).toUShort()\n\n/**\n * Write short unsigned 16bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeUShortAt(offset: Int, value: UShort): Unit = storeShortAt(offset, value.toShort())\n\n/**\n * Write short unsigned 16bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeUShortAt(offset: Long, value: UShort): Unit = storeShortAt(offset, value.toShort())\n\n/**\n * Read regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadIntAt(offset: Int): Int\n\n/**\n * Read regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadIntAt(offset: Long): Int\n\n/**\n * Write regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeIntAt(offset: Int, value: Int)\n\n/**\n * Write regular signed 32bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeIntAt(offset: Long, value: Int)\n\n/**\n * Read regular unsigned 32bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadUIntAt(offset: Int): UInt = loadIntAt(offset).toUInt()\n\n/**\n * Read regular unsigned 32bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadUIntAt(offset: Long): UInt = loadIntAt(offset).toUInt()\n\n/**\n * Write regular unsigned 32bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeUIntAt(offset: Int, value: UInt): Unit = storeIntAt(offset, value.toInt())\n\n/**\n * Write regular unsigned 32bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeUIntAt(offset: Long, value: UInt): Unit = storeIntAt(offset, value.toInt())\n\n/**\n * Read short signed 64bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadLongAt(offset: Int): Long\n\n/**\n * Read short signed 64bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadLongAt(offset: Long): Long\n\n/**\n * Write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeLongAt(offset: Int, value: Long)\n\n/**\n * write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeLongAt(offset: Long, value: Long)\n\n/**\n * Read short signed 64bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadULongAt(offset: Int): ULong = loadLongAt(offset).toULong()\n\n/**\n * Read short signed 64bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.loadULongAt(offset: Long): ULong = loadLongAt(offset).toULong()\n\n/**\n * Write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeULongAt(offset: Int, value: ULong): Unit = storeLongAt(offset, value.toLong())\n\n/**\n * Write short signed 64bit integer in the network byte order (Big Endian)\n */\npublic inline fun Memory.storeULongAt(offset: Long, value: ULong): Unit = storeLongAt(offset, value.toLong())\n\n/**\n * Read short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadFloatAt(offset: Int): Float\n\n/**\n * Read short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadFloatAt(offset: Long): Float\n\n/**\n * Write short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeFloatAt(offset: Int, value: Float)\n\n/**\n * Write short signed 32bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeFloatAt(offset: Long, value: Float)\n\n/**\n * Read short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadDoubleAt(offset: Int): Double\n\n/**\n * Read short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.loadDoubleAt(offset: Long): Double\n\n/**\n * Write short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeDoubleAt(offset: Int, value: Double)\n\n/**\n * Write short signed 64bit floating point number in the network byte order (Big Endian)\n */\npublic expect inline fun Memory.storeDoubleAt(offset: Long, value: Double)\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset].\n */\npublic inline fun Memory.loadByteArray(\n offset: Int,\n destination: ByteArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n copyTo(destination, offset, count, destinationOffset)\n}\n\n/**\n * Copies unsigned shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadByteArray(\n offset: Long,\n destination: ByteArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n copyTo(destination, offset, count, destinationOffset)\n}\n\n/**\n * Copies unsigned shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUByteArray(\n offset: Int,\n destination: UByteArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n copyTo(destination.asByteArray(), offset, count, destinationOffset)\n}\n\n/**\n * Copies unsigned shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUByteArray(\n offset: Long,\n destination: UByteArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n copyTo(destination.asByteArray(), offset, count, destinationOffset)\n}\n\n/**\n * Copies shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadShortArray(\n offset: Int,\n destination: ShortArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadShortArray(\n offset: Long,\n destination: ShortArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies unsigned shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUShortArray(\n offset: Int,\n destination: UShortArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadShortArray(offset, destination.asShortArray(), destinationOffset, count)\n}\n\n/**\n * Copies unsigned shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUShortArray(\n offset: Long,\n destination: UShortArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadShortArray(offset, destination.asShortArray(), destinationOffset, count)\n}\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadIntArray(\n offset: Int,\n destination: IntArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadIntArray(\n offset: Long,\n destination: IntArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies unsigned integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUIntArray(\n offset: Int,\n destination: UIntArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadIntArray(offset, destination.asIntArray(), destinationOffset, count)\n}\n\n/**\n * Copies unsigned integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadUIntArray(\n offset: Long,\n destination: UIntArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadIntArray(offset, destination.asIntArray(), destinationOffset, count)\n}\n\n/**\n * Copies long integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadLongArray(\n offset: Int,\n destination: LongArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies long integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadLongArray(\n offset: Long,\n destination: LongArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies unsigned long integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadULongArray(\n offset: Int,\n destination: ULongArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadLongArray(offset, destination.asLongArray(), destinationOffset, count)\n}\n\n/**\n * Copies unsigned long integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic inline fun Memory.loadULongArray(\n offset: Long,\n destination: ULongArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n) {\n loadLongArray(offset, destination.asLongArray(), destinationOffset, count)\n}\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadFloatArray(\n offset: Int,\n destination: FloatArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadFloatArray(\n offset: Long,\n destination: FloatArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadDoubleArray(\n offset: Int,\n destination: DoubleArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic expect fun Memory.loadDoubleArray(\n offset: Long,\n destination: DoubleArray,\n destinationOffset: Int = 0,\n count: Int = destination.size - destinationOffset\n)\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset].\n * @param sourceOffset items\n */\npublic inline fun Memory.storeByteArray(\n offset: Int,\n source: ByteArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n source.useMemory(sourceOffset, count) { sourceMemory ->\n sourceMemory.copyTo(this, 0, count, offset)\n }\n}\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset].\n * @param sourceOffset items\n */\npublic inline fun Memory.storeByteArray(\n offset: Long,\n source: ByteArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n source.useMemory(sourceOffset, count) { sourceMemory ->\n sourceMemory.copyTo(this, 0L, count.toLong(), offset)\n }\n}\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset].\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUByteArray(\n offset: Int,\n source: UByteArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeByteArray(offset, source.asByteArray(), sourceOffset, count)\n}\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset].\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUByteArray(\n offset: Long,\n source: UByteArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeByteArray(offset, source.asByteArray(), sourceOffset, count)\n}\n\n/**\n * Copies shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeShortArray(\n offset: Int,\n source: ShortArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeShortArray(\n offset: Long,\n source: ShortArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUShortArray(\n offset: Int,\n source: UShortArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeShortArray(offset, source.asShortArray(), sourceOffset, count)\n}\n\n/**\n * Copies unsigned shorts integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUShortArray(\n offset: Long,\n source: UShortArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeShortArray(offset, source.asShortArray(), sourceOffset, count)\n}\n\n/**\n * Copies regular integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeIntArray(\n offset: Int,\n source: IntArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies regular integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeIntArray(\n offset: Long,\n source: IntArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies unsigned integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUIntArray(\n offset: Int,\n source: UIntArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeIntArray(offset, source.asIntArray(), sourceOffset, count)\n}\n\n/**\n * Copies unsigned integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeUIntArray(\n offset: Long,\n source: UIntArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeIntArray(offset, source.asIntArray(), sourceOffset, count)\n}\n\n/**\n * Copies long integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeLongArray(\n offset: Int,\n source: LongArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies long integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeLongArray(\n offset: Long,\n source: LongArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies unsigned long integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeULongArray(\n offset: Int,\n source: ULongArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeLongArray(offset, source.asLongArray(), sourceOffset, count)\n}\n\n/**\n * Copies unsigned long integers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic inline fun Memory.storeULongArray(\n offset: Long,\n source: ULongArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n) {\n storeLongArray(offset, source.asLongArray(), sourceOffset, count)\n}\n\n/**\n * Copies floating point numbers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeFloatArray(\n offset: Int,\n source: FloatArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies floating point numbers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeFloatArray(\n offset: Long,\n source: FloatArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies floating point numbers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeDoubleArray(\n offset: Int,\n source: DoubleArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n\n/**\n * Copies floating point numbers from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic expect fun Memory.storeDoubleArray(\n offset: Long,\n source: DoubleArray,\n sourceOffset: Int = 0,\n count: Int = source.size - sourceOffset\n)\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"UArraysKt\")\n@file:kotlin.jvm.JvmPackageName(\"kotlin.collections.unsigned\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.component1(): UInt {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.component1(): ULong {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.component1(): UByte {\n return get(0)\n}\n\n/**\n * Returns 1st *element* from the array.\n * \n * If the size of this array is less than 1, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.component1(): UShort {\n return get(0)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.component2(): UInt {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.component2(): ULong {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.component2(): UByte {\n return get(1)\n}\n\n/**\n * Returns 2nd *element* from the array.\n * \n * If the size of this array is less than 2, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.component2(): UShort {\n return get(1)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.component3(): UInt {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.component3(): ULong {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.component3(): UByte {\n return get(2)\n}\n\n/**\n * Returns 3rd *element* from the array.\n * \n * If the size of this array is less than 3, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.component3(): UShort {\n return get(2)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.component4(): UInt {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.component4(): ULong {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.component4(): UByte {\n return get(3)\n}\n\n/**\n * Returns 4th *element* from the array.\n * \n * If the size of this array is less than 4, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.component4(): UShort {\n return get(3)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.component5(): UInt {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.component5(): ULong {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.component5(): UByte {\n return get(4)\n}\n\n/**\n * Returns 5th *element* from the array.\n * \n * If the size of this array is less than 5, throws an [IndexOutOfBoundsException] except in Kotlin/JS\n * where the behavior is unspecified.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.component5(): UShort {\n return get(4)\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UIntArray.elementAt(index: Int): UInt\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun ULongArray.elementAt(index: Int): ULong\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UByteArray.elementAt(index: Int): UByte\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UShortArray.elementAt(index: Int): UShort\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.elementAtOrElse(index: Int, defaultValue: (Int) -> UInt): UInt {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.elementAtOrElse(index: Int, defaultValue: (Int) -> ULong): ULong {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.elementAtOrElse(index: Int, defaultValue: (Int) -> UByte): UByte {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.elementAtOrElse(index: Int, defaultValue: (Int) -> UShort): UShort {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.elementAtOrNull(index: Int): UInt? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.elementAtOrNull(index: Int): ULong? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.elementAtOrNull(index: Int): UByte? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.elementAtOrNull(index: Int): UShort? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.find(predicate: (UInt) -> Boolean): UInt? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.find(predicate: (ULong) -> Boolean): ULong? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.find(predicate: (UByte) -> Boolean): UByte? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.find(predicate: (UShort) -> Boolean): UShort? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.findLast(predicate: (UInt) -> Boolean): UInt? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.findLast(predicate: (ULong) -> Boolean): ULong? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.findLast(predicate: (UByte) -> Boolean): UByte? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.findLast(predicate: (UShort) -> Boolean): UShort? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.first(): UInt {\n return storage.first().toUInt()\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.first(): ULong {\n return storage.first().toULong()\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.first(): UByte {\n return storage.first().toUByte()\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.first(): UShort {\n return storage.first().toUShort()\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.first(predicate: (UInt) -> Boolean): UInt {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.first(predicate: (ULong) -> Boolean): ULong {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.first(predicate: (UByte) -> Boolean): UByte {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.first(predicate: (UShort) -> Boolean): UShort {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.firstOrNull(): UInt? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.firstOrNull(): ULong? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.firstOrNull(): UByte? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element, or `null` if the array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.firstOrNull(): UShort? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.firstOrNull(predicate: (UInt) -> Boolean): UInt? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.firstOrNull(predicate: (ULong) -> Boolean): ULong? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.firstOrNull(predicate: (UByte) -> Boolean): UByte? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.firstOrNull(predicate: (UShort) -> Boolean): UShort? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.getOrElse(index: Int, defaultValue: (Int) -> UInt): UInt {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.getOrElse(index: Int, defaultValue: (Int) -> ULong): ULong {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.getOrElse(index: Int, defaultValue: (Int) -> UByte): UByte {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.getOrElse(index: Int, defaultValue: (Int) -> UShort): UShort {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.getOrNull(index: Int): UInt? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.getOrNull(index: Int): ULong? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.getOrNull(index: Int): UByte? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this array.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.getOrNull(index: Int): UShort? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.indexOf(element: UInt): Int {\n return storage.indexOf(element.toInt())\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.indexOf(element: ULong): Int {\n return storage.indexOf(element.toLong())\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.indexOf(element: UByte): Int {\n return storage.indexOf(element.toByte())\n}\n\n/**\n * Returns first index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.indexOf(element: UShort): Int {\n return storage.indexOf(element.toShort())\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.indexOfFirst(predicate: (UInt) -> Boolean): Int {\n return storage.indexOfFirst { predicate(it.toUInt()) }\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.indexOfFirst(predicate: (ULong) -> Boolean): Int {\n return storage.indexOfFirst { predicate(it.toULong()) }\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.indexOfFirst(predicate: (UByte) -> Boolean): Int {\n return storage.indexOfFirst { predicate(it.toUByte()) }\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.indexOfFirst(predicate: (UShort) -> Boolean): Int {\n return storage.indexOfFirst { predicate(it.toUShort()) }\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.indexOfLast(predicate: (UInt) -> Boolean): Int {\n return storage.indexOfLast { predicate(it.toUInt()) }\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.indexOfLast(predicate: (ULong) -> Boolean): Int {\n return storage.indexOfLast { predicate(it.toULong()) }\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.indexOfLast(predicate: (UByte) -> Boolean): Int {\n return storage.indexOfLast { predicate(it.toUByte()) }\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the array does not contain such element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.indexOfLast(predicate: (UShort) -> Boolean): Int {\n return storage.indexOfLast { predicate(it.toUShort()) }\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.last(): UInt {\n return storage.last().toUInt()\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.last(): ULong {\n return storage.last().toULong()\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.last(): UByte {\n return storage.last().toUByte()\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.last(): UShort {\n return storage.last().toUShort()\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.last(predicate: (UInt) -> Boolean): UInt {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.last(predicate: (ULong) -> Boolean): ULong {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.last(predicate: (UByte) -> Boolean): UByte {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.last(predicate: (UShort) -> Boolean): UShort {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.lastIndexOf(element: UInt): Int {\n return storage.lastIndexOf(element.toInt())\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.lastIndexOf(element: ULong): Int {\n return storage.lastIndexOf(element.toLong())\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.lastIndexOf(element: UByte): Int {\n return storage.lastIndexOf(element.toByte())\n}\n\n/**\n * Returns last index of [element], or -1 if the array does not contain element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.lastIndexOf(element: UShort): Int {\n return storage.lastIndexOf(element.toShort())\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.lastOrNull(): UInt? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.lastOrNull(): ULong? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.lastOrNull(): UByte? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element, or `null` if the array is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.lastOrNull(): UShort? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.lastOrNull(predicate: (UInt) -> Boolean): UInt? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.lastOrNull(predicate: (ULong) -> Boolean): ULong? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.lastOrNull(predicate: (UByte) -> Boolean): UByte? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.lastOrNull(predicate: (UShort) -> Boolean): UShort? {\n for (index in this.indices.reversed()) {\n val element = this[index]\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.random(): UInt {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.random(): ULong {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.random(): UByte {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.random(): UShort {\n return random(Random)\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.random(random: Random): UInt {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.random(random: Random): ULong {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.random(random: Random): UByte {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness.\n * \n * @throws NoSuchElementException if this array is empty.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.random(random: Random): UShort {\n if (isEmpty())\n throw NoSuchElementException(\"Array is empty.\")\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.randomOrNull(): UInt? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.randomOrNull(): ULong? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.randomOrNull(): UByte? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.randomOrNull(): UShort? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\npublic fun UIntArray.randomOrNull(random: Random): UInt? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\npublic fun ULongArray.randomOrNull(random: Random): ULong? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\npublic fun UByteArray.randomOrNull(random: Random): UByte? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this array using the specified source of randomness, or `null` if this array is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\npublic fun UShortArray.randomOrNull(random: Random): UShort? {\n if (isEmpty())\n return null\n return get(random.nextInt(size))\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.single(): UInt {\n return storage.single().toUInt()\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.single(): ULong {\n return storage.single().toULong()\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.single(): UByte {\n return storage.single().toUByte()\n}\n\n/**\n * Returns the single element, or throws an exception if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.single(): UShort {\n return storage.single().toUShort()\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.single(predicate: (UInt) -> Boolean): UInt {\n var single: UInt? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as UInt\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.single(predicate: (ULong) -> Boolean): ULong {\n var single: ULong? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as ULong\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.single(predicate: (UByte) -> Boolean): UByte {\n var single: UByte? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as UByte\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.single(predicate: (UShort) -> Boolean): UShort {\n var single: UShort? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Array contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Array contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as UShort\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.singleOrNull(): UInt? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.singleOrNull(): ULong? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.singleOrNull(): UByte? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns single element, or `null` if the array is empty or has more than one element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.singleOrNull(): UShort? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.singleOrNull(predicate: (UInt) -> Boolean): UInt? {\n var single: UInt? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.singleOrNull(predicate: (ULong) -> Boolean): ULong? {\n var single: ULong? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.singleOrNull(predicate: (UByte) -> Boolean): UByte? {\n var single: UByte? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.singleOrNull(predicate: (UShort) -> Boolean): UShort? {\n var single: UShort? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.drop(n: Int): List<UInt> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.drop(n: Int): List<ULong> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.drop(n: Int): List<UByte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.drop(n: Int): List<UShort> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return takeLast((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.dropLast(n: Int): List<UInt> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.dropLast(n: Int): List<ULong> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.dropLast(n: Int): List<UByte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.dropLast(n: Int): List<UShort> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.dropLastWhile(predicate: (UInt) -> Boolean): List<UInt> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.dropLastWhile(predicate: (ULong) -> Boolean): List<ULong> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.dropLastWhile(predicate: (UByte) -> Boolean): List<UByte> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.dropLastWhile(predicate: (UShort) -> Boolean): List<UShort> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return take(index + 1)\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.dropWhile(predicate: (UInt) -> Boolean): List<UInt> {\n var yielding = false\n val list = ArrayList<UInt>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.dropWhile(predicate: (ULong) -> Boolean): List<ULong> {\n var yielding = false\n val list = ArrayList<ULong>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.dropWhile(predicate: (UByte) -> Boolean): List<UByte> {\n var yielding = false\n val list = ArrayList<UByte>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.dropWhile(predicate: (UShort) -> Boolean): List<UShort> {\n var yielding = false\n val list = ArrayList<UShort>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.filter(predicate: (UInt) -> Boolean): List<UInt> {\n return filterTo(ArrayList<UInt>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.filter(predicate: (ULong) -> Boolean): List<ULong> {\n return filterTo(ArrayList<ULong>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.filter(predicate: (UByte) -> Boolean): List<UByte> {\n return filterTo(ArrayList<UByte>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.filter(predicate: (UShort) -> Boolean): List<UShort> {\n return filterTo(ArrayList<UShort>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.filterIndexed(predicate: (index: Int, UInt) -> Boolean): List<UInt> {\n return filterIndexedTo(ArrayList<UInt>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.filterIndexed(predicate: (index: Int, ULong) -> Boolean): List<ULong> {\n return filterIndexedTo(ArrayList<ULong>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.filterIndexed(predicate: (index: Int, UByte) -> Boolean): List<UByte> {\n return filterIndexedTo(ArrayList<UByte>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.filterIndexed(predicate: (index: Int, UShort) -> Boolean): List<UShort> {\n return filterIndexedTo(ArrayList<UShort>(), predicate)\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UInt>> UIntArray.filterIndexedTo(destination: C, predicate: (index: Int, UInt) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in ULong>> ULongArray.filterIndexedTo(destination: C, predicate: (index: Int, ULong) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UByte>> UByteArray.filterIndexedTo(destination: C, predicate: (index: Int, UByte) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UShort>> UShortArray.filterIndexedTo(destination: C, predicate: (index: Int, UShort) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.filterNot(predicate: (UInt) -> Boolean): List<UInt> {\n return filterNotTo(ArrayList<UInt>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.filterNot(predicate: (ULong) -> Boolean): List<ULong> {\n return filterNotTo(ArrayList<ULong>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.filterNot(predicate: (UByte) -> Boolean): List<UByte> {\n return filterNotTo(ArrayList<UByte>(), predicate)\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.filterNot(predicate: (UShort) -> Boolean): List<UShort> {\n return filterNotTo(ArrayList<UShort>(), predicate)\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UInt>> UIntArray.filterNotTo(destination: C, predicate: (UInt) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in ULong>> ULongArray.filterNotTo(destination: C, predicate: (ULong) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UByte>> UByteArray.filterNotTo(destination: C, predicate: (UByte) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UShort>> UShortArray.filterNotTo(destination: C, predicate: (UShort) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UInt>> UIntArray.filterTo(destination: C, predicate: (UInt) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in ULong>> ULongArray.filterTo(destination: C, predicate: (ULong) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UByte>> UByteArray.filterTo(destination: C, predicate: (UByte) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <C : MutableCollection<in UShort>> UShortArray.filterTo(destination: C, predicate: (UShort) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.slice(indices: IntRange): List<UInt> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.slice(indices: IntRange): List<ULong> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.slice(indices: IntRange): List<UByte> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.slice(indices: IntRange): List<UShort> {\n if (indices.isEmpty()) return listOf()\n return copyOfRange(indices.start, indices.endInclusive + 1).asList()\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.slice(indices: Iterable<Int>): List<UInt> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<UInt>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.slice(indices: Iterable<Int>): List<ULong> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<ULong>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.slice(indices: Iterable<Int>): List<UByte> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<UByte>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.slice(indices: Iterable<Int>): List<UShort> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<UShort>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sliceArray(indices: Collection<Int>): UIntArray {\n return UIntArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sliceArray(indices: Collection<Int>): ULongArray {\n return ULongArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sliceArray(indices: Collection<Int>): UByteArray {\n return UByteArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements of this array at specified [indices].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sliceArray(indices: Collection<Int>): UShortArray {\n return UShortArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sliceArray(indices: IntRange): UIntArray {\n return UIntArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sliceArray(indices: IntRange): ULongArray {\n return ULongArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sliceArray(indices: IntRange): UByteArray {\n return UByteArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns an array containing elements at indices in the specified [indices] range.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sliceArray(indices: IntRange): UShortArray {\n return UShortArray(storage.sliceArray(indices))\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.take(n: Int): List<UInt> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<UInt>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.take(n: Int): List<ULong> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<ULong>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.take(n: Int): List<UByte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<UByte>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.take(n: Int): List<UShort> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (n >= size) return toList()\n if (n == 1) return listOf(this[0])\n var count = 0\n val list = ArrayList<UShort>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.takeLast(n: Int): List<UInt> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<UInt>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.takeLast(n: Int): List<ULong> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<ULong>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.takeLast(n: Int): List<UByte> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<UByte>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.takeLast(n: Int): List<UShort> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(this[size - 1])\n val list = ArrayList<UShort>(n)\n for (index in size - n until size)\n list.add(this[index])\n return list\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.takeLastWhile(predicate: (UInt) -> Boolean): List<UInt> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.takeLastWhile(predicate: (ULong) -> Boolean): List<ULong> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.takeLastWhile(predicate: (UByte) -> Boolean): List<UByte> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.takeLastWhile(predicate: (UShort) -> Boolean): List<UShort> {\n for (index in lastIndex downTo 0) {\n if (!predicate(this[index])) {\n return drop(index + 1)\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.takeWhile(predicate: (UInt) -> Boolean): List<UInt> {\n val list = ArrayList<UInt>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.takeWhile(predicate: (ULong) -> Boolean): List<ULong> {\n val list = ArrayList<ULong>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.takeWhile(predicate: (UByte) -> Boolean): List<UByte> {\n val list = ArrayList<UByte>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.takeWhile(predicate: (UShort) -> Boolean): List<UShort> {\n val list = ArrayList<UShort>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Reverses elements in the array in-place.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reverse(): Unit {\n storage.reverse()\n}\n\n/**\n * Reverses elements in the array in-place.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reverse(): Unit {\n storage.reverse()\n}\n\n/**\n * Reverses elements in the array in-place.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reverse(): Unit {\n storage.reverse()\n}\n\n/**\n * Reverses elements in the array in-place.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reverse(): Unit {\n storage.reverse()\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n storage.reverse(fromIndex, toIndex)\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n storage.reverse(fromIndex, toIndex)\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n storage.reverse(fromIndex, toIndex)\n}\n\n/**\n * Reverses elements of the array in the specified range in-place.\n * \n * @param fromIndex the start of the range (inclusive) to reverse.\n * @param toIndex the end of the range (exclusive) to reverse.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reverse(fromIndex: Int, toIndex: Int): Unit {\n storage.reverse(fromIndex, toIndex)\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.reversed(): List<UInt> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.reversed(): List<ULong> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.reversed(): List<UByte> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns a list with elements in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.reversed(): List<UShort> {\n if (isEmpty()) return emptyList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reversedArray(): UIntArray {\n return UIntArray(storage.reversedArray())\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reversedArray(): ULongArray {\n return ULongArray(storage.reversedArray())\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reversedArray(): UByteArray {\n return UByteArray(storage.reversedArray())\n}\n\n/**\n * Returns an array with elements of this array in reversed order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reversedArray(): UShortArray {\n return UShortArray(storage.reversedArray())\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.shuffle(): Unit {\n shuffle(Random)\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Randomly shuffles elements in this array in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n val copy = this[i]\n this[i] = this[j]\n this[j] = copy\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Sorts elements in the array in-place descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sortDescending(): Unit {\n if (size > 1) {\n sort()\n reverse()\n }\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sorted(): List<UInt> {\n return copyOf().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sorted(): List<ULong> {\n return copyOf().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sorted(): List<UByte> {\n return copyOf().apply { sort() }.asList()\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sorted(): List<UShort> {\n return copyOf().apply { sort() }.asList()\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sortedArray(): UIntArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sortedArray(): ULongArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sortedArray(): UByteArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sortedArray(): UShortArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sort() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sortedArrayDescending(): UIntArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sortedArrayDescending(): ULongArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sortedArrayDescending(): UByteArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns an array with all elements of this array sorted descending according to their natural sort order.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sortedArrayDescending(): UShortArray {\n if (isEmpty()) return this\n return this.copyOf().apply { sortDescending() }\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sortedDescending(): List<UInt> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sortedDescending(): List<ULong> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sortedDescending(): List<UByte> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sortedDescending(): List<UShort> {\n return copyOf().apply { sort() }.reversed()\n}\n\n/**\n * Returns an array of type [ByteArray], which is a view of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.asByteArray(): ByteArray {\n return storage\n}\n\n/**\n * Returns an array of type [IntArray], which is a view of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.asIntArray(): IntArray {\n return storage\n}\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UIntArray.asList(): List<UInt>\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun ULongArray.asList(): List<ULong>\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UByteArray.asList(): List<UByte>\n\n/**\n * Returns a [List] that wraps the original array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic expect fun UShortArray.asList(): List<UShort>\n\n/**\n * Returns an array of type [LongArray], which is a view of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.asLongArray(): LongArray {\n return storage\n}\n\n/**\n * Returns an array of type [ShortArray], which is a view of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.asShortArray(): ShortArray {\n return storage\n}\n\n/**\n * Returns an array of type [UByteArray], which is a view of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.asUByteArray(): UByteArray {\n return UByteArray(this)\n}\n\n/**\n * Returns an array of type [UIntArray], which is a view of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.asUIntArray(): UIntArray {\n return UIntArray(this)\n}\n\n/**\n * Returns an array of type [ULongArray], which is a view of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.asULongArray(): ULongArray {\n return ULongArray(this)\n}\n\n/**\n * Returns an array of type [UShortArray], which is a view of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.asUShortArray(): UShortArray {\n return UShortArray(this)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UIntArray.contentEquals(other: UIntArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun ULongArray.contentEquals(other: ULongArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UByteArray.contentEquals(other: UByteArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UShortArray.contentEquals(other: UShortArray): Boolean {\n return this.contentEquals(other)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UIntArray?.contentEquals(other: UIntArray?): Boolean {\n return this?.storage.contentEquals(other?.storage)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun ULongArray?.contentEquals(other: ULongArray?): Boolean {\n return this?.storage.contentEquals(other?.storage)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UByteArray?.contentEquals(other: UByteArray?): Boolean {\n return this?.storage.contentEquals(other?.storage)\n}\n\n/**\n * Returns `true` if the two specified arrays are *structurally* equal to one another,\n * i.e. contain the same number of the same elements in the same order.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic infix fun UShortArray?.contentEquals(other: UShortArray?): Boolean {\n return this?.storage.contentEquals(other?.storage)\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.contentHashCode(): Int {\n return this.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray?.contentHashCode(): Int {\n return this?.storage.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray?.contentHashCode(): Int {\n return this?.storage.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray?.contentHashCode(): Int {\n return this?.storage.contentHashCode()\n}\n\n/**\n * Returns a hash code based on the contents of this array as if it is [List].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray?.contentHashCode(): Int {\n return this?.storage.contentHashCode()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@Deprecated(\"Use Kotlin compiler 1.4 to avoid deprecation warning.\")\n@SinceKotlin(\"1.3\")\n@DeprecatedSinceKotlin(hiddenSince = \"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.contentToString(): String {\n return this.contentToString()\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray?.contentToString(): String {\n return this?.joinToString(\", \", \"[\", \"]\") ?: \"null\"\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray?.contentToString(): String {\n return this?.joinToString(\", \", \"[\", \"]\") ?: \"null\"\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray?.contentToString(): String {\n return this?.joinToString(\", \", \"[\", \"]\") ?: \"null\"\n}\n\n/**\n * Returns a string representation of the contents of the specified array as if it is [List].\n * \n * @sample samples.collections.Arrays.ContentOperations.contentToString\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray?.contentToString(): String {\n return this?.joinToString(\", \", \"[\", \"]\") ?: \"null\"\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.copyInto(destination: UIntArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): UIntArray {\n storage.copyInto(destination.storage, destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.copyInto(destination: ULongArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): ULongArray {\n storage.copyInto(destination.storage, destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.copyInto(destination: UByteArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): UByteArray {\n storage.copyInto(destination.storage, destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Copies this array or its subrange into the [destination] array and returns that array.\n * \n * It's allowed to pass the same array in the [destination] and even specify the subrange so that it overlaps with the destination range.\n * \n * @param destination the array to copy to.\n * @param destinationOffset the position in the [destination] array to copy to, 0 by default.\n * @param startIndex the beginning (inclusive) of the subrange to copy, 0 by default.\n * @param endIndex the end (exclusive) of the subrange to copy, size of this array by default.\n * \n * @throws IndexOutOfBoundsException or [IllegalArgumentException] when [startIndex] or [endIndex] is out of range of this array indices or when `startIndex > endIndex`.\n * @throws IndexOutOfBoundsException when the subrange doesn't fit into the [destination] array starting at the specified [destinationOffset],\n * or when that index is out of the [destination] array indices range.\n * \n * @return the [destination] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.copyInto(destination: UShortArray, destinationOffset: Int = 0, startIndex: Int = 0, endIndex: Int = size): UShortArray {\n storage.copyInto(destination.storage, destinationOffset, startIndex, endIndex)\n return destination\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.copyOf(): UIntArray {\n return UIntArray(storage.copyOf())\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.copyOf(): ULongArray {\n return ULongArray(storage.copyOf())\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.copyOf(): UByteArray {\n return UByteArray(storage.copyOf())\n}\n\n/**\n * Returns new array which is a copy of the original array.\n * \n * @sample samples.collections.Arrays.CopyOfOperations.copyOf\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.copyOf(): UShortArray {\n return UShortArray(storage.copyOf())\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.copyOf(newSize: Int): UIntArray {\n return UIntArray(storage.copyOf(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.copyOf(newSize: Int): ULongArray {\n return ULongArray(storage.copyOf(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.copyOf(newSize: Int): UByteArray {\n return UByteArray(storage.copyOf(newSize))\n}\n\n/**\n * Returns new array which is a copy of the original array, resized to the given [newSize].\n * The copy is either truncated or padded at the end with zero values if necessary.\n * \n * - If [newSize] is less than the size of the original array, the copy array is truncated to the [newSize].\n * - If [newSize] is greater than the size of the original array, the extra elements in the copy array are filled with zero values.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.copyOf(newSize: Int): UShortArray {\n return UShortArray(storage.copyOf(newSize))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.copyOfRange(fromIndex: Int, toIndex: Int): UIntArray {\n return UIntArray(storage.copyOfRange(fromIndex, toIndex))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.copyOfRange(fromIndex: Int, toIndex: Int): ULongArray {\n return ULongArray(storage.copyOfRange(fromIndex, toIndex))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.copyOfRange(fromIndex: Int, toIndex: Int): UByteArray {\n return UByteArray(storage.copyOfRange(fromIndex, toIndex))\n}\n\n/**\n * Returns a new array which is a copy of the specified range of the original array.\n * \n * @param fromIndex the start of the range (inclusive) to copy.\n * @param toIndex the end of the range (exclusive) to copy.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.copyOfRange(fromIndex: Int, toIndex: Int): UShortArray {\n return UShortArray(storage.copyOfRange(fromIndex, toIndex))\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.fill(element: UInt, fromIndex: Int = 0, toIndex: Int = size): Unit {\n storage.fill(element.toInt(), fromIndex, toIndex)\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.fill(element: ULong, fromIndex: Int = 0, toIndex: Int = size): Unit {\n storage.fill(element.toLong(), fromIndex, toIndex)\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.fill(element: UByte, fromIndex: Int = 0, toIndex: Int = size): Unit {\n storage.fill(element.toByte(), fromIndex, toIndex)\n}\n\n/**\n * Fills this array or its subrange with the specified [element] value.\n * \n * @param fromIndex the start of the range (inclusive) to fill, 0 by default.\n * @param toIndex the end of the range (exclusive) to fill, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.fill(element: UShort, fromIndex: Int = 0, toIndex: Int = size): Unit {\n storage.fill(element.toShort(), fromIndex, toIndex)\n}\n\n/**\n * Returns the range of valid indices for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UIntArray.indices: IntRange\n get() = storage.indices\n\n/**\n * Returns the range of valid indices for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val ULongArray.indices: IntRange\n get() = storage.indices\n\n/**\n * Returns the range of valid indices for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UByteArray.indices: IntRange\n get() = storage.indices\n\n/**\n * Returns the range of valid indices for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UShortArray.indices: IntRange\n get() = storage.indices\n\n/**\n * Returns the last valid index for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UIntArray.lastIndex: Int\n get() = storage.lastIndex\n\n/**\n * Returns the last valid index for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val ULongArray.lastIndex: Int\n get() = storage.lastIndex\n\n/**\n * Returns the last valid index for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UByteArray.lastIndex: Int\n get() = storage.lastIndex\n\n/**\n * Returns the last valid index for the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline val UShortArray.lastIndex: Int\n get() = storage.lastIndex\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.plus(element: UInt): UIntArray {\n return UIntArray(storage + element.toInt())\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.plus(element: ULong): ULongArray {\n return ULongArray(storage + element.toLong())\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.plus(element: UByte): UByteArray {\n return UByteArray(storage + element.toByte())\n}\n\n/**\n * Returns an array containing all elements of the original array and then the given [element].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.plus(element: UShort): UShortArray {\n return UShortArray(storage + element.toShort())\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic operator fun UIntArray.plus(elements: Collection<UInt>): UIntArray {\n var index = size\n val result = storage.copyOf(size + elements.size)\n for (element in elements) result[index++] = element.toInt()\n return UIntArray(result)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic operator fun ULongArray.plus(elements: Collection<ULong>): ULongArray {\n var index = size\n val result = storage.copyOf(size + elements.size)\n for (element in elements) result[index++] = element.toLong()\n return ULongArray(result)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic operator fun UByteArray.plus(elements: Collection<UByte>): UByteArray {\n var index = size\n val result = storage.copyOf(size + elements.size)\n for (element in elements) result[index++] = element.toByte()\n return UByteArray(result)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] collection.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic operator fun UShortArray.plus(elements: Collection<UShort>): UShortArray {\n var index = size\n val result = storage.copyOf(size + elements.size)\n for (element in elements) result[index++] = element.toShort()\n return UShortArray(result)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UIntArray.plus(elements: UIntArray): UIntArray {\n return UIntArray(storage + elements.storage)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun ULongArray.plus(elements: ULongArray): ULongArray {\n return ULongArray(storage + elements.storage)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UByteArray.plus(elements: UByteArray): UByteArray {\n return UByteArray(storage + elements.storage)\n}\n\n/**\n * Returns an array containing all elements of the original array and then all elements of the given [elements] array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline operator fun UShortArray.plus(elements: UShortArray): UShortArray {\n return UShortArray(storage + elements.storage)\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sort(): Unit {\n if (size > 1) sortArray(this, 0, size)\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sort(): Unit {\n if (size > 1) sortArray(this, 0, size)\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sort(): Unit {\n if (size > 1) sortArray(this, 0, size)\n}\n\n/**\n * Sorts the array in-place.\n * \n * @sample samples.collections.Arrays.Sorting.sortArray\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sort(): Unit {\n if (size > 1) sortArray(this, 0, size)\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArray(this, fromIndex, toIndex)\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArray(this, fromIndex, toIndex)\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArray(this, fromIndex, toIndex)\n}\n\n/**\n * Sorts a range in the array in-place.\n * \n * @param fromIndex the start of the range (inclusive) to sort, 0 by default.\n * @param toIndex the end of the range (exclusive) to sort, size of this array by default.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n * \n * @sample samples.collections.Arrays.Sorting.sortRangeOfArray\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sort(fromIndex: Int = 0, toIndex: Int = size): Unit {\n AbstractList.checkRangeIndexes(fromIndex, toIndex, size)\n sortArray(this, fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Sorts elements of the array in the specified range in-place.\n * The elements are sorted descending according to their natural sort order.\n * \n * @param fromIndex the start of the range (inclusive) to sort.\n * @param toIndex the end of the range (exclusive) to sort.\n * \n * @throws IndexOutOfBoundsException if [fromIndex] is less than zero or [toIndex] is greater than the size of this array.\n * @throws IllegalArgumentException if [fromIndex] is greater than [toIndex].\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.sortDescending(fromIndex: Int, toIndex: Int): Unit {\n sort(fromIndex, toIndex)\n reverse(fromIndex, toIndex)\n}\n\n/**\n * Returns an array of type [ByteArray], which is a copy of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.toByteArray(): ByteArray {\n return storage.copyOf()\n}\n\n/**\n * Returns an array of type [IntArray], which is a copy of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.toIntArray(): IntArray {\n return storage.copyOf()\n}\n\n/**\n * Returns an array of type [LongArray], which is a copy of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.toLongArray(): LongArray {\n return storage.copyOf()\n}\n\n/**\n * Returns an array of type [ShortArray], which is a copy of this array where each element is a signed reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.toShortArray(): ShortArray {\n return storage.copyOf()\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.toTypedArray(): Array<UInt> {\n return Array(size) { index -> this[index] }\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.toTypedArray(): Array<ULong> {\n return Array(size) { index -> this[index] }\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.toTypedArray(): Array<UByte> {\n return Array(size) { index -> this[index] }\n}\n\n/**\n * Returns a *typed* object array containing all of the elements of this primitive array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.toTypedArray(): Array<UShort> {\n return Array(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of UByte containing all of the elements of this generic array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UByte>.toUByteArray(): UByteArray {\n return UByteArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of type [UByteArray], which is a copy of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ByteArray.toUByteArray(): UByteArray {\n return UByteArray(this.copyOf())\n}\n\n/**\n * Returns an array of UInt containing all of the elements of this generic array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UInt>.toUIntArray(): UIntArray {\n return UIntArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of type [UIntArray], which is a copy of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun IntArray.toUIntArray(): UIntArray {\n return UIntArray(this.copyOf())\n}\n\n/**\n * Returns an array of ULong containing all of the elements of this generic array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out ULong>.toULongArray(): ULongArray {\n return ULongArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of type [ULongArray], which is a copy of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun LongArray.toULongArray(): ULongArray {\n return ULongArray(this.copyOf())\n}\n\n/**\n * Returns an array of UShort containing all of the elements of this generic array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UShort>.toUShortArray(): UShortArray {\n return UShortArray(size) { index -> this[index] }\n}\n\n/**\n * Returns an array of type [UShortArray], which is a copy of this array where each element is an unsigned reinterpretation\n * of the corresponding element of this array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ShortArray.toUShortArray(): UShortArray {\n return UShortArray(this.copyOf())\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UIntArray.associateWith(valueSelector: (UInt) -> V): Map<UInt, V> {\n val result = LinkedHashMap<UInt, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> ULongArray.associateWith(valueSelector: (ULong) -> V): Map<ULong, V> {\n val result = LinkedHashMap<ULong, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UByteArray.associateWith(valueSelector: (UByte) -> V): Map<UByte, V> {\n val result = LinkedHashMap<UByte, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Returns a [Map] where keys are elements from the given array and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original array.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UShortArray.associateWith(valueSelector: (UShort) -> V): Map<UShort, V> {\n val result = LinkedHashMap<UShort, V>(mapCapacity(size).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in UInt, in V>> UIntArray.associateWithTo(destination: M, valueSelector: (UInt) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in ULong, in V>> ULongArray.associateWithTo(destination: M, valueSelector: (ULong) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in UByte, in V>> UByteArray.associateWithTo(destination: M, valueSelector: (UByte) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given array,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V, M : MutableMap<in UShort, in V>> UShortArray.associateWithTo(destination: M, valueSelector: (UShort) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.flatMap(transform: (UInt) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.flatMap(transform: (ULong) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.flatMap(transform: (UByte) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.flatMap(transform: (UShort) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.flatMapIndexed(transform: (index: Int, UInt) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.flatMapIndexed(transform: (index: Int, ULong) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.flatMapIndexed(transform: (index: Int, UByte) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.flatMapIndexed(transform: (index: Int, UShort) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UIntArray.flatMapIndexedTo(destination: C, transform: (index: Int, UInt) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ULongArray.flatMapIndexedTo(destination: C, transform: (index: Int, ULong) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UByteArray.flatMapIndexedTo(destination: C, transform: (index: Int, UByte) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original array, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UShortArray.flatMapIndexedTo(destination: C, transform: (index: Int, UShort) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(index++, element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UIntArray.flatMapTo(destination: C, transform: (UInt) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ULongArray.flatMapTo(destination: C, transform: (ULong) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UByteArray.flatMapTo(destination: C, transform: (UByte) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original array, to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UShortArray.flatMapTo(destination: C, transform: (UShort) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K> UIntArray.groupBy(keySelector: (UInt) -> K): Map<K, List<UInt>> {\n return groupByTo(LinkedHashMap<K, MutableList<UInt>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K> ULongArray.groupBy(keySelector: (ULong) -> K): Map<K, List<ULong>> {\n return groupByTo(LinkedHashMap<K, MutableList<ULong>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K> UByteArray.groupBy(keySelector: (UByte) -> K): Map<K, List<UByte>> {\n return groupByTo(LinkedHashMap<K, MutableList<UByte>>(), keySelector)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K> UShortArray.groupBy(keySelector: (UShort) -> K): Map<K, List<UShort>> {\n return groupByTo(LinkedHashMap<K, MutableList<UShort>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> UIntArray.groupBy(keySelector: (UInt) -> K, valueTransform: (UInt) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> ULongArray.groupBy(keySelector: (ULong) -> K, valueTransform: (ULong) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> UByteArray.groupBy(keySelector: (UByte) -> K, valueTransform: (UByte) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original array.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> UShortArray.groupBy(keySelector: (UShort) -> K, valueTransform: (UShort) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, M : MutableMap<in K, MutableList<UInt>>> UIntArray.groupByTo(destination: M, keySelector: (UInt) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<UInt>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, M : MutableMap<in K, MutableList<ULong>>> ULongArray.groupByTo(destination: M, keySelector: (ULong) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<ULong>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, M : MutableMap<in K, MutableList<UByte>>> UByteArray.groupByTo(destination: M, keySelector: (UByte) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<UByte>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups elements of the original array by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, M : MutableMap<in K, MutableList<UShort>>> UShortArray.groupByTo(destination: M, keySelector: (UShort) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<UShort>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> UIntArray.groupByTo(destination: M, keySelector: (UInt) -> K, valueTransform: (UInt) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> ULongArray.groupByTo(destination: M, keySelector: (ULong) -> K, valueTransform: (ULong) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> UByteArray.groupByTo(destination: M, keySelector: (UByte) -> K, valueTransform: (UByte) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original array\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <K, V, M : MutableMap<in K, MutableList<V>>> UShortArray.groupByTo(destination: M, keySelector: (UShort) -> K, valueTransform: (UShort) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.map(transform: (UInt) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.map(transform: (ULong) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.map(transform: (UByte) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original array.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.map(transform: (UShort) -> R): List<R> {\n return mapTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.mapIndexed(transform: (index: Int, UInt) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.mapIndexed(transform: (index: Int, ULong) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.mapIndexed(transform: (index: Int, UByte) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original array.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.mapIndexed(transform: (index: Int, UShort) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(size), transform)\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UIntArray.mapIndexedTo(destination: C, transform: (index: Int, UInt) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ULongArray.mapIndexedTo(destination: C, transform: (index: Int, ULong) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UByteArray.mapIndexedTo(destination: C, transform: (index: Int, UByte) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original array\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UShortArray.mapIndexedTo(destination: C, transform: (index: Int, UShort) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(index++, item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UIntArray.mapTo(destination: C, transform: (UInt) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> ULongArray.mapTo(destination: C, transform: (ULong) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UByteArray.mapTo(destination: C, transform: (UByte) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original array\n * and appends the results to the given [destination].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, C : MutableCollection<in R>> UShortArray.mapTo(destination: C, transform: (UShort) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.withIndex(): Iterable<IndexedValue<UInt>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.withIndex(): Iterable<IndexedValue<ULong>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.withIndex(): Iterable<IndexedValue<UByte>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original array\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.withIndex(): Iterable<IndexedValue<UShort>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.all(predicate: (UInt) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.all(predicate: (ULong) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.all(predicate: (UByte) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.all(predicate: (UShort) -> Boolean): Boolean {\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.any(): Boolean {\n return storage.any()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.any(): Boolean {\n return storage.any()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.any(): Boolean {\n return storage.any()\n}\n\n/**\n * Returns `true` if array has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.any(): Boolean {\n return storage.any()\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.any(predicate: (UInt) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.any(predicate: (ULong) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.any(predicate: (UByte) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.any(predicate: (UShort) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.count(predicate: (UInt) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.count(predicate: (ULong) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.count(predicate: (UByte) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.count(predicate: (UShort) -> Boolean): Int {\n var count = 0\n for (element in this) if (predicate(element)) ++count\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.fold(initial: R, operation: (acc: R, UInt) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.fold(initial: R, operation: (acc: R, ULong) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.fold(initial: R, operation: (acc: R, UByte) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.fold(initial: R, operation: (acc: R, UShort) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.foldIndexed(initial: R, operation: (index: Int, acc: R, UInt) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.foldIndexed(initial: R, operation: (index: Int, acc: R, ULong) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.foldIndexed(initial: R, operation: (index: Int, acc: R, UByte) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.foldIndexed(initial: R, operation: (index: Int, acc: R, UShort) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(index++, accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.foldRight(initial: R, operation: (UInt, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.foldRight(initial: R, operation: (ULong, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.foldRight(initial: R, operation: (UByte, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.foldRight(initial: R, operation: (UShort, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.foldRightIndexed(initial: R, operation: (index: Int, UInt, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.foldRightIndexed(initial: R, operation: (index: Int, ULong, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.foldRightIndexed(initial: R, operation: (index: Int, UByte, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns the specified [initial] value if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.foldRightIndexed(initial: R, operation: (index: Int, UShort, acc: R) -> R): R {\n var index = lastIndex\n var accumulator = initial\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.forEach(action: (UInt) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.forEach(action: (ULong) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.forEach(action: (UByte) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.forEach(action: (UShort) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.forEachIndexed(action: (index: Int, UInt) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.forEachIndexed(action: (index: Int, ULong) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.forEachIndexed(action: (index: Int, UByte) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.forEachIndexed(action: (index: Int, UShort) -> Unit): Unit {\n var index = 0\n for (item in this) action(index++, item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.max(): UInt? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.max(): ULong? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.max(): UByte? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.max(): UShort? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.maxBy(selector: (UInt) -> R): UInt? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.maxBy(selector: (ULong) -> R): ULong? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.maxBy(selector: (UByte) -> R): UByte? {\n return maxByOrNull(selector)\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.maxBy(selector: (UShort) -> R): UShort? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.maxByOrNull(selector: (UInt) -> R): UInt? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.maxByOrNull(selector: (ULong) -> R): ULong? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.maxByOrNull(selector: (UByte) -> R): UByte? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.maxByOrNull(selector: (UShort) -> R): UShort? {\n if (isEmpty()) return null\n var maxElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return maxElem\n var maxValue = selector(maxElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n }\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.maxOf(selector: (UInt) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.maxOf(selector: (ULong) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.maxOf(selector: (UByte) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.maxOf(selector: (UShort) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.maxOf(selector: (UInt) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.maxOf(selector: (ULong) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.maxOf(selector: (UByte) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.maxOf(selector: (UShort) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.maxOf(selector: (UInt) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.maxOf(selector: (ULong) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.maxOf(selector: (UByte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.maxOf(selector: (UShort) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.maxOfOrNull(selector: (UInt) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.maxOfOrNull(selector: (ULong) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.maxOfOrNull(selector: (UByte) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.maxOfOrNull(selector: (UShort) -> Double): Double? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.maxOfOrNull(selector: (UInt) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.maxOfOrNull(selector: (ULong) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.maxOfOrNull(selector: (UByte) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.maxOfOrNull(selector: (UShort) -> Float): Float? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.maxOfOrNull(selector: (UInt) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.maxOfOrNull(selector: (ULong) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.maxOfOrNull(selector: (UByte) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.maxOfOrNull(selector: (UShort) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.maxOfWith(comparator: Comparator<in R>, selector: (UInt) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.maxOfWith(comparator: Comparator<in R>, selector: (ULong) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.maxOfWith(comparator: Comparator<in R>, selector: (UByte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.maxOfWith(comparator: Comparator<in R>, selector: (UShort) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (UInt) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (ULong) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (UByte) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.maxOfWithOrNull(comparator: Comparator<in R>, selector: (UShort) -> R): R? {\n if (isEmpty()) return null\n var maxValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.maxOrNull(): UInt? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.maxOrNull(): ULong? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.maxOrNull(): UByte? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.maxOrNull(): UShort? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.maxWith(comparator: Comparator<in UInt>): UInt? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.maxWith(comparator: Comparator<in ULong>): ULong? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.maxWith(comparator: Comparator<in UByte>): UByte? {\n return maxWithOrNull(comparator)\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.maxWith(comparator: Comparator<in UShort>): UShort? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.maxWithOrNull(comparator: Comparator<in UInt>): UInt? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.maxWithOrNull(comparator: Comparator<in ULong>): ULong? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.maxWithOrNull(comparator: Comparator<in UByte>): UByte? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.maxWithOrNull(comparator: Comparator<in UShort>): UShort? {\n if (isEmpty()) return null\n var max = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.min(): UInt? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.min(): ULong? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.min(): UByte? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.min(): UShort? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.minBy(selector: (UInt) -> R): UInt? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.minBy(selector: (ULong) -> R): ULong? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.minBy(selector: (UByte) -> R): UByte? {\n return minByOrNull(selector)\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.minBy(selector: (UShort) -> R): UShort? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.minByOrNull(selector: (UInt) -> R): UInt? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.minByOrNull(selector: (ULong) -> R): ULong? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.minByOrNull(selector: (UByte) -> R): UByte? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.minByOrNull(selector: (UShort) -> R): UShort? {\n if (isEmpty()) return null\n var minElem = this[0]\n val lastIndex = this.lastIndex\n if (lastIndex == 0) return minElem\n var minValue = selector(minElem)\n for (i in 1..lastIndex) {\n val e = this[i]\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n }\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.minOf(selector: (UInt) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.minOf(selector: (ULong) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.minOf(selector: (UByte) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.minOf(selector: (UShort) -> Double): Double {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.minOf(selector: (UInt) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.minOf(selector: (ULong) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.minOf(selector: (UByte) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.minOf(selector: (UShort) -> Float): Float {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.minOf(selector: (UInt) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.minOf(selector: (ULong) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.minOf(selector: (UByte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.minOf(selector: (UShort) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.minOfOrNull(selector: (UInt) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.minOfOrNull(selector: (ULong) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.minOfOrNull(selector: (UByte) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.minOfOrNull(selector: (UShort) -> Double): Double? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.minOfOrNull(selector: (UInt) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.minOfOrNull(selector: (ULong) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.minOfOrNull(selector: (UByte) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.minOfOrNull(selector: (UShort) -> Float): Float? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UIntArray.minOfOrNull(selector: (UInt) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> ULongArray.minOfOrNull(selector: (ULong) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UByteArray.minOfOrNull(selector: (UByte) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R : Comparable<R>> UShortArray.minOfOrNull(selector: (UShort) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.minOfWith(comparator: Comparator<in R>, selector: (UInt) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.minOfWith(comparator: Comparator<in R>, selector: (ULong) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.minOfWith(comparator: Comparator<in R>, selector: (UByte) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array.\n * \n * @throws NoSuchElementException if the array is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.minOfWith(comparator: Comparator<in R>, selector: (UShort) -> R): R {\n if (isEmpty()) throw NoSuchElementException()\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (UInt) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (ULong) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (UByte) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the array or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.minOfWithOrNull(comparator: Comparator<in R>, selector: (UShort) -> R): R? {\n if (isEmpty()) return null\n var minValue = selector(this[0])\n for (i in 1..lastIndex) {\n val v = selector(this[i])\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.minOrNull(): UInt? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.minOrNull(): ULong? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.minOrNull(): UByte? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.minOrNull(): UShort? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.minWith(comparator: Comparator<in UInt>): UInt? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.minWith(comparator: Comparator<in ULong>): ULong? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.minWith(comparator: Comparator<in UByte>): UByte? {\n return minWithOrNull(comparator)\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.minWith(comparator: Comparator<in UShort>): UShort? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UIntArray.minWithOrNull(comparator: Comparator<in UInt>): UInt? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun ULongArray.minWithOrNull(comparator: Comparator<in ULong>): ULong? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UByteArray.minWithOrNull(comparator: Comparator<in UByte>): UByte? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\npublic fun UShortArray.minWithOrNull(comparator: Comparator<in UShort>): UShort? {\n if (isEmpty()) return null\n var min = this[0]\n for (i in 1..lastIndex) {\n val e = this[i]\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if the array has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.none(): Boolean {\n return isEmpty()\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.none(predicate: (UInt) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.none(predicate: (ULong) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.none(predicate: (UByte) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.none(predicate: (UShort) -> Boolean): Boolean {\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.onEach(action: (UInt) -> Unit): UIntArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.onEach(action: (ULong) -> Unit): ULongArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.onEach(action: (UByte) -> Unit): UByteArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element and returns the array itself afterwards.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.onEach(action: (UShort) -> Unit): UShortArray {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.onEachIndexed(action: (index: Int, UInt) -> Unit): UIntArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.onEachIndexed(action: (index: Int, ULong) -> Unit): ULongArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.onEachIndexed(action: (index: Int, UByte) -> Unit): UByteArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the array itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.onEachIndexed(action: (index: Int, UShort) -> Unit): UShortArray {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduce(operation: (acc: UInt, UInt) -> UInt): UInt {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduce(operation: (acc: ULong, ULong) -> ULong): ULong {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduce(operation: (acc: UByte, UByte) -> UByte): UByte {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduce(operation: (acc: UShort, UShort) -> UShort): UShort {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceIndexed(operation: (index: Int, acc: UInt, UInt) -> UInt): UInt {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceIndexed(operation: (index: Int, acc: ULong, ULong) -> ULong): ULong {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceIndexed(operation: (index: Int, acc: UByte, UByte) -> UByte): UByte {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceIndexed(operation: (index: Int, acc: UShort, UShort) -> UShort): UShort {\n if (isEmpty())\n throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceIndexedOrNull(operation: (index: Int, acc: UInt, UInt) -> UInt): UInt? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceIndexedOrNull(operation: (index: Int, acc: ULong, ULong) -> ULong): ULong? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceIndexedOrNull(operation: (index: Int, acc: UByte, UByte) -> UByte): UByte? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original array.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceIndexedOrNull(operation: (index: Int, acc: UShort, UShort) -> UShort): UShort? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(index, accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceOrNull(operation: (acc: UInt, UInt) -> UInt): UInt? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceOrNull(operation: (acc: ULong, ULong) -> ULong): ULong? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceOrNull(operation: (acc: UByte, UByte) -> UByte): UByte? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceOrNull(operation: (acc: UShort, UShort) -> UShort): UShort? {\n if (isEmpty())\n return null\n var accumulator = this[0]\n for (index in 1..lastIndex) {\n accumulator = operation(accumulator, this[index])\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceRight(operation: (UInt, acc: UInt) -> UInt): UInt {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceRight(operation: (ULong, acc: ULong) -> ULong): ULong {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceRight(operation: (UByte, acc: UByte) -> UByte): UByte {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceRight(operation: (UShort, acc: UShort) -> UShort): UShort {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceRightIndexed(operation: (index: Int, UInt, acc: UInt) -> UInt): UInt {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceRightIndexed(operation: (index: Int, ULong, acc: ULong) -> ULong): ULong {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceRightIndexed(operation: (index: Int, UByte, acc: UByte) -> UByte): UByte {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Throws an exception if this array is empty. If the array can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceRightIndexed(operation: (index: Int, UShort, acc: UShort) -> UShort): UShort {\n var index = lastIndex\n if (index < 0) throw UnsupportedOperationException(\"Empty array can't be reduced.\")\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceRightIndexedOrNull(operation: (index: Int, UInt, acc: UInt) -> UInt): UInt? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceRightIndexedOrNull(operation: (index: Int, ULong, acc: ULong) -> ULong): ULong? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceRightIndexedOrNull(operation: (index: Int, UByte, acc: UByte) -> UByte): UByte? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original array and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceRightIndexedOrNull(operation: (index: Int, UShort, acc: UShort) -> UShort): UShort? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(index, get(index), accumulator)\n --index\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.reduceRightOrNull(operation: (UInt, acc: UInt) -> UInt): UInt? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.reduceRightOrNull(operation: (ULong, acc: ULong) -> ULong): ULong? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.reduceRightOrNull(operation: (UByte, acc: UByte) -> UByte): UByte? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the array is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.reduceRightOrNull(operation: (UShort, acc: UShort) -> UShort): UShort? {\n var index = lastIndex\n if (index < 0) return null\n var accumulator = get(index--)\n while (index >= 0) {\n accumulator = operation(get(index--), accumulator)\n }\n return accumulator\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.runningFold(initial: R, operation: (acc: R, UInt) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.runningFold(initial: R, operation: (acc: R, ULong) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.runningFold(initial: R, operation: (acc: R, UByte) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.runningFold(initial: R, operation: (acc: R, UShort) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, UInt) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, ULong) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, UByte) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, UShort) -> R): List<R> {\n if (isEmpty()) return listOf(initial)\n val result = ArrayList<R>(size + 1).apply { add(initial) }\n var accumulator = initial\n for (index in indices) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.runningReduce(operation: (acc: UInt, UInt) -> UInt): List<UInt> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UInt>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.runningReduce(operation: (acc: ULong, ULong) -> ULong): List<ULong> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<ULong>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.runningReduce(operation: (acc: UByte, UByte) -> UByte): List<UByte> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UByte>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.runningReduce(operation: (acc: UShort, UShort) -> UShort): List<UShort> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UShort>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.runningReduceIndexed(operation: (index: Int, acc: UInt, UInt) -> UInt): List<UInt> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UInt>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.runningReduceIndexed(operation: (index: Int, acc: ULong, ULong) -> ULong): List<ULong> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<ULong>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.runningReduceIndexed(operation: (index: Int, acc: UByte, UByte) -> UByte): List<UByte> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UByte>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with the first element of this array.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.runningReduceIndexed(operation: (index: Int, acc: UShort, UShort) -> UShort): List<UShort> {\n if (isEmpty()) return emptyList()\n var accumulator = this[0]\n val result = ArrayList<UShort>(size).apply { add(accumulator) }\n for (index in 1 until size) {\n accumulator = operation(index, accumulator, this[index])\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.scan(initial: R, operation: (acc: R, UInt) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.scan(initial: R, operation: (acc: R, ULong) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.scan(initial: R, operation: (acc: R, UByte) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.scan(initial: R, operation: (acc: R, UShort) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UIntArray.scanIndexed(initial: R, operation: (index: Int, acc: R, UInt) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> ULongArray.scanIndexed(initial: R, operation: (index: Int, acc: R, ULong) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UByteArray.scanIndexed(initial: R, operation: (index: Int, acc: R, UByte) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original array and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R> UShortArray.scanIndexed(initial: R, operation: (index: Int, acc: R, UShort) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.scanReduce(operation: (acc: UInt, UInt) -> UInt): List<UInt> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.scanReduce(operation: (acc: ULong, ULong) -> ULong): List<ULong> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.scanReduce(operation: (acc: UByte, UByte) -> UByte): List<UByte> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.scanReduce(operation: (acc: UShort, UShort) -> UShort): List<UShort> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.scanReduceIndexed(operation: (index: Int, acc: UInt, UInt) -> UInt): List<UInt> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.scanReduceIndexed(operation: (index: Int, acc: ULong, ULong) -> ULong): List<ULong> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.scanReduceIndexed(operation: (index: Int, acc: UByte, UByte) -> UByte): List<UByte> {\n return runningReduceIndexed(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.scanReduceIndexed(operation: (index: Int, acc: UShort, UShort) -> UShort): List<UShort> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumBy(selector: (UInt) -> UInt): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumBy(selector: (ULong) -> UInt): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumBy(selector: (UByte) -> UInt): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumBy(selector: (UShort) -> UInt): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumByDouble(selector: (UInt) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumByDouble(selector: (ULong) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumByDouble(selector: (UByte) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumByDouble(selector: (UShort) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumOf(selector: (UInt) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumOf(selector: (ULong) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumOf(selector: (UByte) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumOf(selector: (UShort) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumOf(selector: (UInt) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumOf(selector: (ULong) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumOf(selector: (UByte) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumOf(selector: (UShort) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumOf(selector: (UInt) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumOf(selector: (ULong) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumOf(selector: (UByte) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumOf(selector: (UShort) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumOf(selector: (UInt) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumOf(selector: (ULong) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumOf(selector: (UByte) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumOf(selector: (UShort) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sumOf(selector: (UInt) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sumOf(selector: (ULong) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sumOf(selector: (UByte) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the array.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@Suppress(\"INAPPLICABLE_JVM_NAME\")\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sumOf(selector: (UShort) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UIntArray.zip(other: Array<out R>): List<Pair<UInt, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> ULongArray.zip(other: Array<out R>): List<Pair<ULong, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UByteArray.zip(other: Array<out R>): List<Pair<UByte, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UShortArray.zip(other: Array<out R>): List<Pair<UShort, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UIntArray.zip(other: Array<out R>, transform: (a: UInt, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> ULongArray.zip(other: Array<out R>, transform: (a: ULong, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UByteArray.zip(other: Array<out R>, transform: (a: UByte, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UShortArray.zip(other: Array<out R>, transform: (a: UShort, b: R) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UIntArray.zip(other: Iterable<R>): List<Pair<UInt, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> ULongArray.zip(other: Iterable<R>): List<Pair<ULong, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UByteArray.zip(other: Iterable<R>): List<Pair<UByte, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun <R> UShortArray.zip(other: Iterable<R>): List<Pair<UShort, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UIntArray.zip(other: Iterable<R>, transform: (a: UInt, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> ULongArray.zip(other: Iterable<R>, transform: (a: ULong, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UByteArray.zip(other: Iterable<R>, transform: (a: UByte, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <R, V> UShortArray.zip(other: Iterable<R>, transform: (a: UShort, b: R) -> V): List<V> {\n val arraySize = size\n val list = ArrayList<V>(minOf(other.collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in other) {\n if (i >= arraySize) break\n list.add(transform(this[i++], element))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun UIntArray.zip(other: UIntArray): List<Pair<UInt, UInt>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun ULongArray.zip(other: ULongArray): List<Pair<ULong, ULong>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun UByteArray.zip(other: UByteArray): List<Pair<UByte, UByte>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` array and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic infix fun UShortArray.zip(other: UShortArray): List<Pair<UShort, UShort>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UIntArray.zip(other: UIntArray, transform: (a: UInt, b: UInt) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> ULongArray.zip(other: ULongArray, transform: (a: ULong, b: ULong) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UByteArray.zip(other: UByteArray, transform: (a: UByte, b: UByte) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns a list of values built from the elements of `this` array and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest array.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <V> UShortArray.zip(other: UShortArray, transform: (a: UShort, b: UShort) -> V): List<V> {\n val size = minOf(size, other.size)\n val list = ArrayList<V>(size)\n for (i in 0 until size) {\n list.add(transform(this[i], other[i]))\n }\n return list\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UInt>.sum(): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out ULong>.sum(): ULong {\n var sum: ULong = 0uL\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfUByte\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UByte>.sum(): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@kotlin.jvm.JvmName(\"sumOfUShort\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic fun Array<out UShort>.sum(): UInt {\n var sum: UInt = 0u\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UIntArray.sum(): UInt {\n return storage.sum().toUInt()\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun ULongArray.sum(): ULong {\n return storage.sum().toULong()\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UByteArray.sum(): UInt {\n return sumBy { it.toUInt() }\n}\n\n/**\n * Returns the sum of all elements in the array.\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun UShortArray.sum(): UInt {\n return sumBy { it.toUInt() }\n}\n\n","package io.ktor.utils.io.bits\n\nimport io.ktor.utils.io.core.internal.*\nimport org.khronos.webgl.*\nimport kotlin.contracts.*\n\n/**\n * Execute [block] of code providing a temporary instance of [Memory] view of this byte array range\n * starting at the specified [offset] and having the specified bytes [length].\n * By default, if neither [offset] nor [length] specified, the whole array is used.\n * An instance of [Memory] provided into the [block] should be never captured and used outside of lambda.\n */\npublic actual inline fun <R> ByteArray.useMemory(offset: Int, length: Int, block: (Memory) -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return Memory.of(this, offset, length).let(block)\n}\n\n/**\n * Create [Memory] view for the specified [array] range starting at [offset] and the specified bytes [length].\n */\npublic fun Memory.Companion.of(array: ByteArray, offset: Int = 0, length: Int = array.size - offset): Memory {\n @Suppress(\"UnsafeCastFromDynamic\")\n val typedArray: Int8Array = array.asDynamic()\n return Memory.of(typedArray, offset, length)\n}\n\n/**\n * Create [Memory] view for the specified [buffer] range starting at [offset] and the specified bytes [length].\n */\npublic fun Memory.Companion.of(buffer: ArrayBuffer, offset: Int = 0, length: Int = buffer.byteLength - offset): Memory {\n return Memory(DataView(buffer, offset, length))\n}\n\n/**\n * Create [Memory] view for the specified [view].\n */\npublic fun Memory.Companion.of(view: DataView): Memory {\n return Memory(view)\n}\n\n/**\n * Create [Memory] view for the specified [view] range starting at [offset] and the specified bytes [length].\n */\npublic fun Memory.Companion.of(view: ArrayBufferView, offset: Int = 0, length: Int = view.byteLength): Memory {\n return Memory.of(view.buffer, view.byteOffset + offset, length)\n}\n\n@PublishedApi\ninternal actual object DefaultAllocator : Allocator {\n override fun alloc(size: Int): Memory = Memory(DataView(ArrayBuffer(size)))\n override fun alloc(size: Long): Memory = Memory(DataView(ArrayBuffer(size.toIntOrFail(\"size\"))))\n override fun free(instance: Memory) {\n }\n}\n","@file:Suppress(\"RedundantModalityModifier\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.core.internal.require\nimport io.ktor.utils.io.pool.*\n\n/**\n * The default abstract base class implementing [Input] interface.\n * @see [AbstractInput.fill] and [AbstractInput.closeSource].\n */\npublic abstract class AbstractInput(\n head: ChunkBuffer = ChunkBuffer.Empty,\n remaining: Long = head.remainingAll(),\n public val pool: ObjectPool<ChunkBuffer> = ChunkBuffer.Pool\n) : Input {\n private val state = AbstractInputSharedState(head, remaining)\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public constructor(\n head: IoBuffer = IoBuffer.Empty,\n remaining: Long = head.remainingAll(),\n pool: ObjectPool<ChunkBuffer> = ChunkBuffer.Pool\n ) : this(head as ChunkBuffer, remaining, pool)\n\n /**\n * Read the next bytes into the [destination] starting at [offset] at most [length] bytes.\n * May block until at least one byte is available.\n * Usually bypass all exceptions from the underlying source.\n *\n * @param offset in bytes where result should be written\n * @param length should be at least one byte\n *\n * @return number of bytes were copied or `0` if EOF encountered\n */\n protected abstract fun fill(destination: Memory, offset: Int, length: Int): Int\n\n /**\n * Should close the underlying bytes source. Could do nothing or throw exceptions.\n */\n protected abstract fun closeSource()\n\n /**\n * Current head chunk reference\n */\n private final var _head: ChunkBuffer\n get() = state.head\n set(newHead) {\n state.head = newHead\n state.headMemory = newHead.memory\n state.headPosition = newHead.readPosition\n state.headEndExclusive = newHead.writePosition\n }\n\n @PublishedApi\n @Suppress(\"CanBePrimaryConstructorProperty\")\n internal var head: ChunkBuffer\n get() = _head.also { it.discardUntilIndex(headPosition) }\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.ERROR)\n set(newHead) {\n _head = newHead\n }\n\n @PublishedApi\n internal final var headMemory: Memory\n get() = state.headMemory\n set(value) {\n state.headMemory = value\n }\n\n @PublishedApi\n internal final var headPosition: Int\n get() = state.headPosition\n set(value) {\n state.headPosition = value\n }\n\n @PublishedApi\n internal final var headEndExclusive: Int\n get() = state.headEndExclusive\n set(value) {\n state.headEndExclusive = value\n }\n\n @PublishedApi\n @Suppress(\"DEPRECATION_ERROR\")\n internal final var headRemaining: Int\n inline get() = headEndExclusive - headPosition\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n set(newRemaining) {\n updateHeadRemaining(newRemaining)\n }\n\n private var tailRemaining: Long\n get() = state.tailRemaining\n set(newValue) {\n require(newValue >= 0) { \"tailRemaining shouldn't be negative: $newValue\" }\n state.tailRemaining = newValue\n }\n\n @Deprecated(\n \"Not supported anymore. All operations are big endian by default.\",\n level = DeprecationLevel.ERROR\n )\n final override var byteOrder: ByteOrder\n get() = ByteOrder.BIG_ENDIAN\n set(newOrder) {\n if (newOrder != ByteOrder.BIG_ENDIAN) {\n throw IllegalArgumentException(\"Only BIG_ENDIAN is supported.\")\n }\n }\n\n internal final fun prefetch(min: Long): Boolean {\n if (min <= 0) return true\n val headRemaining = headRemaining\n if (headRemaining >= min || headRemaining + tailRemaining >= min) return true\n\n return doPrefetch(min)\n }\n\n final override fun peekTo(destination: Memory, destinationOffset: Long, offset: Long, min: Long, max: Long): Long {\n prefetch(min + offset)\n\n var current: ChunkBuffer = head\n var copied = 0L\n var skip = offset\n var writePosition = destinationOffset\n val maxCopySize = minOf(max, destination.size - destinationOffset)\n\n while (copied < min && copied < maxCopySize) {\n val chunkSize = current.readRemaining\n if (chunkSize > skip) {\n val size = minOf(chunkSize - skip, maxCopySize - copied)\n current.memory.copyTo(\n destination,\n current.readPosition + skip,\n size,\n writePosition\n )\n skip = 0\n copied += size\n writePosition += size\n } else {\n skip -= chunkSize\n }\n\n current = current.next ?: break\n }\n\n return copied\n }\n\n /**\n * @see doFill for similar logic\n * @see appendView for similar logic\n */\n private fun doPrefetch(min: Long): Boolean {\n var tail = _head.findTail()\n var available = headRemaining + tailRemaining\n\n do {\n val next = fill()\n if (next == null) {\n noMoreChunksAvailable = true\n return false\n }\n\n val chunkSize = next.readRemaining\n if (tail === ChunkBuffer.Empty) {\n _head = next\n tail = next\n } else {\n tail.next = next\n tailRemaining += chunkSize\n }\n\n available += chunkSize\n } while (available < min)\n\n return true\n }\n\n /**\n * Number of bytes available for read\n */\n public final val remaining: Long get() = headRemaining.toLong() + tailRemaining\n\n /**\n * @return `true` if there is at least one byte to read\n */\n public final fun canRead(): Boolean = headPosition != headEndExclusive || tailRemaining != 0L\n\n /**\n * @return `true` if there are at least [n] bytes to read\n */\n public final fun hasBytes(n: Int): Boolean = headRemaining + tailRemaining >= n\n\n /**\n * `true` if no bytes available for read\n */\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public final val isEmpty: Boolean\n get() = endOfInput\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public final val isNotEmpty: Boolean\n get() = isNotEmpty\n\n private var noMoreChunksAvailable = false\n\n final override val endOfInput: Boolean\n get() = headRemaining == 0 && tailRemaining == 0L && (noMoreChunksAvailable || doFill() == null)\n\n /**\n * Release packet. After this function invocation the packet becomes empty.\n * If it has been copied via [ByteReadPacket.copy]\n * then the copy should be released as well.\n */\n public final fun release() {\n val head = head\n val empty = ChunkBuffer.Empty\n\n if (head !== empty) {\n this._head = empty\n tailRemaining = 0\n head.releaseAll(pool)\n }\n }\n\n final override fun close() {\n release()\n if (!noMoreChunksAvailable) {\n noMoreChunksAvailable = true\n }\n closeSource()\n }\n\n internal final fun stealAll(): ChunkBuffer? {\n val head = head\n val empty = ChunkBuffer.Empty\n\n if (head === empty) return null\n this._head = empty\n tailRemaining = 0\n return head\n }\n\n internal final fun steal(): ChunkBuffer? {\n val head = head\n val next = head.next\n val empty = ChunkBuffer.Empty\n if (head === empty) return null\n\n if (next == null) {\n this._head = empty\n this.tailRemaining = 0\n } else {\n this._head = next\n this.tailRemaining -= next.readRemaining\n }\n\n head.next = null\n return head\n }\n\n internal final fun append(chain: ChunkBuffer) {\n if (chain === ChunkBuffer.Empty) return\n\n val size = chain.remainingAll()\n if (_head === ChunkBuffer.Empty) {\n _head = chain\n tailRemaining = size - headRemaining\n } else {\n _head.findTail().next = chain\n tailRemaining += size\n }\n }\n\n internal final fun tryWriteAppend(chain: ChunkBuffer): Boolean {\n val tail = head.findTail()\n val size = chain.readRemaining\n\n if (size == 0 || tail.writeRemaining < size) return false\n tail.writeBufferAppend(chain, size)\n\n if (head === tail) {\n headEndExclusive = tail.writePosition\n } else {\n tailRemaining += size\n }\n\n return true\n }\n\n final override fun readByte(): Byte {\n val index = headPosition\n val nextIndex = index + 1\n if (nextIndex < headEndExclusive) {\n // fast-path when we are not reading the last byte\n headPosition = nextIndex\n return headMemory[index]\n }\n\n return readByteSlow()\n }\n\n private fun readByteSlow(): Byte {\n val index = headPosition\n if (index < headEndExclusive) {\n val value = headMemory[index]\n headPosition = index\n val head = _head\n head.discardUntilIndex(index)\n ensureNext(head)\n return value\n }\n\n val head = prepareRead(1) ?: prematureEndOfStream(1)\n val byte = head.readByte()\n completeReadHead(head)\n return byte\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readShort(): Short = readShort()\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readFloat(): Float = readFloat()\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readDouble(): Double = readDouble()\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readInt(): Int {\n return readInt()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readLong(): Long {\n return readLong()\n }\n\n /**\n * Read exactly [length] bytes to [dst] array at specified [offset]\n */\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readFully(dst: ByteArray, offset: Int, length: Int) {\n val rc = readAvailable(dst, offset, length)\n if (rc != length) {\n throw EOFException(\"Not enough data in packet to fill buffer: ${length - rc} more bytes required\")\n }\n }\n\n /**\n * Discards at most [n] bytes\n * @return number of bytes has been discarded\n */\n public final fun discard(n: Int): Int {\n require(n >= 0) { \"Negative discard is not allowed: $n\" }\n return discardAsMuchAsPossible(n, 0)\n }\n\n /**\n * Discards exactly [n] bytes or fails with [EOFException]\n */\n public final fun discardExact(n: Int) {\n if (discard(n) != n) throw EOFException(\"Unable to discard $n bytes due to end of packet\")\n }\n\n @PublishedApi\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n internal inline fun read(block: (Buffer) -> Unit) {\n read(block = block)\n }\n\n @PublishedApi\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n internal inline fun read(n: Int, block: (Buffer) -> Unit) {\n read(n, block)\n }\n\n /**\n * Returns next byte (unsigned) or `-1` if no more bytes available\n */\n final override fun tryPeek(): Int {\n val head = head\n if (headRemaining > 0) {\n return head.tryPeekByte()\n }\n\n if (tailRemaining == 0L && noMoreChunksAvailable) return -1\n\n return prepareReadLoop(1, head)?.tryPeekByte() ?: -1\n }\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun peekTo(buffer: IoBuffer): Int {\n val head = prepareReadHead(1) ?: return -1\n\n val size = minOf(buffer.writeRemaining, head.readRemaining)\n (buffer as Buffer).writeFully(head, size)\n\n return size\n }\n\n final override fun discard(n: Long): Long {\n if (n <= 0) return 0L\n return discardAsMuchAsPossible(n, 0)\n }\n\n internal fun readAvailableCharacters(destination: CharArray, off: Int, len: Int): Int {\n if (endOfInput) return -1\n\n val out = object : Appendable {\n private var idx = off\n\n override fun append(c: Char): Appendable {\n destination[idx++] = c\n return this\n }\n\n override fun append(csq: CharSequence?): Appendable {\n if (csq is String) {\n csq.getCharsInternal(destination, idx)\n idx += csq.length\n } else if (csq != null) {\n for (i in 0 until csq.length) {\n destination[idx++] = csq[i]\n }\n }\n\n return this\n }\n\n override fun append(csq: CharSequence?, start: Int, end: Int): Appendable {\n throw UnsupportedOperationException()\n }\n }\n\n return readText(out, 0, len)\n }\n\n /**\n * Read at least [min] and at most [max] characters and append them to [out]\n * @return number of characters appended\n */\n public fun readText(out: Appendable, min: Int = 0, max: Int = Int.MAX_VALUE): Int {\n if (max.toLong() >= remaining) {\n val s = readTextExactBytes(bytesCount = remaining.toInt())\n out.append(s)\n return s.length\n }\n return readASCII(out, min, max)\n }\n\n /**\n * Read exactly [exactCharacters] characters and append them to [out]\n */\n public fun readTextExact(out: Appendable, exactCharacters: Int) {\n readText(out, exactCharacters, exactCharacters)\n }\n\n /**\n * Read a string at last [min] and at most [max] characters length\n */\n public fun readText(min: Int = 0, max: Int = Int.MAX_VALUE): String {\n if (min == 0 && (max == 0 || endOfInput)) return \"\"\n val remaining = remaining\n if (remaining > 0 && max.toLong() >= remaining) return readTextExactBytes(bytesCount = remaining.toInt())\n\n return buildString(min.coerceAtLeast(16).coerceAtMost(max)) {\n readASCII(this, min, max)\n }\n }\n\n /**\n * Read a string exactly [exactCharacters] length\n */\n public fun readTextExact(exactCharacters: Int): String {\n return readText(exactCharacters, exactCharacters)\n }\n\n private fun readASCII(out: Appendable, min: Int, max: Int): Int {\n when {\n max == 0 && min == 0 -> return 0\n endOfInput -> if (min == 0) return 0 else atLeastMinCharactersRequire(min)\n max < min -> minShouldBeLess(min, max)\n }\n\n var copied = 0\n var utf8 = false\n\n takeWhile { buffer ->\n val rc = buffer.decodeASCII {\n if (copied == max) false\n else {\n out.append(it)\n copied++\n true\n }\n }\n\n when {\n rc -> true\n copied == max -> false\n else -> {\n utf8 = true\n false\n }\n }\n }\n\n if (utf8) {\n return copied + readUtf8(out, min - copied, max - copied)\n }\n if (copied < min) prematureEndOfStreamChars(min, copied)\n return copied\n }\n\n private fun atLeastMinCharactersRequire(min: Int): Nothing =\n throw EOFException(\"at least $min characters required but no bytes available\")\n\n private fun minShouldBeLess(min: Int, max: Int): Nothing =\n throw IllegalArgumentException(\"min should be less or equal to max but min = $min, max = $max\")\n\n private fun prematureEndOfStreamChars(min: Int, copied: Int): Nothing = throw MalformedUTF8InputException(\n \"Premature end of stream: expected at least $min chars but had only $copied\"\n )\n\n private fun readUtf8(out: Appendable, min: Int, max: Int): Int {\n var copied = 0\n\n takeWhileSize { buffer ->\n val size = buffer.decodeUTF8 {\n if (copied == max) false\n else {\n out.append(it)\n copied++\n true\n }\n }\n\n when {\n size == 0 -> 1\n size > 0 -> size\n else -> 0\n }\n }\n\n if (copied < min) prematureEndOfStreamChars(min, copied)\n\n return copied\n }\n\n private tailrec fun discardAsMuchAsPossible(n: Long, skipped: Long): Long {\n if (n == 0L) return skipped\n val current = prepareRead(1) ?: return skipped\n val size = minOf(current.readRemaining.toLong(), n).toInt()\n current.discardExact(size)\n headPosition += size\n afterRead(current)\n\n return discardAsMuchAsPossible(n - size, skipped + size)\n }\n\n private tailrec fun discardAsMuchAsPossible(n: Int, skipped: Int): Int {\n if (n == 0) return skipped\n val current = prepareRead(1) ?: return skipped\n val size = minOf(current.readRemaining, n)\n current.discardExact(size)\n headPosition += size\n afterRead(current)\n\n return discardAsMuchAsPossible(n - size, skipped + size)\n }\n\n private tailrec fun readAsMuchAsPossible(array: ByteArray, offset: Int, length: Int, copied: Int): Int {\n if (length == 0) return copied\n val current = prepareRead(1) ?: return copied\n val size = minOf(length, current.readRemaining)\n\n current.readFully(array, offset, size)\n headPosition = current.readPosition\n\n return if (size != length || current.readRemaining == 0) {\n afterRead(current)\n readAsMuchAsPossible(array, offset + size, length - size, copied + size)\n } else {\n copied + size\n }\n }\n\n private fun notEnoughBytesAvailable(n: Int): Nothing {\n throw EOFException(\"Not enough data in packet ($remaining) to read $n byte(s)\")\n }\n\n @Deprecated(\"Not supported anymore.\", level = DeprecationLevel.ERROR)\n public fun updateHeadRemaining(remaining: Int) {\n // the only external usages are from readDirect\n // so after using head chunk directly we should fix positions instead\n val newPosition = headEndExclusive - remaining\n\n if (newPosition < 0) {\n throw IllegalArgumentException(\"Unable to update position to negative. newRemaining is too big.\")\n }\n\n headPosition = newPosition\n }\n\n @DangerousInternalIoApi\n public fun prepareReadHead(minSize: Int): ChunkBuffer? = prepareReadLoop(minSize, head)\n\n @DangerousInternalIoApi\n public fun ensureNextHead(current: ChunkBuffer): ChunkBuffer? = ensureNext(current)\n\n @PublishedApi\n internal fun ensureNext(current: ChunkBuffer): ChunkBuffer? = ensureNext(\n current,\n ChunkBuffer.Empty\n )\n\n @DangerousInternalIoApi\n public fun fixGapAfterRead(current: ChunkBuffer) {\n val next = current.next ?: return fixGapAfterReadFallback(current)\n\n val remaining = current.readRemaining\n val overrunSize = minOf(remaining, Buffer.ReservedSize - current.endGap)\n if (next.startGap < overrunSize) {\n return fixGapAfterReadFallback(current)\n }\n\n next.restoreStartGap(overrunSize)\n\n if (remaining > overrunSize) {\n current.releaseEndGap()\n\n this.headEndExclusive = current.writePosition\n this.tailRemaining += overrunSize\n } else {\n this._head = next\n this.tailRemaining -= next.readRemaining - overrunSize\n current.cleanNext()\n current.release(pool)\n }\n }\n\n private fun fixGapAfterReadFallback(current: ChunkBuffer) {\n if (noMoreChunksAvailable && current.next == null) {\n this.headPosition = current.readPosition\n this.headEndExclusive = current.writePosition\n this.tailRemaining = 0\n return\n }\n\n val size = current.readRemaining\n val overrun = minOf(size, Buffer.ReservedSize - current.endGap)\n\n if (size > overrun) {\n fixGapAfterReadFallbackUnreserved(current, size, overrun)\n } else {\n val new = pool.borrow()\n new.reserveEndGap(Buffer.ReservedSize)\n new.next = current.cleanNext()\n\n new.writeBufferAppend(current, size)\n this._head = new\n }\n\n current.release(pool)\n }\n\n private fun fixGapAfterReadFallbackUnreserved(current: ChunkBuffer, size: Int, overrun: Int) {\n // if we have a chunk with no end reservation\n // we can split it into two to fix it\n\n val chunk1 = pool.borrow()\n val chunk2 = pool.borrow()\n\n chunk1.reserveEndGap(Buffer.ReservedSize)\n chunk2.reserveEndGap(Buffer.ReservedSize)\n chunk1.next = chunk2\n chunk2.next = current.cleanNext()\n\n chunk1.writeBufferAppend(current, size - overrun)\n chunk2.writeBufferAppend(current, overrun)\n\n this._head = chunk1\n this.tailRemaining = chunk2.remainingAll()\n }\n\n private tailrec fun ensureNext(current: ChunkBuffer, empty: ChunkBuffer): ChunkBuffer? {\n if (current === empty) {\n return doFill()\n }\n\n val next = current.cleanNext()\n current.release(pool)\n\n return when {\n next == null -> {\n this._head = empty\n this.tailRemaining = 0L\n ensureNext(empty, empty)\n }\n next.canRead() -> {\n _head = next\n tailRemaining -= next.readRemaining\n next\n }\n else -> ensureNext(next, empty)\n }\n }\n\n /**\n * Reads the next chunk suitable for reading or `null` if no more chunks available. It is also allowed\n * to return a chain of chunks linked through [ChunkBuffer.next]. The last chunk should have `null` next reference.\n * Could rethrow exceptions from the underlying source.\n */\n protected open fun fill(): ChunkBuffer? {\n val buffer = pool.borrow()\n try {\n buffer.reserveEndGap(Buffer.ReservedSize)\n val copied = fill(buffer.memory, buffer.writePosition, buffer.writeRemaining)\n\n if (copied == 0) {\n noMoreChunksAvailable = true\n\n if (!buffer.canRead()) {\n buffer.release(pool)\n return null\n }\n }\n\n buffer.commitWritten(copied)\n\n return buffer\n } catch (t: Throwable) {\n buffer.release(pool)\n throw t\n }\n }\n\n protected final fun markNoMoreChunksAvailable() {\n if (!noMoreChunksAvailable) {\n noMoreChunksAvailable = true\n }\n }\n\n /**\n * see [prefetch] for similar logic\n */\n private final fun doFill(): ChunkBuffer? {\n if (noMoreChunksAvailable) return null\n val chunk = fill()\n if (chunk == null) {\n noMoreChunksAvailable = true\n return null\n }\n appendView(chunk)\n return chunk\n }\n\n private final fun appendView(chunk: ChunkBuffer) {\n val tail = _head.findTail()\n if (tail === ChunkBuffer.Empty) {\n _head = chunk\n require(tailRemaining == 0L) {\n throw IllegalStateException(\"It should be no tail remaining bytes if current tail is EmptyBuffer\")\n }\n tailRemaining = chunk.next?.remainingAll() ?: 0L\n } else {\n tail.next = chunk\n tailRemaining += chunk.remainingAll()\n }\n }\n\n @PublishedApi\n internal fun prepareRead(minSize: Int): ChunkBuffer? {\n val head = head\n if (headEndExclusive - headPosition >= minSize) return head\n return prepareReadLoop(minSize, head)\n }\n\n @PublishedApi\n internal final fun prepareRead(minSize: Int, head: ChunkBuffer): ChunkBuffer? {\n if (headEndExclusive - headPosition >= minSize) return head\n return prepareReadLoop(minSize, head)\n }\n\n private tailrec fun prepareReadLoop(minSize: Int, head: ChunkBuffer): ChunkBuffer? {\n val headSize = headRemaining\n if (headSize >= minSize) return head\n\n val next = head.next ?: doFill() ?: return null\n\n if (headSize == 0) {\n if (head !== ChunkBuffer.Empty) {\n releaseHead(head)\n }\n\n return prepareReadLoop(minSize, next)\n } else {\n val desiredExtraBytes = minSize - headSize\n val copied = head.writeBufferAppend(next, desiredExtraBytes)\n headEndExclusive = head.writePosition\n tailRemaining -= copied\n if (!next.canRead()) {\n head.next = null\n head.next = next.cleanNext()\n next.release(pool)\n } else {\n next.reserveStartGap(copied)\n }\n }\n\n if (head.readRemaining >= minSize) return head\n if (minSize > Buffer.ReservedSize) minSizeIsTooBig(minSize)\n\n return prepareReadLoop(minSize, head)\n }\n\n private fun minSizeIsTooBig(minSize: Int): Nothing {\n throw IllegalStateException(\"minSize of $minSize is too big (should be less than ${Buffer.ReservedSize})\")\n }\n\n private fun afterRead(head: ChunkBuffer) {\n if (head.readRemaining == 0) {\n releaseHead(head)\n }\n }\n\n internal final fun releaseHead(head: ChunkBuffer): ChunkBuffer {\n val next = head.cleanNext() ?: ChunkBuffer.Empty\n this._head = next\n this.tailRemaining -= next.readRemaining\n head.release(pool)\n\n return next\n }\n\n public companion object\n}\n","/*\n * Copyright 2016-2017 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage io.ktor.utils.io\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\n/**\n * Channel for asynchronous reading and writing of sequences of bytes.\n * This is a buffered **single-reader single-writer channel**.\n *\n * Read operations can be invoked concurrently with write operations, but multiple reads or multiple writes\n * cannot be invoked concurrently with themselves. Exceptions are [close] and [flush] which can be invoked\n * concurrently with any other operations and between themselves at any time.\n */\npublic interface ByteChannel : ByteReadChannel, ByteWriteChannel {\n public fun attachJob(job: Job)\n}\n\n/**\n * Creates buffered channel for asynchronous reading and writing of sequences of bytes.\n */\npublic expect fun ByteChannel(autoFlush: Boolean = false): ByteChannel\n\n/**\n * Creates channel for reading from the specified byte array. Please note that it could use [content] directly\n * or copy it's bytes depending on the platform.\n */\npublic fun ByteReadChannel(content: ByteArray): ByteReadChannel =\n ByteReadChannel(content, 0, content.size)\n\n/**\n * Creates channel for reading from the specified byte array. Please note that it could use [content] directly\n * or copy it's bytes depending on the platform.\n */\npublic fun ByteReadChannel(content: ByteArray, offset: Int): ByteReadChannel =\n ByteReadChannel(content, offset, content.size)\n\n/**\n * Creates channel for reading from the specified byte array. Please note that it could use [content] directly\n * or copy it's bytes depending on the platform\n */\npublic expect fun ByteReadChannel(content: ByteArray, offset: Int, length: Int): ByteReadChannel\n\npublic fun ByteReadChannel(text: String, charset: Charset = Charsets.UTF_8): ByteReadChannel =\n ByteReadChannel(text.toByteArray(charset)) // TODO optimize to encode parts on demand\n\n/**\n * Byte channel that is always empty.\n */\n@Deprecated(\n \"Use ByteReadChannel.Empty instead\",\n ReplaceWith(\"ByteReadChannel.Empty\"),\n level = DeprecationLevel.ERROR\n)\npublic val EmptyByteReadChannel: ByteReadChannel\n get() = ByteReadChannel.Empty\n","@file:Suppress(\"RedundantModalityModifier\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.errors.*\nimport io.ktor.utils.io.pool.*\n\n@DangerousInternalIoApi\n@Deprecated(\n \"Will be removed in the future releases. Use Input or AbstractInput instead.\",\n ReplaceWith(\"AbstractInput\", \"io.ktor.utils.io.core.AbstractInput\")\n)\npublic abstract class ByteReadPacketBase(\n head: ChunkBuffer,\n remaining: Long,\n pool: ObjectPool<ChunkBuffer>\n) : AbstractInput(head, remaining, pool) {\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public constructor(\n head: IoBuffer,\n remaining: Long,\n pool: ObjectPool<ChunkBuffer>\n ) : this(head as ChunkBuffer, remaining, pool)\n\n public companion object {\n @Deprecated(\n \"Use ByteReadPacket.Empty instead\",\n ReplaceWith(\"ByteReadPacket.Empty\"),\n level = DeprecationLevel.ERROR\n )\n public val Empty: ByteReadPacket\n get() = ByteReadPacket.Empty\n }\n}\n\npublic expect class EOFException(message: String) : IOException\n\n/**\n * For streaming input it should be [Input.endOfInput] instead.\n */\n@Deprecated(\"Use endOfInput property instead\", ReplaceWith(\"endOfInput\"))\npublic inline val Input.isEmpty: Boolean\n get() = endOfInput\n\n/**\n * For streaming input there is no reliable way to detect it without triggering bytes population from the underlying\n * source. Consider using [Input.endOfInput] or use [ByteReadPacket] instead.\n */\n@Deprecated(\n \"This makes no sense for streaming inputs. Some use-cases are covered by endOfInput property\",\n ReplaceWith(\"!endOfInput\")\n)\npublic val Input.isNotEmpty: Boolean\n get() {\n if (endOfInput) return false\n prepareReadFirstHead(1)?.let { found ->\n completeReadHead(found)\n return true\n }\n return false\n }\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic inline val ByteReadPacket.isEmpty: Boolean\n get() = endOfInput\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic inline val ByteReadPacket.isNotEmpty: Boolean\n get() = !endOfInput\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Channel for asynchronous reading of sequences of bytes.\n * This is a **single-reader channel**.\n *\n * Operations on this channel cannot be invoked concurrently.\n */\npublic expect interface ByteReadChannel {\n /**\n * Returns number of bytes that can be read without suspension. Read operations do no suspend and return\n * immediately when this number is at least the number of bytes requested for read.\n */\n public val availableForRead: Int\n\n /**\n * Returns `true` if the channel is closed and no remaining bytes are available for read.\n * It implies that [availableForRead] is zero.\n */\n public val isClosedForRead: Boolean\n\n public val isClosedForWrite: Boolean\n\n /**\n * Byte order that is used for multi-byte read operations\n * (such as [readShort], [readInt], [readLong], [readFloat], and [readDouble]).\n */\n @Deprecated(\n \"Setting byte order is no longer supported. Read/write in big endian and use reverseByteOrder() extensions.\",\n level = DeprecationLevel.ERROR\n )\n public var readByteOrder: ByteOrder\n\n /**\n * Number of bytes read from the channel.\n * It is not guaranteed to be atomic so could be updated in the middle of long running read operation.\n */\n public val totalBytesRead: Long\n\n /**\n * Reads all available bytes to [dst] buffer and returns immediately or suspends if no bytes available\n * @return number of bytes were read or `-1` if the channel has been closed\n */\n public suspend fun readAvailable(dst: ByteArray, offset: Int, length: Int): Int\n public suspend fun readAvailable(dst: IoBuffer): Int\n\n /**\n * Reads all [length] bytes to [dst] buffer or fails if channel has been closed.\n * Suspends if not enough bytes available.\n */\n public suspend fun readFully(dst: ByteArray, offset: Int, length: Int)\n public suspend fun readFully(dst: IoBuffer, n: Int)\n\n /**\n * Reads the specified amount of bytes and makes a byte packet from them. Fails if channel has been closed\n * and not enough bytes available. Accepts [headerSizeHint] to be provided, see [BytePacketBuilder].\n */\n public suspend fun readPacket(size: Int, headerSizeHint: Int): ByteReadPacket\n\n /**\n * Reads up to [limit] bytes and makes a byte packet or until end of stream encountered.\n * Accepts [headerSizeHint] to be provided, see [BytePacketBuilder].\n */\n public suspend fun readRemaining(limit: Long, headerSizeHint: Int): ByteReadPacket\n\n /**\n * Reads a long number (suspending if not enough bytes available) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readLong(): Long\n\n /**\n * Reads an int number (suspending if not enough bytes available) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readInt(): Int\n\n /**\n * Reads a short number (suspending if not enough bytes available) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readShort(): Short\n\n /**\n * Reads a byte (suspending if no bytes available yet) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readByte(): Byte\n\n /**\n * Reads a boolean value (suspending if no bytes available yet) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readBoolean(): Boolean\n\n /**\n * Reads double number (suspending if not enough bytes available) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readDouble(): Double\n\n /**\n * Reads float number (suspending if not enough bytes available) or fails if channel has been closed\n * and not enough bytes.\n */\n public suspend fun readFloat(): Float\n\n /**\n * Starts non-suspendable read session. After channel preparation [consumer] lambda will be invoked immediately\n * event if there are no bytes available for read yet.\n */\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Use read { } instead.\")\n public fun readSession(consumer: ReadSession.() -> Unit)\n\n /**\n * Starts a suspendable read session. After channel preparation [consumer] lambda will be invoked immediately\n * even if there are no bytes available for read yet. [consumer] lambda could suspend as much as needed.\n */\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Use read { } instead.\")\n public suspend fun readSuspendableSession(consumer: suspend SuspendableReadSession.() -> Unit)\n\n /**\n * Reads a line of UTF-8 characters to the specified [out] buffer up to [limit] characters.\n * Supports both CR-LF and LF line endings. No line ending characters will be appended to [out] buffer.\n * Throws an exception if the specified [limit] has been exceeded.\n *\n * @return `true` if line has been read (possibly empty) or `false` if channel has been closed\n * and no characters were read.\n */\n public suspend fun <A : Appendable> readUTF8LineTo(out: A, limit: Int): Boolean\n\n /**\n * Reads a line of UTF-8 characters up to [limit] characters.\n * Supports both CR-LF and LF line endings.\n * Throws an exception if the specified [limit] has been exceeded.\n *\n * @return a line string with no line endings or `null` of channel has been closed\n * and no characters were read.\n */\n public suspend fun readUTF8Line(limit: Int): String?\n\n /**\n * Close channel with optional [cause] cancellation. Unlike [ByteWriteChannel.close] that could close channel\n * normally, cancel does always close with error so any operations on this channel will always fail\n * and all suspensions will be resumed with exception.\n *\n * Please note that if the channel has been provided by [reader] or [writer] then the corresponding owning\n * coroutine will be cancelled as well\n *\n * @see ByteWriteChannel.close\n */\n public fun cancel(cause: Throwable?): Boolean\n\n /**\n * Discard up to [max] bytes\n *\n * @return number of bytes were discarded\n */\n public suspend fun discard(max: Long): Long\n\n /**\n * Try to copy at least [min] but up to [max] bytes to the specified [destination] buffer from this input\n * skipping [offset] bytes. If there are not enough bytes available to provide [min] bytes after skipping [offset]\n * bytes then it will trigger the underlying source reading first and after that will\n * simply copy available bytes even if EOF encountered so [min] is not a requirement but a desired number of bytes.\n * It is safe to specify [max] greater than the destination free space.\n * `min` shouldn't be bigger than the [destination] free space.\n * This function could trigger the underlying source suspending reading.\n * It is allowed to specify too big [offset] so in this case this function will always return `0` after prefetching\n * all underlying bytes but note that it may lead to significant memory consumption.\n * This function usually copy more bytes than [min] (unless `max = min`) but it is not guaranteed.\n * When `0` is returned with `offset = 0` then it makes sense to check [isClosedForRead].\n *\n * @param destination to write bytes\n * @param offset to skip input\n * @param min bytes to be copied, shouldn't be greater than the buffer free space. Could be `0`.\n * @param max bytes to be copied even if there are more bytes buffered, could be [Int.MAX_VALUE].\n * @return number of bytes copied to the [destination] possibly `0`\n */\n public suspend fun peekTo(\n destination: Memory,\n destinationOffset: Long,\n offset: Long = 0,\n min: Long = 1,\n max: Long = Long.MAX_VALUE\n ): Long\n\n public companion object {\n public val Empty: ByteReadChannel\n }\n}\n\n/**\n * Reads the specified amount of bytes and makes a byte packet from them. Fails if channel has been closed\n * and not enough bytes available.\n */\npublic suspend fun ByteReadChannel.readPacket(size: Int): ByteReadPacket = readPacket(size, 0)\n\n/**\n * Reads up to [limit] bytes and makes a byte packet or until end of stream encountered.\n */\npublic suspend fun ByteReadChannel.readRemaining(limit: Long): ByteReadPacket = readRemaining(limit, 0)\n\n/**\n * Reads all remaining bytes and makes a byte packet\n */\npublic suspend fun ByteReadChannel.readRemaining(): ByteReadPacket = readRemaining(Long.MAX_VALUE, 0)\n\npublic suspend fun ByteReadChannel.readFully(dst: IoBuffer) {\n readFully(dst, dst.writeRemaining)\n}\n\npublic suspend fun ByteReadChannel.readUTF8LineTo(out: Appendable): Boolean {\n return readUTF8LineTo(out, Int.MAX_VALUE)\n}\n\npublic suspend fun ByteReadChannel.readUTF8Line(): String? {\n return readUTF8Line(Int.MAX_VALUE)\n}\n\npublic fun ByteReadChannel.cancel(): Boolean = cancel(null)\n\n/**\n * Discards all bytes in the channel and suspends until end of stream.\n */\npublic suspend fun ByteReadChannel.discard(): Long = discard(Long.MAX_VALUE)\n\n/**\n * Discards exactly [n] bytes or fails if not enough bytes in the channel\n */\npublic suspend inline fun ByteReadChannel.discardExact(n: Long) {\n if (discard(n) != n) throw EOFException(\"Unable to discard $n bytes\")\n}\n\npublic suspend fun ByteReadChannel.readAvailable(dst: ByteArray): Int = readAvailable(dst, 0, dst.size)\n\npublic suspend fun ByteReadChannel.readFully(dst: ByteArray): Unit = readFully(dst, 0, dst.size)\n\npublic expect suspend fun ByteReadChannel.joinTo(dst: ByteWriteChannel, closeOnEnd: Boolean)\n\n/**\n * Reads bytes from receiver channel and writes them to [dst] channel.\n * Closes [dst] channel if fails to read or write with cause exception.\n * @return a number of copied bytes\n */\npublic suspend fun ByteReadChannel.copyTo(dst: ByteWriteChannel): Long = copyTo(dst, limit = Long.MAX_VALUE)\n\n/**\n * Reads up to [limit] bytes from receiver channel and writes them to [dst] channel.\n * Closes [dst] channel if fails to read or write with cause exception.\n * @return a number of copied bytes\n */\npublic expect suspend fun ByteReadChannel.copyTo(dst: ByteWriteChannel, limit: Long): Long\n\n/**\n * Reads all the bytes from receiver channel and writes them to [dst] channel and then closes it.\n * Closes [dst] channel if fails to read or write with cause exception.\n * @return a number of copied bytes\n */\npublic suspend fun ByteReadChannel.copyAndClose(dst: ByteWriteChannel, limit: Long = Long.MAX_VALUE): Long {\n val count = copyTo(dst, limit)\n dst.close()\n return count\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\nimport kotlin.contracts.*\n\npublic expect val PACKET_MAX_COPY_SIZE: Int\n\n/**\n * Build a byte packet in [block] lambda. Creates a temporary builder and releases it in case of failure\n */\npublic inline fun buildPacket(headerSizeHint: Int = 0, block: BytePacketBuilder.() -> Unit): ByteReadPacket {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val builder = BytePacketBuilder(headerSizeHint)\n try {\n block(builder)\n return builder.build()\n } catch (t: Throwable) {\n builder.release()\n throw t\n }\n}\n\npublic expect fun BytePacketBuilder(headerSizeHint: Int = 0): BytePacketBuilder\n\n/**\n * Discard all written bytes and prepare to build another packet.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun BytePacketBuilder.reset() {\n release()\n}\n\n@DangerousInternalIoApi\n@Deprecated(\"Will be removed in future releases.\", level = DeprecationLevel.ERROR)\n@Suppress(\"DEPRECATION_ERROR\")\npublic abstract class BytePacketBuilderPlatformBase\ninternal constructor(pool: ObjectPool<ChunkBuffer>) : BytePacketBuilderBase(pool)\n\n@DangerousInternalIoApi\n@Deprecated(\"Will be removed in future releases\", level = DeprecationLevel.ERROR)\n@Suppress(\"DEPRECATION_ERROR\")\npublic abstract class BytePacketBuilderBase\ninternal constructor(pool: ObjectPool<ChunkBuffer>) : AbstractOutput(pool)\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\n\n/**\n * This shouldn't be implemented directly. Inherit [AbstractOutput] instead.\n */\npublic expect interface Output : Appendable, Closeable {\n @Deprecated(\n \"This is no longer supported. All operations are big endian by default. Use writeXXXLittleEndian \" +\n \"to write primitives in little endian order\" +\n \" or do X.reverseByteOrder() and then writeXXX instead.\",\n level = DeprecationLevel.ERROR\n )\n public var byteOrder: ByteOrder\n\n public fun writeByte(v: Byte)\n\n public fun flush()\n\n override fun close()\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeShort(v: Short) {\n writeShort(v)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeInt(v: Int) {\n writeInt(v)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeLong(v: Long) {\n writeLong(v)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFloat(v: Float) {\n writeFloat(v)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeDouble(v: Double) {\n writeDouble(v)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: ByteArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: ShortArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: IntArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: LongArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: FloatArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: DoubleArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\", \"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun writeFully(src: IoBuffer, length: Int) {\n writeFully(src, length)\n }\n\n public fun append(csq: CharArray, start: Int, end: Int): Appendable\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\", \"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun fill(n: Long, v: Byte) {\n fill(n, v)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.append(csq: CharSequence, start: Int = 0, end: Int = csq.length): Appendable {\n return append(csq, start, end)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.append(csq: CharArray, start: Int = 0, end: Int = csq.size): Appendable {\n return append(csq, start, end)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: ByteArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyBytesTemplate(offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: ShortArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyTemplate(2, offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: IntArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyTemplate(4, offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: LongArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyTemplate(8, offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: FloatArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyTemplate(4, offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.writeFully(src: DoubleArray, offset: Int = 0, length: Int = src.size - offset) {\n writeFullyTemplate(8, offset, length) { buffer, currentOffset, count ->\n buffer.writeFully(src, currentOffset, count)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Output.writeFully(src: IoBuffer, length: Int = src.readRemaining) {\n writeFully(src as Buffer, length)\n}\n\npublic fun Output.writeFully(src: Buffer, length: Int = src.readRemaining) {\n writeFullyBytesTemplate(0, length) { buffer, _, count ->\n buffer.writeFully(src, count)\n }\n}\n\npublic fun Output.writeFully(src: Memory, offset: Int, length: Int) {\n writeFully(src, offset.toLong(), length.toLong())\n}\n\npublic fun Output.writeFully(src: Memory, offset: Long, length: Long) {\n writeFullyBytesTemplate(offset, length) { memory, destinationOffset, sourceOffset, count ->\n src.copyTo(memory, sourceOffset, count, destinationOffset)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Output.fill(times: Long, value: Byte = 0) {\n if (this is AbstractOutput) {\n var written = 0L\n writeWhile { buffer ->\n val partTimes = minOf(buffer.writeRemaining.toLong(), times - written).toInt()\n buffer.fill(partTimes, value)\n written += partTimes\n written < times\n }\n } else {\n fillFallback(times, value)\n }\n}\n\nprivate fun Output.fillFallback(times: Long, value: Byte) {\n for (iterate in 0 until times) {\n writeByte(value)\n }\n}\n\n/**\n * Append number of chunks invoking [block] function while the returned value is true.\n * Depending on the output underlying implementation it could invoke [block] function with the same buffer several times\n * however it is guaranteed that it is always non-empty.\n */\n@DangerousInternalIoApi\npublic inline fun Output.writeWhile(block: (Buffer) -> Boolean) {\n var tail: ChunkBuffer = prepareWriteHead(1, null)\n try {\n while (true) {\n if (!block(tail)) break\n tail = prepareWriteHead(1, tail)\n }\n } finally {\n afterHeadWrite(tail)\n }\n}\n\n/**\n * Append number of chunks invoking [block] function while the returned value is positive.\n * If returned value is positive then it will be invoked again with a buffer having at least requested number of\n * bytes space (could be the same buffer as before if it complies to the restriction).\n * @param initialSize for the first buffer passed to [block] function\n */\n@DangerousInternalIoApi\npublic inline fun Output.writeWhileSize(initialSize: Int = 1, block: (Buffer) -> Int) {\n var tail = prepareWriteHead(initialSize, null)\n\n try {\n var size: Int\n while (true) {\n size = block(tail)\n if (size <= 0) break\n tail = prepareWriteHead(size, tail)\n }\n } finally {\n afterHeadWrite(tail)\n }\n}\n\npublic fun Output.writePacket(packet: ByteReadPacket) {\n @Suppress(\"DEPRECATION_ERROR\")\n if (this is BytePacketBuilderBase) {\n writePacket(packet)\n return\n }\n\n packet.takeWhile { from ->\n writeFully(from)\n true\n }\n}\n\nprivate inline fun Output.writeFullyBytesTemplate(\n offset: Int,\n length: Int,\n block: (Buffer, currentOffset: Int, count: Int) -> Unit\n) {\n var currentOffset = offset\n var remaining = length\n\n writeWhile { buffer ->\n val size = minOf(remaining, buffer.writeRemaining)\n block(buffer, currentOffset, size)\n currentOffset += size\n remaining -= size\n remaining > 0\n }\n}\n\nprivate inline fun Output.writeFullyBytesTemplate(\n initialOffset: Long,\n length: Long,\n block: (destination: Memory, destinationOffset: Long, currentOffset: Long, count: Long) -> Unit\n) {\n var currentOffset = initialOffset\n var remaining = length\n\n writeWhile { buffer ->\n val size = minOf(remaining, buffer.writeRemaining.toLong())\n block(buffer.memory, buffer.writePosition.toLong(), currentOffset, size)\n buffer.commitWritten(size.toInt())\n currentOffset += size\n remaining -= size\n remaining > 0\n }\n}\n\nprivate inline fun Output.writeFullyTemplate(\n componentSize: Int,\n offset: Int,\n length: Int,\n block: (Buffer, currentOffset: Int, count: Int) -> Unit\n) {\n var currentOffset = offset\n var remaining = length\n\n writeWhileSize(componentSize) { buffer ->\n val size = minOf(remaining, buffer.writeRemaining)\n block(buffer, currentOffset, size)\n currentOffset += size\n remaining -= size\n remaining * componentSize\n }\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.concurrent.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.errors.EOFException\nimport kotlin.contracts.*\n\n/**\n * Represents a buffer with read and write positions.\n *\n * Concurrent unsafe: the same memory could be shared between different instances of [Buffer] however you can't\n * read/write using the same [Buffer] instance from different threads.\n */\n@DangerousInternalIoApi\npublic open class Buffer(public val memory: Memory) {\n private val bufferState: BufferSharedState = BufferSharedState(memory.size32)\n\n /**\n * Current read position. It is always non-negative and will never run ahead of the [writePosition].\n * It is usually greater or equal to [startGap] reservation.\n * This position is affected by [discard], [rewind], [resetForRead], [resetForWrite], [reserveStartGap]\n * and [reserveEndGap].\n */\n public var readPosition: Int\n get() = bufferState.readPosition\n private set(value) {\n bufferState.readPosition = value\n }\n\n /**\n * Current write position. It is always non-negative and will never run ahead of the [limit].\n * It is always greater or equal to the [readPosition].\n * * This position is affected by [resetForRead], [resetForWrite], [reserveStartGap]\n * and [reserveEndGap].\n */\n public var writePosition: Int\n get() = bufferState.writePosition\n private set(value) {\n bufferState.writePosition = value\n }\n /**\n * Start gap is a reserved space in the beginning. The reserved space is usually used to write a packet length\n * in the case when it's not known before the packet constructed.\n */\n public var startGap: Int\n get() = bufferState.startGap\n private set(value) {\n bufferState.startGap = value\n }\n\n /**\n * Write position limit. No bytes could be written ahead of this limit. When the limit is less than the [capacity]\n * then this means that there are reserved bytes in the end ([endGap]). Such a reserved space in the end could be used\n * to write size, hash and so on. Also it is useful when several buffers are connected into a chain and some\n * primitive value (e.g. `kotlin.Int`) is separated into two chunks so bytes from the second chain could be copied\n * to the reserved space of the first chunk and then the whole value could be read at once.\n */\n public var limit: Int\n get() = bufferState.limit\n private set(value) {\n bufferState.limit = value\n }\n\n /**\n * Number of bytes reserved in the end.\n */\n public inline val endGap: Int get() = capacity - limit\n\n /**\n * Buffer's capacity (including reserved [startGap] and [endGap]. Value for released buffer is unspecified.\n */\n public val capacity: Int = memory.size32\n\n /**\n * Number of bytes available for reading.\n */\n public inline val readRemaining: Int get() = writePosition - readPosition\n\n /**\n * Size of the free space available for writing in bytes.\n */\n public inline val writeRemaining: Int get() = limit - writePosition\n\n /**\n * User data: could be a session, connection or anything useful\n */\n @Deprecated(\"Will be removed. Inherit Buffer and add required fields instead.\")\n @ExperimentalIoApi\n public var attachment: Any?\n get() = bufferState.attachment\n set(value) {\n bufferState.attachment = value\n }\n\n /**\n * Discard [count] readable bytes.\n *\n * @throws EOFException if [count] is bigger than available bytes.\n */\n public fun discardExact(count: Int = readRemaining) {\n if (count == 0) return\n\n val newReadPosition = readPosition + count\n if (count < 0 || newReadPosition > writePosition) {\n discardFailed(count, readRemaining)\n }\n readPosition = newReadPosition\n }\n\n @Deprecated(\"Use discardExact instead.\", level = DeprecationLevel.ERROR)\n public fun discard(count: Int): Int {\n val size = minOf(count, readRemaining)\n discardExact(size)\n return size\n }\n\n @Deprecated(\"Use discardExact instead.\", level = DeprecationLevel.ERROR)\n public final fun discard(count: Long): Long {\n val size = minOf(count, readRemaining.toLong()).toInt()\n discardExact(size)\n return size.toLong()\n }\n\n @DangerousInternalIoApi\n public fun commitWritten(count: Int) {\n val newWritePosition = writePosition + count\n if (count < 0 || newWritePosition > limit) {\n commitWrittenFailed(count, writeRemaining)\n }\n writePosition = newWritePosition\n }\n\n /**\n * @return `true` if there is free space\n */\n @PublishedApi\n internal fun commitWrittenUntilIndex(position: Int): Boolean {\n val limit = limit\n if (position < writePosition) {\n commitWrittenFailed(position - writePosition, writeRemaining)\n }\n if (position >= limit) {\n if (position == limit) {\n writePosition = position\n return false\n }\n commitWrittenFailed(position - writePosition, writeRemaining)\n }\n\n writePosition = position\n return true\n }\n\n internal fun discardUntilIndex(position: Int) {\n if (position < 0 || position > writePosition) {\n discardFailed(position - readPosition, readRemaining)\n }\n\n if (readPosition != position) {\n readPosition = position\n }\n }\n\n /**\n * Rewind [readPosition] backward to make [count] bytes available for reading again.\n * @throws IllegalArgumentException when [count] is too big and not enough bytes available before the [readPosition]\n */\n public fun rewind(count: Int = readPosition - startGap) {\n val newReadPosition = readPosition - count\n if (newReadPosition < startGap) {\n rewindFailed(count, readPosition - startGap)\n }\n readPosition = newReadPosition\n }\n\n /**\n * Reserve [startGap] bytes in the beginning.\n * May move [readPosition] and [writePosition] if no bytes available for reading.\n */\n public fun reserveStartGap(startGap: Int) {\n require(startGap >= 0) { \"startGap shouldn't be negative: $startGap\" }\n\n if (readPosition >= startGap) {\n this.startGap = startGap\n return\n }\n\n if (readPosition == writePosition) {\n if (startGap > limit) {\n startGapReservationFailedDueToLimit(startGap)\n }\n\n this.writePosition = startGap\n this.readPosition = startGap\n this.startGap = startGap\n return\n }\n\n startGapReservationFailed(startGap)\n }\n\n /**\n * Reserve [endGap] bytes in the end.\n * Could move [readPosition] and [writePosition] to reserve space but only when no bytes were written or\n * all written bytes are marked as consumed (were read or discarded).\n */\n public fun reserveEndGap(endGap: Int) {\n require(endGap >= 0) { \"endGap shouldn't be negative: $endGap\" }\n\n val newLimit = capacity - endGap\n if (newLimit >= writePosition) {\n limit = newLimit\n return\n }\n\n if (newLimit < 0) {\n endGapReservationFailedDueToCapacity(endGap)\n }\n if (newLimit < startGap) {\n endGapReservationFailedDueToStartGap(endGap)\n }\n\n if (readPosition == writePosition) {\n limit = newLimit\n readPosition = newLimit\n writePosition = newLimit\n return\n }\n\n endGapReservationFailedDueToContent(endGap)\n }\n\n /**\n * Marks the whole buffer available for read and no for write\n */\n public fun resetForRead() {\n startGap = 0\n readPosition = 0\n\n val capacity = capacity\n writePosition = capacity\n }\n\n /**\n * Marks all capacity writable except the start gap reserved before. The end gap reservation is discarded.\n */\n public fun resetForWrite() {\n resetForWrite(capacity - startGap)\n }\n\n /**\n * Marks up to [limit] bytes of the buffer available for write and no bytes for read.\n * It does respect [startGap] already reserved. All extra bytes after the specified [limit]\n * are considered as [endGap].\n */\n public fun resetForWrite(limit: Int) {\n val startGap = startGap\n readPosition = startGap\n writePosition = startGap\n this.limit = limit\n }\n\n /**\n * Forget start/end gap reservations.\n */\n internal fun releaseGaps() {\n releaseStartGap(0)\n releaseEndGap()\n }\n\n internal fun releaseEndGap() {\n limit = capacity\n }\n\n internal fun releaseStartGap(newReadPosition: Int) {\n require(newReadPosition >= 0) { \"newReadPosition shouldn't be negative: $newReadPosition\" }\n require(newReadPosition <= readPosition) {\n \"newReadPosition shouldn't be ahead of the read position: $newReadPosition > $readPosition\"\n }\n\n readPosition = newReadPosition\n if (startGap > newReadPosition) {\n startGap = newReadPosition\n }\n }\n\n protected open fun duplicateTo(copy: Buffer) {\n copy.limit = limit\n copy.startGap = startGap\n copy.readPosition = readPosition\n copy.writePosition = writePosition\n }\n\n /**\n * Create a new [Buffer] instance pointing to the same memory and having the same positions.\n */\n public open fun duplicate(): Buffer = Buffer(memory).apply {\n duplicateTo(this)\n }\n\n /**\n * Peek the next unsigned byte or return `-1` if no more bytes available for reading. No bytes will be marked\n * as consumed in any case.\n * @return an unsigned byte or `-1` if not even a byte is available for reading.\n * @see tryReadByte\n * @see readByte\n */\n public fun tryPeekByte(): Int {\n val readPosition = readPosition\n if (readPosition == writePosition) return -1\n return memory[readPosition].toInt() and 0xff\n }\n\n /**\n * Read the next unsigned byte or return `-1` if no more bytes available for reading. The returned byte is marked\n * as consumed.\n * @return an unsigned byte or `-1` if not even a byte is available for reading.\n * @see tryPeekByte\n * @see readByte\n */\n public fun tryReadByte(): Int {\n val readPosition = readPosition\n if (readPosition == writePosition) return -1\n this.readPosition = readPosition + 1\n return memory[readPosition].toInt() and 0xff\n }\n\n /**\n * Read the next byte or fail with [EOFException] if it's not available. The returned byte is marked\n * as consumed.\n * @throws EOFException when not even a byte is available for reading.\n * @see tryPeekByte\n * @see tryReadByte\n */\n public fun readByte(): Byte {\n val readPosition = readPosition\n if (readPosition == writePosition) {\n throw EOFException(\"No readable bytes available.\")\n }\n this.readPosition = readPosition + 1\n return memory[readPosition]\n }\n\n /**\n * Write a byte [value] at [writePosition] (incremented when written successfully).\n * @throws InsufficientSpaceException when no free space in the buffer.\n */\n public fun writeByte(value: Byte) {\n val writePosition = writePosition\n if (writePosition == limit) {\n throw InsufficientSpaceException(\"No free space in the buffer to write a byte\")\n }\n memory[writePosition] = value\n this.writePosition = writePosition + 1\n }\n\n /**\n * Clear buffer's state: read/write positions, gaps and so on. Byte content is not cleaned-up.\n */\n public open fun reset() {\n releaseGaps()\n resetForWrite()\n }\n\n override fun toString(): String {\n return \"Buffer($readRemaining used, $writeRemaining free, ${startGap + endGap} reserved of $capacity)\"\n }\n\n public companion object {\n /**\n * Number of bytes usually reserved in the end of chunk\n * when several instances of [io.ktor.utils.io.core.internal.ChunkBuffer] are connected into a chain (usually inside of [ByteReadPacket]\n * or [BytePacketBuilder])\n */\n @DangerousInternalIoApi\n public const val ReservedSize: Int = 8\n\n /**\n * The empty buffer singleton: it has zero capacity for read and write.\n */\n @Suppress(\"DEPRECATION\")\n public val Empty: Buffer get() = IoBuffer.Empty\n }\n}\n\n/**\n * @return `true` if there are available bytes to be read\n */\npublic inline fun Buffer.canRead(): Boolean = writePosition > readPosition\n\n/**\n * @return `true` if there is free room to for write\n */\npublic inline fun Buffer.canWrite(): Boolean = limit > writePosition\n\n/**\n * Apply [block] of code with buffer's memory providing read range indices. The returned value of [block] lambda should\n * return number of bytes to be marked as consumed.\n * No read/write functions on this buffer should be called inside of [block] otherwise an undefined behaviour may occur\n * including data damage.\n */\n@DangerousInternalIoApi\npublic inline fun Buffer.read(block: (memory: Memory, start: Int, endExclusive: Int) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val rc = block(memory, readPosition, writePosition)\n discardExact(rc)\n return rc\n}\n\n/**\n * Apply [block] of code with buffer's memory providing write range indices. The returned value of [block] lambda should\n * return number of bytes were written.\n * o read/write functions on this buffer should be called inside of [block] otherwise an undefined behaviour may occur\n * including data damage.\n */\n@DangerousInternalIoApi\npublic inline fun Buffer.write(block: (memory: Memory, start: Int, endExclusive: Int) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val rc = block(memory, writePosition, limit)\n commitWritten(rc)\n return rc\n}\n\ninternal fun discardFailed(count: Int, readRemaining: Int): Nothing {\n throw EOFException(\"Unable to discard $count bytes: only $readRemaining available for reading\")\n}\n\ninternal fun commitWrittenFailed(count: Int, writeRemaining: Int): Nothing {\n throw EOFException(\"Unable to discard $count bytes: only $writeRemaining available for writing\")\n}\n\ninternal fun rewindFailed(count: Int, rewindRemaining: Int): Nothing {\n throw IllegalArgumentException(\"Unable to rewind $count bytes: only $rewindRemaining could be rewinded\")\n}\n\ninternal fun Buffer.startGapReservationFailedDueToLimit(startGap: Int): Nothing {\n if (startGap > capacity) {\n throw IllegalArgumentException(\"Start gap $startGap is bigger than the capacity $capacity\")\n }\n\n throw IllegalStateException(\n \"Unable to reserve $startGap start gap: there are already $endGap bytes reserved in the end\"\n )\n}\n\ninternal fun Buffer.startGapReservationFailed(startGap: Int): Nothing {\n throw IllegalStateException(\n \"Unable to reserve $startGap start gap: \" +\n \"there are already $readRemaining content bytes starting at offset $readPosition\"\n )\n}\n\ninternal fun Buffer.endGapReservationFailedDueToCapacity(endGap: Int) {\n throw IllegalArgumentException(\"End gap $endGap is too big: capacity is $capacity\")\n}\n\ninternal fun Buffer.endGapReservationFailedDueToStartGap(endGap: Int) {\n throw IllegalArgumentException(\n \"End gap $endGap is too big: there are already $startGap bytes reserved in the beginning\"\n )\n}\n\ninternal fun Buffer.endGapReservationFailedDueToContent(endGap: Int) {\n throw IllegalArgumentException(\n \"Unable to reserve end gap $endGap:\" +\n \" there are already $readRemaining content bytes at offset $readPosition\"\n )\n}\n\ninternal fun Buffer.restoreStartGap(size: Int) {\n releaseStartGap(readPosition - size)\n}\n\n@ExperimentalIoApi\npublic class InsufficientSpaceException(message: String = \"Not enough free space\") : Exception(message) {\n public constructor(\n size: Int,\n availableSpace: Int\n ) : this(\"Not enough free space to write $size bytes, available $availableSpace bytes.\")\n\n public constructor(\n name: String,\n size: Int,\n availableSpace: Int\n ) : this(\"Not enough free space to write $name of $size bytes, available $availableSpace bytes.\")\n\n public constructor(\n size: Long,\n availableSpace: Long\n ) : this(\"Not enough free space to write $size bytes, available $availableSpace bytes.\")\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\nimport io.ktor.utils.io.core.internal.*\nimport org.khronos.webgl.*\nimport kotlin.require\n\n/**\n * Represents a linear range of bytes.\n */\npublic actual class Memory @DangerousInternalIoApi constructor(public val view: DataView) {\n /**\n * Size of memory range in bytes.\n */\n public actual inline val size: Long get() = view.byteLength.toLong()\n\n /**\n * Size of memory range in bytes represented as signed 32bit integer\n * @throws IllegalStateException when size doesn't fit into a signed 32bit integer\n */\n public actual inline val size32: Int get() = view.byteLength\n\n /**\n * Returns byte at [index] position.\n */\n public actual inline fun loadAt(index: Int): Byte {\n return view.getInt8(index)\n }\n\n /**\n * Returns byte at [index] position.\n */\n public actual inline fun loadAt(index: Long): Byte {\n return view.getInt8(index.toIntOrFail(\"index\"))\n }\n\n /**\n * Write [value] at the specified [index].\n */\n public actual inline fun storeAt(index: Int, value: Byte) {\n view.setInt8(index, value)\n }\n\n /**\n * Write [value] at the specified [index]\n */\n public actual inline fun storeAt(index: Long, value: Byte) {\n view.setInt8(index.toIntOrFail(\"index\"), value)\n }\n\n /**\n * Returns memory's subrange. On some platforms it could do range checks but it is not guaranteed to be safe.\n * It also could lead to memory allocations on some platforms.\n */\n public actual fun slice(offset: Int, length: Int): Memory {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n if (offset + length > size) {\n throw IndexOutOfBoundsException(\"offset + length > size: $offset + $length > $size\")\n }\n\n return Memory(\n DataView(\n view.buffer,\n view.byteOffset + offset,\n length\n )\n )\n }\n\n /**\n * Returns memory's subrange. On some platforms it could do range checks but it is not guaranteed to be safe.\n * It also could lead to memory allocations on some platforms.\n */\n public actual fun slice(offset: Long, length: Long): Memory {\n return slice(offset.toIntOrFail(\"offset\"), length.toIntOrFail(\"length\"))\n }\n\n /**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n * Copying bytes from a memory to itself is allowed.\n */\n public actual fun copyTo(\n destination: Memory,\n offset: Int,\n length: Int,\n destinationOffset: Int\n ) {\n val src = Int8Array(view.buffer, view.byteOffset + offset, length)\n val dst = Int8Array(destination.view.buffer, destination.view.byteOffset + destinationOffset, length)\n\n dst.set(src)\n }\n\n /**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n * Copying bytes from a memory to itself is allowed.\n */\n public actual fun copyTo(\n destination: Memory,\n offset: Long,\n length: Long,\n destinationOffset: Long\n ) {\n copyTo(\n destination,\n offset.toIntOrFail(\"offset\"),\n length.toIntOrFail(\"length\"),\n destinationOffset.toIntOrFail(\"destinationOffset\")\n )\n }\n\n public actual companion object {\n /**\n * Represents an empty memory region\n */\n public actual val Empty: Memory = Memory(DataView(ArrayBuffer(0)))\n }\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic actual fun Memory.copyTo(\n destination: ByteArray,\n offset: Int,\n length: Int,\n destinationOffset: Int\n) {\n @Suppress(\"UnsafeCastFromDynamic\")\n val to: Int8Array = destination.asDynamic()\n\n val from = Int8Array(view.buffer, view.byteOffset + offset, length)\n\n to.set(from, destinationOffset)\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic actual fun Memory.copyTo(\n destination: ByteArray,\n offset: Long,\n length: Int,\n destinationOffset: Int\n) {\n copyTo(destination, offset.toIntOrFail(\"offset\"), length, destinationOffset)\n}\n\n/**\n * Fill memory range starting at the specified [offset] with [value] repeated [count] times.\n */\npublic actual fun Memory.fill(offset: Int, count: Int, value: Byte) {\n for (index in offset until offset + count) {\n this[index] = value\n }\n}\n\n/**\n * Fill memory range starting at the specified [offset] with [value] repeated [count] times.\n */\npublic actual fun Memory.fill(offset: Long, count: Long, value: Byte) {\n fill(offset.toIntOrFail(\"offset\"), count.toIntOrFail(\"count\"), value)\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic fun Memory.copyTo(destination: ArrayBuffer, offset: Int, length: Int, destinationOffset: Int) {\n @Suppress(\"UnsafeCastFromDynamic\")\n val to = Int8Array(destination, destinationOffset, length)\n val from = Int8Array(view.buffer, view.byteOffset + offset, length)\n\n to.set(from, 0)\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic fun Memory.copyTo(destination: ArrayBufferView, offset: Int, length: Int, destinationOffset: Int) {\n @Suppress(\"UnsafeCastFromDynamic\")\n val to = Int8Array(destination.buffer, destinationOffset + destination.byteOffset, length)\n val from = Int8Array(view.buffer, view.byteOffset + offset, length)\n\n to.set(from, 0)\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic fun ArrayBuffer.copyTo(destination: Memory, offset: Int, length: Int, destinationOffset: Int) {\n val from = Int8Array(this, offset, length)\n val to = Int8Array(destination.view.buffer, destination.view.byteOffset + destinationOffset, length)\n\n to.set(from, 0)\n}\n\n/**\n * Copies bytes from this memory range from the specified [offset] and [length]\n * to the [destination] at [destinationOffset].\n */\npublic fun ArrayBufferView.copyTo(destination: Memory, offset: Int, length: Int, destinationOffset: Int) {\n buffer.copyTo(destination, offset + byteOffset, length, destinationOffset)\n}\n\ninternal val Memory.Int8ArrayView: Int8Array get() = Int8Array(view.buffer, view.byteOffset, view.byteLength)\n","package io.ktor.utils.io.core\n\nimport kotlin.contracts.*\n\n@PublishedApi\ninternal inline fun AbstractInput.read(n: Int = 1, block: (Buffer) -> Unit) {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val buffer = prepareRead(n) ?: prematureEndOfStream(n)\n val positionBefore = buffer.readPosition\n try {\n block(buffer)\n } finally {\n val positionAfter = buffer.readPosition\n if (positionAfter < positionBefore) {\n throw IllegalStateException(\"Buffer's position shouldn't be rewinded\")\n }\n if (positionAfter == buffer.writePosition) {\n ensureNext(buffer)\n } else {\n headPosition = positionAfter\n }\n }\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.Memory\nimport io.ktor.utils.io.bits.get\nimport io.ktor.utils.io.core.internal.*\nimport kotlin.jvm.JvmName\n\n/**\n * Usually shouldn't be implemented directly. Inherit [AbstractInput] instead.\n */\npublic expect interface Input : Closeable {\n @Deprecated(\n \"Not supported anymore. All operations are big endian by default. \" +\n \"Use readXXXLittleEndian or readXXX then X.reverseByteOrder() instead.\",\n level = DeprecationLevel.ERROR\n )\n public var byteOrder: ByteOrder\n\n /**\n * It is `true` when it is known that no more bytes will be available. When it is `false` then this means that\n * it is not known yet or there are available bytes.\n * Please note that `false` value doesn't guarantee that there are available bytes so `readByte()` may fail.\n */\n public val endOfInput: Boolean\n\n /**\n * Read the next upcoming byte\n * @throws EOFException if no more bytes available.\n */\n public fun readByte(): Byte\n\n /*\n * Returns next byte (unsigned) or `-1` if no more bytes available\n */\n public fun tryPeek(): Int\n\n /**\n * Try to copy at least [min] but up to [max] bytes to the specified [destination] buffer from this input\n * skipping [offset] bytes. If there are not enough bytes available to provide [min] bytes after skipping [offset]\n * bytes then it will trigger the underlying source reading first and after that will\n * simply copy available bytes even if EOF encountered so [min] is not a requirement but a desired number of bytes.\n * It is safe to specify [max] greater than the destination free space.\n * `min` shouldn't be bigger than the [destination] free space.\n * This function could trigger the underlying source reading that may lead to blocking I/O.\n * It is allowed to specify too big [offset] so in this case this function will always return `0` after prefetching\n * all underlying bytes but note that it may lead to significant memory consumption.\n * This function usually copy more bytes than [min] (unless `max = min`) but it is not guaranteed.\n * When `0` is returned with `offset = 0` then it makes sense to check [endOfInput].\n *\n * @param destination to write bytes\n * @param offset to skip input\n * @param min bytes to be copied, shouldn't be greater than the buffer free space. Could be `0`.\n * @param max bytes to be copied even if there are more bytes buffered, could be [Int.MAX_VALUE].\n * @return number of bytes copied to the [destination] possibly `0`\n */\n public fun peekTo(\n destination: Memory,\n destinationOffset: Long,\n offset: Long = 0,\n min: Long = 1,\n max: Long = Long.MAX_VALUE\n ): Long\n\n /**\n * Discard at most [n] bytes\n */\n public fun discard(n: Long): Long\n\n /**\n * Close input including the underlying source. All pending bytes will be discarded.\n * It is not recommended to invoke it with read operations in-progress concurrently.\n */\n override fun close()\n\n /**\n * Copy available bytes to the specified [buffer] but keep them available.\n * The underlying implementation could trigger\n * bytes population from the underlying source and block until any bytes available.\n *\n * Very similar to [readAvailable] but don't discard copied bytes.\n *\n * @return number of bytes were copied\n */\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\", \"DEPRECATION\")\n public fun peekTo(buffer: IoBuffer): Int {\n return peekTo(buffer)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readShort(): Short {\n return readShort()\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readInt(): Int {\n return readInt()\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readLong(): Long {\n return readLong()\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFloat(): Float {\n return readFloat()\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readDouble(): Double {\n return readDouble()\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: ByteArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: ShortArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: IntArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: LongArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: FloatArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: DoubleArray, offset: Int, length: Int) {\n readFully(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\", \"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: IoBuffer, length: Int) {\n readFully(dst, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: ByteArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: ShortArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: IntArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: LongArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: FloatArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: DoubleArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\", \"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: IoBuffer, length: Int): Int {\n return readAvailable(dst, length)\n }\n}\n\n/**\n * Discard all remaining bytes.\n * @return number of bytes were discarded\n */\npublic fun Input.discard(): Long {\n return discard(Long.MAX_VALUE)\n}\n\n/**\n * Discard exactly [n] bytes or fail if not enough bytes in the input to be discarded.\n */\npublic fun Input.discardExact(n: Long) {\n val discarded = discard(n)\n if (discarded != n) {\n throw IllegalStateException(\"Only $discarded bytes were discarded of $n requested\")\n }\n}\n\n/**\n * Discard exactly [n] bytes or fail if not enough bytes in the input to be discarded.\n */\npublic fun Input.discardExact(n: Int) {\n discardExact(n.toLong())\n}\n\n/**\n * Invoke [block] function for every chunk until end of input or [block] function return `false`\n * [block] function returns `true` to request more chunks or `false` to stop loop\n *\n * It is not guaranteed that every chunk will have fixed size but it will be never empty.\n * [block] function should never release provided buffer and should not write to it otherwise an undefined behaviour\n * could be observed\n */\n@DangerousInternalIoApi\npublic inline fun Input.takeWhile(block: (Buffer) -> Boolean) {\n var release = true\n var current = prepareReadFirstHead(1) ?: return\n\n try {\n do {\n if (!block(current)) {\n break\n }\n release = false\n val next = prepareReadNextHead(current) ?: break\n current = next\n release = true\n } while (true)\n } finally {\n if (release) {\n completeReadHead(current)\n }\n }\n}\n\n/**\n * Invoke [block] function for every chunk until end of input or [block] function return zero\n * [block] function returns number of bytes required to read next primitive and shouldn't require too many bytes at once\n * otherwise it could fail with an exception.\n * It is not guaranteed that every chunk will have fixed size but it will be always at least requested bytes length.\n * [block] function should never release provided buffer and should not write to it otherwise an undefined behaviour\n * could be observed\n */\n@DangerousInternalIoApi\npublic inline fun Input.takeWhileSize(initialSize: Int = 1, block: (Buffer) -> Int) {\n var release = true\n var current = prepareReadFirstHead(initialSize) ?: return\n var size = initialSize\n\n try {\n do {\n val before = current.readRemaining\n val after: Int\n\n if (before >= size) {\n try {\n size = block(current)\n } finally {\n after = current.readRemaining\n }\n } else {\n after = before\n }\n\n release = false\n\n val next = when {\n after == 0 -> prepareReadNextHead(current)\n after < size || current.endGap < Buffer.ReservedSize -> {\n completeReadHead(current)\n prepareReadFirstHead(size)\n }\n else -> current\n }\n\n if (next == null) {\n break\n }\n\n current = next\n release = true\n } while (size > 0)\n } finally {\n if (release) {\n completeReadHead(current)\n }\n }\n}\n\n@ExperimentalIoApi\npublic fun Input.peekCharUtf8(): Char {\n val rc = tryPeek()\n if (rc and 0x80 == 0) return rc.toChar()\n if (rc == -1) throw EOFException(\"Failed to peek a char: end of input\")\n\n return peekCharUtf8Impl(rc)\n}\n\n/**\n * For every byte from this input invokes [block] function giving it as parameter.\n */\n@ExperimentalIoApi\npublic inline fun Input.forEach(block: (Byte) -> Unit) {\n takeWhile { buffer ->\n buffer.forEach(block)\n true\n }\n}\n\nprivate fun Input.peekCharUtf8Impl(first: Int): Char {\n var rc = '?'\n var found = false\n\n takeWhileSize(byteCountUtf8(first)) {\n it.decodeUTF8 { ch ->\n found = true\n rc = ch\n false\n }\n }\n\n if (!found) {\n throw MalformedUTF8InputException(\"No UTF-8 character found\")\n }\n\n return rc\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.readAvailable(dst: IoBuffer, size: Int = dst.writeRemaining): Int = readAvailable(dst, size)\n\n@JvmName(\"readAvailable\")\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.readAvailableOld(dst: ByteArray, offset: Int = 0, length: Int = dst.size - offset): Int {\n return readAvailable(dst, offset, length)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readAvailable\")\npublic fun Input.readAvailableOld(dst: ShortArray, offset: Int = 0, length: Int = dst.size - offset): Int =\n readAvailable(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readAvailable\")\npublic fun Input.readAvailableOld(dst: IntArray, offset: Int = 0, length: Int = dst.size - offset): Int =\n readAvailable(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readAvailable\")\npublic fun Input.readAvailableOld(dst: LongArray, offset: Int = 0, length: Int = dst.size - offset): Int =\n readAvailable(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readAvailable\")\npublic fun Input.readAvailableOld(dst: FloatArray, offset: Int = 0, length: Int = dst.size - offset): Int =\n readAvailable(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readAvailable\")\npublic fun Input.readAvailableOld(dst: DoubleArray, offset: Int = 0, length: Int = dst.size - offset): Int =\n readAvailable(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.readFully(dst: IoBuffer, size: Int = dst.writeRemaining): Unit = readFully(dst, size)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: ByteArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: ShortArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: IntArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: LongArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: FloatArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n@JvmName(\"readFully\")\npublic fun Input.readFullyOld(dst: DoubleArray, offset: Int = 0, length: Int = dst.size - offset): Unit =\n readFully(dst, offset, length)\n","package io.ktor.utils.io.core.internal\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\n\ninternal inline fun Buffer.decodeASCII(consumer: (Char) -> Boolean): Boolean {\n read { memory, start, endExclusive ->\n for (index in start until endExclusive) {\n val codepoint = memory[index].toInt() and 0xff\n if (codepoint and 0x80 == 0x80 || !consumer(codepoint.toChar())) {\n discardExact(index - start)\n return false\n }\n }\n\n endExclusive - start\n }\n\n return true\n}\n\n@DangerousInternalIoApi\npublic suspend fun decodeUTF8LineLoopSuspend(\n out: Appendable,\n limit: Int,\n nextChunk: suspend (Int) -> AbstractInput?\n): Boolean {\n var decoded = 0\n var size = 1\n var cr = false\n var end = false\n\n while (!end && size != 0) {\n val chunk = nextChunk(size) ?: break\n chunk.takeWhileSize { buffer ->\n var skip = 0\n size = buffer.decodeUTF8 { ch ->\n when (ch) {\n '\\r' -> {\n if (cr) {\n end = true\n return@decodeUTF8 false\n }\n cr = true\n true\n }\n '\\n' -> {\n end = true\n skip = 1\n false\n }\n else -> {\n if (cr) {\n end = true\n return@decodeUTF8 false\n }\n\n if (decoded == limit) {\n throw BufferLimitExceededException(\"Too many characters in line: limit $limit exceeded\")\n }\n decoded++\n out.append(ch)\n true\n }\n }\n }\n\n if (skip > 0) {\n buffer.discardExact(skip)\n }\n\n size = if (end) 0 else size.coerceAtLeast(1)\n\n size\n }\n }\n\n if (size > 1) prematureEndOfStreamUtf(size)\n if (cr) {\n end = true\n }\n\n return decoded > 0 || end\n}\n\nprivate fun prematureEndOfStreamUtf(size: Int): Nothing =\n throw EOFException(\"Premature end of stream: expected $size bytes to decode UTF-8 char\")\n\n@DangerousInternalIoApi\ninternal fun byteCountUtf8(firstByte: Int): Int {\n var byteCount = 0\n var mask = 0x80\n var value = firstByte\n\n for (i in 1..6) {\n if (value and mask != 0) {\n value = value and mask.inv()\n mask = mask shr 1\n byteCount++\n } else {\n break\n }\n }\n\n return byteCount\n}\n\n@Suppress(\"DEPRECATION\")\n@Deprecated(\"Binary compatibility\", level = DeprecationLevel.HIDDEN)\npublic inline fun IoBuffer.decodeUTF8(consumer: (Char) -> Boolean): Int {\n return (this as Buffer).decodeUTF8(consumer)\n}\n\n/**\n * Decodes all the bytes to utf8 applying every character on [consumer] until or consumer return `false`.\n * If a consumer returned false then a character will be pushed back (including all surrogates will be pushed back as well)\n * and [decodeUTF8] returns -1\n * @return number of bytes required to decode incomplete utf8 character or 0 if all bytes were processed\n * or -1 if consumer rejected loop\n */\n@DangerousInternalIoApi\npublic inline fun Buffer.decodeUTF8(consumer: (Char) -> Boolean): Int {\n var byteCount = 0\n var value = 0\n var lastByteCount = 0\n\n read { memory, start, endExclusive ->\n for (index in start until endExclusive) {\n val v = memory[index].toInt() and 0xff\n when {\n v and 0x80 == 0 -> {\n if (byteCount != 0) malformedByteCount(byteCount)\n if (!consumer(v.toChar())) {\n discardExact(index - start)\n return -1\n }\n }\n byteCount == 0 -> {\n // first unicode byte\n\n var mask = 0x80\n value = v\n\n for (i in 1..6) { // TODO do we support 6 bytes unicode?\n if (value and mask != 0) {\n value = value and mask.inv()\n mask = mask shr 1\n byteCount++\n } else {\n break\n }\n }\n\n lastByteCount = byteCount\n byteCount--\n\n if (lastByteCount > endExclusive - index) {\n discardExact(index - start)\n return lastByteCount\n }\n }\n else -> {\n // trailing unicode byte\n value = (value shl 6) or (v and 0x7f)\n byteCount--\n\n if (byteCount == 0) {\n if (isBmpCodePoint(value)) {\n if (!consumer(value.toChar())) {\n discardExact(index - start - lastByteCount + 1)\n return -1\n }\n } else if (!isValidCodePoint(value)) {\n malformedCodePoint(value)\n } else {\n if (!consumer(highSurrogate(value).toChar()) ||\n !consumer(lowSurrogate(value).toChar())\n ) {\n discardExact(index - start - lastByteCount + 1)\n return -1\n }\n }\n\n value = 0\n }\n }\n }\n }\n\n endExclusive - start\n }\n\n return 0\n}\n\n@Suppress(\"RedundantModalityModifier\")\ninternal class CharArraySequence(\n private val array: CharArray,\n private val offset: Int,\n final override val length: Int\n) : CharSequence {\n final override fun get(index: Int): Char {\n if (index >= length) {\n indexOutOfBounds(index)\n }\n return array[index + offset]\n }\n\n final override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {\n require(startIndex >= 0) { \"startIndex shouldn't be negative: $startIndex\" }\n require(startIndex <= length) { \"startIndex is too large: $startIndex > $length\" }\n require(startIndex + endIndex <= length) { \"endIndex is too large: $endIndex > $length\" }\n require(endIndex >= startIndex) { \"endIndex should be greater or equal to startIndex: $startIndex > $endIndex\" }\n\n return CharArraySequence(array, offset + startIndex, endIndex - startIndex)\n }\n\n private fun indexOutOfBounds(index: Int): Nothing {\n throw IndexOutOfBoundsException(\"String index out of bounds: $index > $length\")\n }\n}\n\n@Suppress(\"NOTHING_TO_INLINE\", \"EXPERIMENTAL_FEATURE_WARNING\")\ninternal inline class EncodeResult(val value: Int) {\n constructor(characters: UShort, bytes: UShort) : this(characters.toInt() shl 16 or bytes.toInt())\n\n inline val characters: UShort get() = value.highShort.toUShort()\n inline val bytes: UShort get() = value.lowShort.toUShort()\n\n inline operator fun component1(): UShort = characters\n inline operator fun component2(): UShort = bytes\n}\n\ninternal fun Memory.encodeUTF8(text: CharSequence, from: Int, to: Int, dstOffset: Int, dstLimit: Int): EncodeResult {\n // encode single-byte characters\n val lastCharIndex = minOf(to, from + UShort.MAX_VALUE.toInt())\n val resultLimit = dstLimit.coerceAtMost(UShort.MAX_VALUE.toInt())\n var resultPosition = dstOffset\n var index = from\n\n do {\n if (resultPosition >= resultLimit || index >= lastCharIndex) {\n return EncodeResult((index - from).toUShort(), (resultPosition - dstOffset).toUShort())\n }\n\n val character = text[index++].toInt() and 0xffff\n if (character and 0xff80 == 0) {\n storeAt(resultPosition++, character.toByte())\n } else {\n break\n }\n } while (true)\n\n index--\n return encodeUTF8Stage1(text, index, lastCharIndex, from, resultPosition, resultLimit, dstOffset)\n}\n\n/**\n * Encode UTF-8 multibytes characters when we for sure have enough free space\n */\nprivate fun Memory.encodeUTF8Stage1(\n text: CharSequence,\n index1: Int,\n lastCharIndex: Int,\n from: Int,\n resultPosition1: Int,\n resultLimit: Int,\n dstOffset: Int\n): EncodeResult {\n var index = index1\n var resultPosition: Int = resultPosition1\n val stage1Limit = resultLimit - 3\n\n do {\n val freeSpace = stage1Limit - resultPosition\n if (freeSpace <= 0 || index >= lastCharIndex) {\n break\n }\n\n val character = text[index++]\n val codepoint = when {\n character.isHighSurrogate() -> {\n if (index == lastCharIndex || !text[index].isLowSurrogate()) {\n 63\n } else {\n codePoint(character, text[index++])\n }\n }\n else -> character.toInt()\n }\n val size = putUtf8Char(resultPosition, codepoint)\n\n resultPosition += size\n } while (true)\n\n if (resultPosition == stage1Limit) {\n return encodeUTF8Stage2(text, index, lastCharIndex, from, resultPosition, resultLimit, dstOffset)\n }\n\n return EncodeResult((index - from).toUShort(), (resultPosition - dstOffset).toUShort())\n}\n\nprivate fun Memory.encodeUTF8Stage2(\n text: CharSequence,\n index1: Int,\n lastCharIndex: Int,\n from: Int,\n resultPosition1: Int,\n resultLimit: Int,\n dstOffset: Int\n): EncodeResult {\n var index = index1\n var resultPosition: Int = resultPosition1\n\n do {\n val freeSpace = resultLimit - resultPosition\n if (freeSpace <= 0 || index >= lastCharIndex) {\n break\n }\n\n val character = text[index++]\n val codepoint = when {\n !character.isHighSurrogate() -> character.toInt()\n else -> {\n if (index == lastCharIndex || !text[index].isLowSurrogate()) {\n 63\n } else {\n codePoint(character, text[index++])\n }\n }\n }\n if (charactersSize(codepoint) > freeSpace) {\n index--\n break\n }\n val size = putUtf8Char(resultPosition, codepoint)\n resultPosition += size\n } while (true)\n\n return EncodeResult((index - from).toUShort(), (resultPosition - dstOffset).toUShort())\n}\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun charactersSize(v: Int) = when {\n v in 1..0x7f -> 1\n v in 0x80..0x7ff -> 2\n v in 0x800..0xffff -> 3\n v in 0x10000..0x10ffff -> 4\n else -> malformedCodePoint(v)\n}\n\n// TODO optimize it, now we are simply do naive encoding here\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Memory.putUtf8Char(offset: Int, v: Int): Int = when {\n v in 0..0x7f -> {\n storeAt(offset, v.toByte())\n 1\n }\n v in 0x80..0x7ff -> {\n this[offset] = (0xc0 or ((v shr 6) and 0x1f)).toByte()\n this[offset + 1] = (0x80 or (v and 0x3f)).toByte()\n 2\n }\n v in 0x800..0xffff -> {\n this[offset] = (0xe0 or ((v shr 12) and 0x0f)).toByte()\n this[offset + 1] = (0x80 or ((v shr 6) and 0x3f)).toByte()\n this[offset + 2] = (0x80 or (v and 0x3f)).toByte()\n 3\n }\n v in 0x10000..0x10ffff -> {\n this[offset] = (0xf0 or ((v shr 18) and 0x07)).toByte() // 3 bits\n this[offset + 1] = (0x80 or ((v shr 12) and 0x3f)).toByte() // 6 bits\n this[offset + 2] = (0x80 or ((v shr 6) and 0x3f)).toByte() // 6 bits\n this[offset + 3] = (0x80 or (v and 0x3f)).toByte() // 6 bits\n 4\n }\n else -> malformedCodePoint(v)\n}\n\n@PublishedApi\ninternal fun malformedByteCount(byteCount: Int): Nothing =\n throw MalformedUTF8InputException(\"Expected $byteCount more character bytes\")\n\n@PublishedApi\ninternal fun malformedCodePoint(value: Int): Nothing =\n throw IllegalArgumentException(\"Malformed code-point $value found\")\n\nprivate const val MaxCodePoint = 0x10ffff\nprivate const val MinLowSurrogate = 0xdc00\nprivate const val MinHighSurrogate = 0xd800\nprivate const val MinSupplementary = 0x10000\nprivate const val HighSurrogateMagic = MinHighSurrogate - (MinSupplementary ushr 10)\n\n@PublishedApi\ninternal fun isBmpCodePoint(cp: Int): Boolean = cp ushr 16 == 0\n\n@PublishedApi\ninternal fun isValidCodePoint(codePoint: Int): Boolean = codePoint <= MaxCodePoint\n\n@PublishedApi\ninternal fun lowSurrogate(cp: Int): Int = (cp and 0x3ff) + MinLowSurrogate\n\n@PublishedApi\ninternal fun highSurrogate(cp: Int): Int = (cp ushr 10) + HighSurrogateMagic\n\ninternal fun codePoint(high: Char, low: Char): Int {\n// check(high.isHighSurrogate())\n// check(low.isLowSurrogate())\n\n val highValue = high.toInt() - HighSurrogateMagic\n val lowValue = low.toInt() - MinLowSurrogate\n\n return highValue shl 10 or lowValue\n}\n\npublic class MalformedUTF8InputException(message: String) : Exception(message)\n","@file:Suppress(\"LocalVariableName\", \"RedundantModalityModifier\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\n\n/**\n * The default [Output] implementation.\n * @see flush\n * @see closeDestination\n */\n@ExperimentalIoApi\npublic abstract class AbstractOutput\ninternal constructor(\n private val headerSizeHint: Int,\n protected val pool: ObjectPool<ChunkBuffer>\n) : Appendable, Output {\n public constructor(pool: ObjectPool<ChunkBuffer>) : this(0, pool)\n\n public constructor() : this(ChunkBuffer.Pool)\n\n /**\n * An implementation should write [source] to the destination exactly [length] bytes.\n * It should never capture the [source] instance\n * longer than this method execution since it may be disposed after return.\n */\n protected abstract fun flush(source: Memory, offset: Int, length: Int)\n\n /**\n * An implementation should only close the destination.\n */\n protected abstract fun closeDestination()\n\n private val state = AbstractOutputSharedState()\n\n private var _head: ChunkBuffer?\n get() = state.head\n set(value) {\n state.head = value\n }\n\n private var _tail: ChunkBuffer?\n get() = state.tail\n set(value) {\n state.tail = value\n }\n\n internal val head: ChunkBuffer\n get() = _head ?: ChunkBuffer.Empty\n\n @PublishedApi\n @Deprecated(\"Will be removed in future releases.\", level = DeprecationLevel.HIDDEN)\n internal val tail: ChunkBuffer\n get() {\n return prepareWriteHead(1)\n }\n\n @Deprecated(\"Will be removed. Override flush(buffer) properly.\", level = DeprecationLevel.ERROR)\n protected var currentTail: ChunkBuffer\n get() = prepareWriteHead(1)\n set(newValue) {\n appendChain(newValue)\n }\n\n internal var tailMemory: Memory\n get() = state.tailMemory\n set(value) {\n state.tailMemory = value\n }\n\n internal var tailPosition\n get() = state.tailPosition\n set(value) {\n state.tailPosition = value\n }\n\n internal var tailEndExclusive\n get() = state.tailEndExclusive\n private set(value) {\n state.tailEndExclusive = value\n }\n\n private var tailInitialPosition\n get() = state.tailInitialPosition\n set(value) {\n state.tailInitialPosition = value\n }\n\n /**\n * Number of bytes buffered in the chain except the tail chunk\n */\n private var chainedSize: Int\n get() = state.chainedSize\n set(value) {\n state.chainedSize = value\n }\n\n internal inline val tailRemaining: Int get() = tailEndExclusive - tailPosition\n\n /**\n * Number of bytes currently buffered (pending).\n */\n protected final var _size: Int\n get() = chainedSize + (tailPosition - tailInitialPosition)\n @Deprecated(\"There is no need to update/reset this value anymore.\")\n set(_) {\n }\n\n /**\n * Byte order (Endianness) to be used by future write functions calls on this builder instance. Doesn't affect any\n * previously written values.\n * @default [ByteOrder.BIG_ENDIAN]\n */\n @Deprecated(\n \"This is no longer supported. All operations are big endian by default. Use readXXXLittleEndian \" +\n \"to read primitives in little endian\",\n level = DeprecationLevel.ERROR\n )\n final override var byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN\n set(value) {\n field = value\n if (value != ByteOrder.BIG_ENDIAN) {\n throw IllegalArgumentException(\n \"Only BIG_ENDIAN is supported. Use corresponding functions to read/write\" +\n \"in the little endian\"\n )\n }\n }\n\n final override fun flush() {\n flushChain()\n }\n\n private fun flushChain() {\n val oldTail = stealAll() ?: return\n\n try {\n oldTail.forEachChunk { chunk ->\n flush(chunk.memory, chunk.readPosition, chunk.readRemaining)\n }\n } finally {\n oldTail.releaseAll(pool)\n }\n }\n\n /**\n * Detach all chunks and cleanup all internal state so builder could be reusable again\n * @return a chain of buffer views or `null` of it is empty\n */\n internal fun stealAll(): ChunkBuffer? {\n val head = this._head ?: return null\n\n _tail?.commitWrittenUntilIndex(tailPosition)\n\n this._head = null\n this._tail = null\n tailPosition = 0\n tailEndExclusive = 0\n tailInitialPosition = 0\n chainedSize = 0\n tailMemory = Memory.Empty\n\n return head\n }\n\n internal fun afterBytesStolen() {\n val head = head\n if (head !== ChunkBuffer.Empty) {\n check(head.next == null)\n head.resetForWrite()\n head.reserveStartGap(headerSizeHint)\n head.reserveEndGap(Buffer.ReservedSize)\n tailPosition = head.writePosition\n tailInitialPosition = tailPosition\n tailEndExclusive = head.limit\n }\n }\n\n internal final fun appendSingleChunk(buffer: ChunkBuffer) {\n check(buffer.next == null) { \"It should be a single buffer chunk.\" }\n appendChainImpl(buffer, buffer, 0)\n }\n\n internal final fun appendChain(head: ChunkBuffer) {\n val tail = head.findTail()\n val chainedSizeDelta = (head.remainingAll() - tail.readRemaining).toIntOrFail(\"total size increase\")\n appendChainImpl(head, tail, chainedSizeDelta)\n }\n\n private fun appendNewChunk(): ChunkBuffer {\n val new = pool.borrow()\n new.reserveEndGap(Buffer.ReservedSize)\n\n appendSingleChunk(new)\n\n return new\n }\n\n private final fun appendChainImpl(head: ChunkBuffer, newTail: ChunkBuffer, chainedSizeDelta: Int) {\n val _tail = _tail\n if (_tail == null) {\n _head = head\n chainedSize = 0\n } else {\n _tail.next = head\n val tailPosition = tailPosition\n _tail.commitWrittenUntilIndex(tailPosition)\n chainedSize += tailPosition - tailInitialPosition\n }\n\n this._tail = newTail\n chainedSize += chainedSizeDelta\n tailMemory = newTail.memory\n tailPosition = newTail.writePosition\n tailInitialPosition = newTail.readPosition\n tailEndExclusive = newTail.limit\n }\n\n final override fun writeByte(v: Byte) {\n val index = tailPosition\n if (index < tailEndExclusive) {\n tailPosition = index + 1\n tailMemory[index] = v\n return\n }\n\n return writeByteFallback(v)\n }\n\n private fun writeByteFallback(v: Byte) {\n appendNewChunk().writeByte(v)\n tailPosition++\n }\n\n /**\n * Should flush and close the destination\n */\n final override fun close() {\n try {\n flush()\n } finally {\n closeDestination() // TODO check what should be done here\n }\n }\n\n /**\n * Append single UTF-8 character\n */\n override fun append(c: Char): AbstractOutput {\n val tailPosition = tailPosition\n if (tailEndExclusive - tailPosition >= 3) {\n val size = tailMemory.putUtf8Char(tailPosition, c.toInt())\n this.tailPosition = tailPosition + size\n return this\n }\n\n appendCharFallback(c)\n return this\n }\n\n private fun appendCharFallback(c: Char) {\n write(3) { buffer ->\n val size = buffer.memory.putUtf8Char(buffer.writePosition, c.toInt())\n buffer.commitWritten(size)\n size\n }\n }\n\n override fun append(csq: CharSequence?): AbstractOutput {\n if (csq == null) {\n append(\"null\", 0, 4)\n } else {\n append(csq, 0, csq.length)\n }\n return this\n }\n\n override fun append(csq: CharSequence?, start: Int, end: Int): AbstractOutput {\n if (csq == null) {\n return append(\"null\", start, end)\n }\n\n writeText(csq, start, end, Charsets.UTF_8)\n\n return this\n }\n\n /**\n * Writes another packet to the end. Please note that the instance [p] gets consumed so you don't need to release it\n */\n public fun writePacket(p: ByteReadPacket) {\n val foreignStolen = p.stealAll()\n if (foreignStolen == null) {\n p.release()\n return\n }\n\n val _tail = _tail\n if (_tail == null) {\n appendChain(foreignStolen)\n return\n }\n\n writePacketMerging(_tail, foreignStolen, p.pool)\n }\n\n /**\n * Write chunk buffer to current [Output]. Assuming that chunk buffer is from current pool.\n */\n internal fun writeChunkBuffer(chunkBuffer: ChunkBuffer) {\n val _tail = _tail\n if (_tail == null) {\n appendChain(chunkBuffer)\n return\n }\n\n writePacketMerging(_tail, chunkBuffer, pool)\n }\n\n private fun writePacketMerging(tail: ChunkBuffer, foreignStolen: ChunkBuffer, pool: ObjectPool<ChunkBuffer>) {\n tail.commitWrittenUntilIndex(tailPosition)\n\n val lastSize = tail.readRemaining\n val nextSize = foreignStolen.readRemaining\n\n // at first we evaluate if it is reasonable to merge chunks\n val maxCopySize = PACKET_MAX_COPY_SIZE\n val appendSize = if (nextSize < maxCopySize && nextSize <= (tail.endGap + tail.writeRemaining)) {\n nextSize\n } else -1\n\n val prependSize =\n if (lastSize < maxCopySize && lastSize <= foreignStolen.startGap && foreignStolen.isExclusivelyOwned()) {\n lastSize\n } else -1\n\n if (appendSize == -1 && prependSize == -1) {\n // simply enqueue if there is no reason to merge\n appendChain(foreignStolen)\n } else if (prependSize == -1 || appendSize <= prependSize) {\n // do append\n tail.writeBufferAppend(foreignStolen, tail.writeRemaining + tail.endGap)\n afterHeadWrite()\n foreignStolen.cleanNext()?.let { next ->\n appendChain(next)\n }\n\n foreignStolen.release(pool)\n } else if (appendSize == -1 || prependSize < appendSize) {\n writePacketSlowPrepend(foreignStolen, tail)\n } else {\n throw IllegalStateException(\"prep = $prependSize, app = $appendSize\")\n }\n }\n\n /**\n * Do prepend current [tail] to the beginning of [foreignStolen].\n */\n private fun writePacketSlowPrepend(foreignStolen: ChunkBuffer, tail: ChunkBuffer) {\n foreignStolen.writeBufferPrepend(tail)\n\n val _head = _head ?: error(\"head should't be null since it is already handled in the fast-path\")\n if (_head === tail) {\n this._head = foreignStolen\n } else {\n // we need to fix next reference of the previous chunk before the tail\n // we have to traverse from the beginning to find it\n var pre = _head\n while (true) {\n val next = pre.next!!\n if (next === tail) break\n pre = next\n }\n\n pre.next = foreignStolen\n }\n\n tail.release(pool)\n\n this._tail = foreignStolen.findTail()\n }\n\n /**\n * Write exact [n] bytes from packet to the builder\n */\n public fun writePacket(p: ByteReadPacket, n: Int) {\n var remaining = n\n\n while (remaining > 0) {\n val headRemaining = p.headRemaining\n if (headRemaining <= remaining) {\n remaining -= headRemaining\n appendSingleChunk(p.steal() ?: throw EOFException(\"Unexpected end of packet\"))\n } else {\n p.read { view ->\n writeFully(view, remaining)\n }\n break\n }\n }\n }\n\n /**\n * Write exact [n] bytes from packet to the builder\n */\n public fun writePacket(p: ByteReadPacket, n: Long) {\n var remaining = n\n\n while (remaining > 0L) {\n val headRemaining = p.headRemaining.toLong()\n if (headRemaining <= remaining) {\n remaining -= headRemaining\n appendSingleChunk(p.steal() ?: throw EOFException(\"Unexpected end of packet\"))\n } else {\n p.read { view ->\n writeFully(view, remaining.toInt())\n }\n break\n }\n }\n }\n\n override fun append(csq: CharArray, start: Int, end: Int): Appendable {\n writeText(csq, start, end, Charsets.UTF_8)\n return this\n }\n\n private inline fun appendCharsTemplate(\n start: Int,\n end: Int,\n block: Buffer.(index: Int) -> Int\n ): Int {\n var idx = start\n if (idx >= end) return idx\n idx = prepareWriteHead(1).block(idx)\n afterHeadWrite()\n\n while (idx < end) {\n idx = appendNewChunk().block(idx)\n afterHeadWrite()\n }\n\n return idx\n }\n\n @Deprecated(\"Use writeText instead\", ReplaceWith(\"writeText(s)\"))\n public fun writeStringUtf8(s: String) {\n writeText(s)\n }\n\n @Deprecated(\"Use writeText instead\", ReplaceWith(\"this.writeText(cs)\"))\n public fun writeStringUtf8(cs: CharSequence) {\n writeText(cs)\n }\n\n @Suppress(\"NOTHING_TO_INLINE\")\n private inline fun Buffer.putUtf8Char(v: Int) = when {\n v in 1..0x7f -> {\n writeByte(v.toByte())\n 1\n }\n v > 0x7ff -> {\n writeExact(3, \"3 bytes character\") { memory, offset ->\n memory[offset] = (0xe0 or ((v shr 12) and 0x0f)).toByte()\n memory[offset + 1] = (0x80 or ((v shr 6) and 0x3f)).toByte()\n memory[offset + 2] = (0x80 or (v and 0x3f)).toByte()\n }\n 3\n }\n else -> {\n writeExact(2, \"2 bytes character\") { memory, offset ->\n memory[offset] = (0xc0 or ((v shr 6) and 0x1f)).toByte()\n memory[offset + 1] = (0x80 or (v and 0x3f)).toByte()\n }\n 2\n }\n }\n\n /**\n * Release any resources that the builder holds. Builder shouldn't be used after release\n */\n public final fun release() {\n close()\n }\n\n @DangerousInternalIoApi\n public fun prepareWriteHead(n: Int): ChunkBuffer {\n if (tailRemaining >= n) {\n _tail?.let {\n it.commitWrittenUntilIndex(tailPosition)\n return it\n }\n }\n return appendNewChunk()\n }\n\n @DangerousInternalIoApi\n public fun afterHeadWrite() {\n _tail?.let { tailPosition = it.writePosition }\n }\n\n @PublishedApi\n internal inline fun write(size: Int, block: (Buffer) -> Int): Int {\n val buffer = prepareWriteHead(size)\n try {\n val result = block(buffer)\n check(result >= 0) { \"The returned value shouldn't be negative\" }\n\n return result\n } finally {\n afterHeadWrite()\n }\n }\n\n @PublishedApi\n @Deprecated(\"There is no need to do that anymore.\", level = DeprecationLevel.HIDDEN)\n internal fun addSize(n: Int) {\n check(n >= 0) { \"It should be non-negative size increment: $n\" }\n check(n <= tailRemaining) { \"Unable to mark more bytes than available: $n > $tailRemaining\" }\n\n // For binary compatibility we need to update pointers\n tailPosition += n\n }\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n internal open fun last(buffer: IoBuffer) {\n appendSingleChunk(buffer as ChunkBuffer)\n }\n\n @Suppress(\"DEPRECATION\")\n @Deprecated(\n \"Use appendNewChunk instead\",\n replaceWith = ReplaceWith(\"appendNewChunk()\"),\n level = DeprecationLevel.HIDDEN\n )\n public fun appendNewBuffer(): IoBuffer = appendNewChunk() as IoBuffer\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public open fun reset() {\n }\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport kotlin.contracts.*\n\n/**\n * For every byte from this buffer invokes [block] function giving it as parameter.\n */\n@ExperimentalIoApi\npublic inline fun Buffer.forEach(block: (Byte) -> Unit) {\n read { memory, start, endExclusive ->\n for (index in start until endExclusive) {\n block(memory[index])\n }\n endExclusive - start\n }\n}\n\n/**\n * Read an unsigned byte or fail if no bytes available for reading.\n */\npublic fun Buffer.readUByte(): UByte = readByte().toUByte()\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readUByte(): UByte = (this as Buffer).readUByte()\n\n/**\n * Write an unsigned byte or fail if not enough space available for writing.\n */\npublic fun Buffer.writeUByte(value: UByte) {\n writeByte(value.toByte())\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic fun IoBuffer.writeUByte(value: UByte) {\n (this as Buffer).writeUByte(value)\n}\n\n/**\n * Read a short integer or fail if no bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readShort(): Short = readExact(2, \"short integer\") { memory, offset ->\n memory.loadShortAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readShort(): Short = (this as Buffer).readShort()\n\n/**\n * Read an unsigned short integer or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readUShort(): UShort = readExact(2, \"short unsigned integer\") { memory, offset ->\n memory.loadUShortAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readUShort(): UShort = (this as Buffer).readUShort()\n\n/**\n * Read an integer or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readInt(): Int = readExact(4, \"regular integer\") { memory, offset ->\n memory.loadIntAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readInt(): Int = (this as Buffer).readInt()\n\n/**\n * Read an unsigned integer or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readUInt(): UInt = readExact(4, \"regular unsigned integer\") { memory, offset ->\n memory.loadUIntAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readUInt(): UInt = (this as Buffer).readUInt()\n\n/**\n * Read a long integer or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readLong(): Long = readExact(8, \"long integer\") { memory, offset ->\n memory.loadLongAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readLong(): Long = (this as Buffer).readLong()\n\n/**\n * Read an unsigned long integer or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readULong(): ULong = readExact(8, \"long unsigned integer\") { memory, offset ->\n memory.loadULongAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readULong(): ULong = (this as Buffer).readULong()\n\n/**\n * Read a floating point number or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readFloat(): Float = readExact(4, \"floating point number\") { memory, offset ->\n memory.loadFloatAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readFloat(): Float = (this as Buffer).readFloat()\n\n/**\n * Read a floating point number or fail if not enough bytes available for reading.\n * The numeric value is decoded in the network order (Big Endian).\n */\npublic fun Buffer.readDouble(): Double = readExact(8, \"long floating point number\") { memory, offset ->\n memory.loadDoubleAt(offset)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readDouble(): Double = (this as Buffer).readDouble()\n\n/**\n * Write a short integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeShort(value: Short): Unit = writeExact(2, \"short integer\") { memory, offset ->\n memory.storeShortAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeShort(value: Short): Unit = (this as Buffer).writeShort(value)\n\n/**\n * Write an unsigned short integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeUShort(value: UShort): Unit =\n writeExact(2, \"short unsigned integer\") { memory, offset ->\n memory.storeUShortAt(offset, value)\n }\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeUShort(value: UShort): Unit = (this as Buffer).writeUShort(value)\n\n/**\n * Write an integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeInt(value: Int): Unit = writeExact(4, \"regular integer\") { memory, offset ->\n memory.storeIntAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeInt(value: Int): Unit = (this as Buffer).writeInt(value)\n\n/**\n * Write an unsigned integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeUInt(value: UInt): Unit = writeExact(4, \"regular unsigned integer\") { memory, offset ->\n memory.storeUIntAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeUInt(value: UInt): Unit = (this as Buffer).writeUInt(value)\n\n/**\n * Write a long integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeLong(value: Long): Unit = writeExact(8, \"long integer\") { memory, offset ->\n memory.storeLongAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeLong(value: Long): Unit = (this as Buffer).writeLong(value)\n\n/**\n * Write an unsigned long integer or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeULong(value: ULong): Unit = writeExact(8, \"long unsigned integer\") { memory, offset ->\n memory.storeULongAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeULong(value: ULong): Unit = (this as Buffer).writeULong(value)\n\n/**\n * Write a floating point number or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeFloat(value: Float): Unit = writeExact(4, \"floating point number\") { memory, offset ->\n memory.storeFloatAt(offset, value)\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeFloat(value: Float): Unit = (this as Buffer).writeFloat(value)\n\n/**\n * Write a floating point number or fail if not enough space available for writing.\n * The numeric value is encoded in the network order (Big Endian).\n */\npublic fun Buffer.writeDouble(value: Double): Unit =\n writeExact(8, \"long floating point number\") { memory, offset ->\n memory.storeDoubleAt(offset, value)\n }\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\npublic inline fun IoBuffer.writeDouble(value: Double): Unit = (this as Buffer).writeDouble(value)\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n */\npublic fun Buffer.readFully(destination: ByteArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length, \"byte array\") { memory, srcOffset ->\n memory.loadByteArray(srcOffset, destination, offset, length)\n }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\npublic inline fun IoBuffer.readFully(destination: ByteArray, offset: Int = 0, length: Int = destination.size - offset) {\n (this as Buffer).readFully(destination, offset, length)\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n */\npublic fun Buffer.readFully(destination: UByteArray, offset: Int = 0, length: Int = destination.size - offset) {\n readFully(destination.asByteArray(), offset, length)\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] bytes.\n * If less than [length] bytes available then less bytes will be copied and the corresponding number\n * will be returned as result.\n * @return number of bytes copied to the [destination] or `-1` if the buffer is empty\n */\npublic fun Buffer.readAvailable(destination: ByteArray, offset: Int = 0, length: Int = destination.size - offset): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Input instead.\")\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\npublic inline fun IoBuffer.readAvailable(\n destination: ByteArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n return (this as Buffer).readAvailable(destination, offset, length)\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] bytes.\n * If less than [length] bytes available then less bytes will be copied and the corresponding number\n * will be returned as result.\n * @return number of bytes copied to the [destination] or `-1` if the buffer is empty\n */\npublic fun Buffer.readAvailable(\n destination: UByteArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n return readAvailable(destination.asByteArray(), offset, length)\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified bytes [length].\n */\npublic fun Buffer.writeFully(source: ByteArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length, \"byte array\") { memory, dstOffset ->\n memory.storeByteArray(dstOffset, source, offset, length)\n }\n}\n\n@Deprecated(\"IoBuffer is deprecated. Use Memory or Output instead.\")\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\", \"DEPRECATION\")\npublic inline fun IoBuffer.writeFully(source: ByteArray, offset: Int = 0, length: Int = source.size - offset) {\n (this as Buffer).writeFully(source, offset, length)\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified bytes [length].\n */\npublic fun Buffer.writeFully(source: UByteArray, offset: Int = 0, length: Int = source.size - offset) {\n writeFully(source.asByteArray(), offset, length)\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: ShortArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length * 2, \"short integers array\") { memory, srcOffset ->\n memory.loadShortArray(srcOffset, destination, offset, length)\n }\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: UShortArray, offset: Int = 0, length: Int = destination.size - offset) {\n readFully(destination.asShortArray(), offset, length)\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(\n destination: ShortArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length / 2, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(\n destination: UShortArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n return readAvailable(destination.asShortArray(), offset, length)\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: ShortArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length * 2, \"short integers array\") { memory, dstOffset ->\n memory.storeShortArray(dstOffset, source, offset, length)\n }\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: UShortArray, offset: Int = 0, length: Int = source.size - offset) {\n writeFully(source.asShortArray(), offset, length)\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: IntArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length * 4, \"integers array\") { memory, srcOffset ->\n memory.loadIntArray(srcOffset, destination, offset, length)\n }\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: UIntArray, offset: Int = 0, length: Int = destination.size - offset) {\n readFully(destination.asIntArray(), offset, length)\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(destination: IntArray, offset: Int = 0, length: Int = destination.size - offset): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length / 4, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(destination: UIntArray, offset: Int = 0, length: Int = destination.size - offset): Int {\n return readAvailable(destination.asIntArray(), offset, length)\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: IntArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length * 4, \"integers array\") { memory, dstOffset ->\n memory.storeIntArray(dstOffset, source, offset, length)\n }\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: UIntArray, offset: Int = 0, length: Int = source.size - offset) {\n writeFully(source.asIntArray(), offset, length)\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: LongArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length * 8, \"long integers array\") { memory, srcOffset ->\n memory.loadLongArray(srcOffset, destination, offset, length)\n }\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: ULongArray, offset: Int = 0, length: Int = destination.size - offset) {\n readFully(destination.asLongArray(), offset, length)\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(destination: LongArray, offset: Int = 0, length: Int = destination.size - offset): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length / 8, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(\n destination: ULongArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n return readAvailable(destination.asLongArray(), offset, length)\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: LongArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length * 8, \"long integers array\") { memory, dstOffset ->\n memory.storeLongArray(dstOffset, source, offset, length)\n }\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: ULongArray, offset: Int = 0, length: Int = source.size - offset) {\n writeFully(source.asLongArray(), offset, length)\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: FloatArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length * 4, \"floating point numbers array\") { memory, srcOffset ->\n memory.loadFloatArray(srcOffset, destination, offset, length)\n }\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(\n destination: FloatArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length / 4, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: FloatArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length * 4, \"floating point numbers array\") { memory, dstOffset ->\n memory.storeFloatArray(dstOffset, source, offset, length)\n }\n}\n\n/**\n * Read from this buffer to the [destination] array to [offset] and [length] bytes.\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.readFully(destination: DoubleArray, offset: Int = 0, length: Int = destination.size - offset) {\n readExact(length * 8, \"floating point numbers array\") { memory, srcOffset ->\n memory.loadDoubleArray(srcOffset, destination, offset, length)\n }\n}\n\n/**\n * Read available for read bytes to the [destination] array range starting at array [offset] and [length] elements.\n * If less than [length] elements available then less elements will be copied and the corresponding number\n * will be returned as result (possibly zero).\n *\n * @return number of elements copied to the [destination] or `-1` if the buffer is empty,\n * `0` - not enough bytes for at least an element\n */\npublic fun Buffer.readAvailable(\n destination: DoubleArray,\n offset: Int = 0,\n length: Int = destination.size - offset\n): Int {\n require(offset >= 0) { \"offset shouldn't be negative: $offset\" }\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(offset + length <= destination.size) {\n \"offset + length should be less than the destination size: $offset\" +\n \" + $length > ${destination.size}\"\n }\n\n if (!canRead()) return -1\n val toBeRead = minOf(length / 8, readRemaining)\n readFully(destination, offset, toBeRead)\n return toBeRead\n}\n\n/**\n * Write the whole [source] array range staring at [offset] and having the specified items [length].\n * Numeric values are interpreted in the network byte order (Big Endian).\n */\npublic fun Buffer.writeFully(source: DoubleArray, offset: Int = 0, length: Int = source.size - offset) {\n writeExact(length * 8, \"floating point numbers array\") { memory, dstOffset ->\n memory.storeDoubleArray(dstOffset, source, offset, length)\n }\n}\n\n/**\n * Read at most [length] bytes from this buffer to the [dst] buffer.\n * @return number of bytes copied\n */\npublic fun Buffer.readFully(dst: Buffer, length: Int = dst.writeRemaining): Int {\n require(length >= 0)\n require(length <= dst.writeRemaining)\n\n readExact(length, \"buffer content\") { memory, offset ->\n memory.copyTo(dst.memory, offset, length, dst.writePosition)\n dst.commitWritten(length)\n }\n\n return length\n}\n\n/**\n * Read at most [length] available bytes to the [dst] buffer or `-1` if no bytes available for read.\n * @return number of bytes copied or `-1` if empty\n */\npublic fun Buffer.readAvailable(dst: Buffer, length: Int = dst.writeRemaining): Int {\n if (!canRead()) return -1\n\n val readSize = minOf(dst.writeRemaining, readRemaining, length)\n\n readExact(readSize, \"buffer content\") { memory, offset ->\n memory.copyTo(dst.memory, offset, readSize, dst.writePosition)\n dst.commitWritten(readSize)\n }\n\n return readSize\n}\n\n/**\n * Write all readable bytes from [src] to this buffer. Fails if not enough space available to write all bytes.\n */\npublic fun Buffer.writeFully(src: Buffer) {\n val length = src.readRemaining\n\n writeExact(length, \"buffer readable content\") { memory, offset ->\n src.memory.copyTo(memory, src.readPosition, length, offset)\n src.discardExact(length)\n }\n}\n\n/**\n * Write at most [length] readable bytes from [src] to this buffer.\n * Fails if not enough space available to write all bytes.\n */\npublic fun Buffer.writeFully(src: Buffer, length: Int) {\n require(length >= 0) { \"length shouldn't be negative: $length\" }\n require(length <= src.readRemaining) {\n \"length shouldn't be greater than the source read remaining: $length > ${src.readRemaining}\"\n }\n require(length <= writeRemaining) {\n \"length shouldn't be greater than the destination write remaining space: $length > $writeRemaining\"\n }\n\n writeExact(length, \"buffer readable content\") { memory, offset ->\n src.memory.copyTo(memory, src.readPosition, length, offset)\n src.discardExact(length)\n }\n}\n\n@PublishedApi\ninternal inline fun <R> Buffer.readExact(size: Int, name: String, block: (memory: Memory, offset: Int) -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n var value: R\n\n read { memory, start, endExclusive ->\n io.ktor.utils.io.core.internal.require(endExclusive - start >= size) {\n throw EOFException(\"Not enough bytes to read a $name of size $size.\")\n }\n value = block(memory, start)\n size\n }\n\n return value\n}\n\n@PublishedApi\ninternal inline fun Buffer.writeExact(size: Int, name: String, block: (memory: Memory, offset: Int) -> Unit) {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n write { memory, start, endExclusive ->\n val writeRemaining = endExclusive - start\n if (writeRemaining < size) {\n throw InsufficientSpaceException(name, size, writeRemaining)\n }\n block(memory, start)\n size\n }\n}\n","@file:Suppress(\"DeprecatedCallableAddReplaceWith\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.core.internal.require\nimport io.ktor.utils.io.pool.*\n\n/**\n * Write byte [value] repeated the specified [times].\n */\npublic fun Buffer.fill(times: Int, value: Byte) {\n require(times >= 0) { \"times shouldn't be negative: $times\" }\n require(times <= writeRemaining) {\n \"times shouldn't be greater than the write remaining space: $times > $writeRemaining\"\n }\n\n memory.fill(writePosition, times, value)\n commitWritten(times)\n}\n\n/**\n * Write unsigned byte [value] repeated the specified [times].\n */\npublic fun Buffer.fill(times: Int, value: UByte) {\n fill(times, value.toByte())\n}\n\n/**\n * Write byte [v] value repeated [n] times.\n */\n@Deprecated(\"Use fill with n with type Int\")\npublic fun Buffer.fill(n: Long, v: Byte) {\n fill(n.toIntOrFail(\"n\"), v)\n}\n\n/**\n * Push back [n] bytes: only possible if there were at least [n] bytes read before this operation.\n */\n@Deprecated(\"Use rewind instead\", ReplaceWith(\"rewind(n)\"))\npublic fun Buffer.pushBack(n: Int): Unit = rewind(n)\n\n@Deprecated(\"Use duplicate instead\", ReplaceWith(\"duplicate()\"))\npublic fun Buffer.makeView(): Buffer = duplicate()\n\n@Deprecated(\"Use duplicate instead\", ReplaceWith(\"duplicate()\"))\npublic fun ChunkBuffer.makeView(): ChunkBuffer = duplicate()\n\n@Deprecated(\"Does nothing.\")\npublic fun Buffer.flush() {\n}\n\ninternal fun Buffer.appendChars(csq: CharArray, start: Int, end: Int): Int {\n return appendChars(CharArraySequence(csq, 0, csq.size), start, end)\n}\n\ninternal fun Buffer.appendChars(csq: CharSequence, start: Int, end: Int): Int {\n var charactersWritten: Int\n\n write { dst, dstStart, dstEndExclusive ->\n val result = dst.encodeUTF8(csq, start, end, dstStart, dstEndExclusive)\n charactersWritten = result.characters.toInt()\n result.bytes.toInt()\n }\n\n return start + charactersWritten\n}\n\n@Deprecated(\"This is no longer supported. Use a packet builder to append characters instead.\")\npublic fun Buffer.append(c: Char): Buffer {\n write { memory, start, endExclusive ->\n val size = memory.putUtf8Char(start, c.toInt())\n when {\n size > endExclusive - start -> appendFailed(1)\n else -> size\n }\n }\n\n return this\n}\n\n@Deprecated(\"This is no longer supported. Use a packet builder to append characters instead.\")\npublic fun Buffer.append(csq: CharSequence?): Buffer {\n if (csq == null) {\n return append(\"null\")\n }\n\n return append(csq, 0, csq.length)\n}\n\n@Deprecated(\"This is no longer supported. Use a packet builder to append characters instead.\")\npublic fun Buffer.append(csq: CharSequence?, start: Int, end: Int): Buffer = apply {\n if (csq == null) {\n return append(\"null\", start, end)\n }\n\n if (appendChars(csq, start, end) != end) {\n appendFailed(end - start)\n }\n}\n\nprivate fun appendFailed(length: Int): Nothing {\n throw BufferLimitExceededException(\"Not enough free space available to write $length character(s).\")\n}\n\n@Deprecated(\"This is no longer supported. Use a packet builder to append characters instead.\")\npublic fun Buffer.append(csq: CharArray, start: Int, end: Int): Buffer {\n return append(CharArraySequence(csq, 0, csq.size), start, end)\n}\n\n@Deprecated(\"This is no longer supported. Read from a packet instead.\")\npublic fun Buffer.readText(\n decoder: CharsetDecoder,\n out: Appendable,\n lastBuffer: Boolean,\n max: Int = Int.MAX_VALUE\n): Int {\n return decoder.decodeBuffer(this, out, lastBuffer, max)\n}\n\n/**\n * releases buffer view and returns it to the [pool] if there are no more usages. Based on simple ref-counting so\n * it is very fragile.\n */\n@Suppress(\"DEPRECATION\")\npublic fun IoBuffer.release(pool: ObjectPool<IoBuffer>) {\n // TODO ???\n @Suppress(\"UNCHECKED_CAST\")\n (this as ChunkBuffer).release(pool as ObjectPool<ChunkBuffer>)\n}\n\n/**\n * Peek the next unsigned byte or return `-1` if no more bytes available for reading. No bytes will be marked\n * as consumed in any case.\n * @see [Buffer.tryPeekByte]\n */\n@Deprecated(\"Use tryPeekByte instead\", replaceWith = ReplaceWith(\"tryPeekByte()\"))\npublic fun Buffer.tryPeek(): Int = tryPeekByte()\n\npublic fun Buffer.readFully(dst: Array<Byte>, offset: Int = 0, length: Int = dst.size - offset) {\n read { memory, start, endExclusive ->\n if (endExclusive - start < length) {\n throw EOFException(\"Not enough bytes available to read $length bytes\")\n }\n\n for (index in 0 until length) {\n dst[index + offset] = memory[index + start]\n }\n\n length\n }\n}\n\n@Deprecated(\n \"This is no longer supported. All operations are big endian by default. Use readXXXLittleEndian \" +\n \"to read primitives in little endian\",\n level = DeprecationLevel.ERROR\n)\npublic var Buffer.byteOrder: ByteOrder\n get() = ByteOrder.BIG_ENDIAN\n set(newOrder) {\n if (newOrder != ByteOrder.BIG_ENDIAN) throw UnsupportedOperationException(\"Only BIG_ENDIAN is supported\")\n }\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.ChunkBuffer\nimport io.ktor.utils.io.pool.DefaultPool\nimport io.ktor.utils.io.pool.ObjectPool\nimport kotlin.native.concurrent.ThreadLocal\n\ninternal const val DEFAULT_BUFFER_SIZE: Int = 4096\n\n/**\n * Invoke [block] function with a temporary [Buffer] instance of the specified [size] in bytes.\n * The provided instance shouldn't be captured and used outside of the [block] otherwise an undefined behaviour\n * may occur including crash and/or data corruption.\n */\n@ExperimentalIoApi\npublic inline fun <R> withBuffer(size: Int, block: Buffer.() -> R): R {\n return with(Buffer(DefaultAllocator.alloc(size)), block)\n}\n\n/**\n * Invoke [block] function with a temporary [Buffer] instance taken from the specified [pool].\n * Depending on the pool it may be safe or unsafe to capture and use the provided buffer outside of the [block].\n * Usually it is always recommended to NOT capture an instance outside.\n */\n@ExperimentalIoApi\npublic inline fun <R> withBuffer(pool: ObjectPool<Buffer>, block: Buffer.() -> R): R {\n val instance = pool.borrow()\n return try {\n block(instance)\n } finally {\n pool.recycle(instance)\n }\n}\n\n/**\n * Invoke [block] function with a temporary [Buffer] instance taken from the specified [pool].\n * Depending on the pool it may be safe or unsafe to capture and use the provided buffer outside of the [block].\n * Usually it is always recommended to NOT capture an instance outside.\n * However since [ChunkBuffer] is reference counted, you can create a [Buffer.duplicate] (this is simply a view) and use\n * it outside of the [block] function but it is important to release the duplicate properly once not needed anymore\n * otherwise memory leak may occur on some platforms.\n */\ninternal inline fun <R> withChunkBuffer(pool: ObjectPool<ChunkBuffer>, block: ChunkBuffer.() -> R): R {\n val instance = pool.borrow()\n return try {\n block(instance)\n } finally {\n instance.release(pool)\n }\n}\n\n@ThreadLocal\n@Suppress(\"DEPRECATION\")\ninternal val DefaultChunkedBufferPool: ObjectPool<IoBuffer> = DefaultBufferPool()\n\n@Suppress(\"DEPRECATION\")\ninternal class DefaultBufferPool(\n private val bufferSize: Int = DEFAULT_BUFFER_SIZE,\n\n capacity: Int = 1000,\n private val allocator: Allocator = DefaultAllocator\n) : DefaultPool<IoBuffer>(capacity) {\n override fun produceInstance(): IoBuffer {\n return IoBuffer(allocator.alloc(bufferSize), null)\n }\n\n override fun disposeInstance(instance: IoBuffer) {\n allocator.free(instance.memory)\n super.disposeInstance(instance)\n instance.unlink()\n }\n\n override fun validateInstance(instance: IoBuffer) {\n super.validateInstance(instance)\n\n if (instance === IoBuffer.Empty) {\n error(\"IoBuffer.Empty couldn't be recycled\")\n }\n\n check(instance !== IoBuffer.Empty) { \"Empty instance couldn't be recycled\" }\n check(instance !== Buffer.Empty) { \"Empty instance couldn't be recycled\" }\n check(instance !== ChunkBuffer.Empty) { \"Empty instance couldn't be recycled\" }\n\n check(instance.referenceCount == 0) { \"Unable to clear buffer: it is still in use.\" }\n check(instance.next == null) { \"Recycled instance shouldn't be a part of a chain.\" }\n check(instance.origin == null) { \"Recycled instance shouldn't be a view or another buffer.\" }\n }\n\n override fun clearInstance(instance: IoBuffer): IoBuffer {\n return super.clearInstance(instance).apply {\n unpark()\n reset()\n }\n }\n}\n","package io.ktor.utils.io.bits\n\nimport io.ktor.utils.io.core.ExperimentalIoApi\n\n/**\n * Reverse number's byte order\n */\npublic expect fun Short.reverseByteOrder(): Short\n\n/**\n * Reverse number's byte order\n */\npublic expect fun Int.reverseByteOrder(): Int\n\n/**\n * Reverse number's byte order\n */\npublic expect fun Long.reverseByteOrder(): Long\n\n/**\n * Reverse number's byte order\n */\npublic expect fun Float.reverseByteOrder(): Float\n\n/**\n * Reverse number's byte order\n */\npublic expect fun Double.reverseByteOrder(): Double\n\n/**\n * Reverse number's byte order\n */\n@ExperimentalUnsignedTypes\npublic fun UShort.reverseByteOrder(): UShort = toShort().reverseByteOrder().toUShort()\n\n/**\n * Reverse number's byte order\n */\n@ExperimentalUnsignedTypes\npublic fun UInt.reverseByteOrder(): UInt = toInt().reverseByteOrder().toUInt()\n\n/**\n * Reverse number's byte order\n */\n@ExperimentalUnsignedTypes\npublic fun ULong.reverseByteOrder(): ULong = toLong().reverseByteOrder().toULong()\n\n@ExperimentalIoApi\npublic inline val Short.highByte: Byte get() = (toInt() ushr 8).toByte()\n\n@ExperimentalIoApi\npublic inline val Short.lowByte: Byte get() = (toInt() and 0xff).toByte()\n\n@ExperimentalIoApi\npublic inline val Int.highShort: Short get() = (this ushr 16).toShort()\n\n@ExperimentalIoApi\npublic inline val Int.lowShort: Short get() = (this and 0xffff).toShort()\n\n@ExperimentalIoApi\npublic inline val Long.highInt: Int get() = (this ushr 32).toInt()\n\n@ExperimentalIoApi\npublic inline val Long.lowInt: Int get() = (this and 0xffffffffL).toInt()\n","@file:Suppress(\"RedundantModalityModifier\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.core.internal.require\nimport io.ktor.utils.io.pool.*\nimport kotlin.Boolean\nimport kotlin.Char\nimport kotlin.CharSequence\nimport kotlin.Deprecated\nimport kotlin.DeprecationLevel\nimport kotlin.Int\nimport kotlin.PublishedApi\nimport kotlin.String\nimport kotlin.Suppress\nimport kotlin.jvm.*\n\n/**\n * A builder that provides ability to build byte packets with no knowledge of it's size.\n * Unlike Java's ByteArrayOutputStream it doesn't copy the whole content every time it's internal buffer overflows\n * but chunks buffers instead. Packet building via [build] function is O(1) operation and only does instantiate\n * a new [ByteReadPacket]. Once a byte packet has been built via [build] function call, the builder could be\n * reused again. You also can discard all written bytes via [reset] or [release]. Please note that an instance of\n * builder need to be terminated either via [build] function invocation or via [release] call otherwise it will\n * cause byte buffer leak so that may have performance impact.\n *\n * Byte packet builder is also an [Appendable] so it does append UTF-8 characters to a packet\n *\n * ```\n * buildPacket {\n * listOf(1,2,3).joinTo(this, separator = \",\")\n * }\n * ```\n */\npublic class BytePacketBuilder(private var headerSizeHint: Int = 0, pool: ObjectPool<ChunkBuffer>) :\n @Suppress(\"DEPRECATION_ERROR\")\n BytePacketBuilderPlatformBase(pool) {\n init {\n require(headerSizeHint >= 0) { \"shouldn't be negative: headerSizeHint = $headerSizeHint\" }\n }\n\n /**\n * Number of bytes written to the builder after the creation or the last reset.\n */\n public val size: Int\n get() = _size\n\n /**\n * If no bytes were written or the builder has been reset.\n */\n public val isEmpty: Boolean\n get() = _size == 0\n\n /**\n * If at least one byte was written after the creation or the last reset.\n */\n public val isNotEmpty: Boolean\n get() = _size > 0\n\n @PublishedApi\n internal val _pool: ObjectPool<ChunkBuffer>\n get() = pool\n\n /**\n * Does nothing for memory-backed output\n */\n final override fun closeDestination() {\n }\n\n /**\n * Does nothing for memory-backed output\n */\n final override fun flush(source: Memory, offset: Int, length: Int) {\n }\n\n override fun append(c: Char): BytePacketBuilder {\n return super.append(c) as BytePacketBuilder\n }\n\n override fun append(csq: CharSequence?): BytePacketBuilder {\n return super.append(csq) as BytePacketBuilder\n }\n\n override fun append(csq: CharSequence?, start: Int, end: Int): BytePacketBuilder {\n return super.append(csq, start, end) as BytePacketBuilder\n }\n\n @Suppress(\"DEPRECATION_ERROR\", \"UNUSED\")\n @Deprecated(\"Binary compatibility\", level = DeprecationLevel.HIDDEN)\n @JvmName(\"append\")\n public fun appendOld(c: Char): BytePacketBuilderBase = append(c)\n\n @Suppress(\"DEPRECATION_ERROR\", \"UNUSED\")\n @Deprecated(\"Binary compatibility\", level = DeprecationLevel.HIDDEN)\n @JvmName(\"append\")\n public fun appendOld(csq: CharSequence?): BytePacketBuilderBase = append(csq)\n\n @Suppress(\"DEPRECATION_ERROR\", \"UNUSED\")\n @Deprecated(\"Binary compatibility\", level = DeprecationLevel.HIDDEN)\n @JvmName(\"append\")\n public fun appendOld(csq: CharSequence?, start: Int, end: Int): BytePacketBuilderBase = append(csq, start, end)\n\n /**\n * Creates a temporary packet view of the packet being build without discarding any bytes from the builder.\n * This is similar to `build().copy()` except that the builder keeps already written bytes untouched.\n * A temporary view packet is passed as argument to [block] function and it shouldn't leak outside of this block\n * otherwise an unexpected behaviour may occur.\n */\n @Suppress(\"unused\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun <R> preview(block: (tmp: ByteReadPacket) -> R): R {\n return preview(block)\n }\n\n /**\n * Builds byte packet instance and resets builder's state to be able to build another one packet if needed\n */\n public fun build(): ByteReadPacket {\n val size = size\n val head = stealAll()\n\n return when (head) {\n null -> ByteReadPacket.Empty\n else -> ByteReadPacket(head, size.toLong(), pool)\n }\n }\n\n /**\n * Discard all written bytes and prepare to build another packet.\n */\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun reset() {\n release()\n }\n\n @PublishedApi\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"unused\")\n internal fun preview(): ByteReadPacket {\n return preview()\n }\n\n override fun toString(): String {\n return \"BytePacketBuilder($size bytes written)\"\n }\n}\n","@file:Suppress(\"RedundantModalityModifier\", \"FunctionName\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\n\n/**\n * Read-only immutable byte packet. Could be consumed only once however it does support [copy] that doesn't copy every byte\n * but creates a new view instead. Once packet created it should be either completely read (consumed) or released\n * via [release].\n */\npublic class ByteReadPacket internal constructor(\n head: ChunkBuffer,\n remaining: Long,\n pool: ObjectPool<ChunkBuffer>\n) :\n @Suppress(\"DEPRECATION_ERROR\")\n ByteReadPacketPlatformBase(head, remaining, pool),\n Input {\n public constructor(head: ChunkBuffer, pool: ObjectPool<ChunkBuffer>) : this(head, head.remainingAll(), pool)\n\n @Suppress(\"DEPRECATION\", \"UNUSED\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public constructor(head: IoBuffer, pool: ObjectPool<ChunkBuffer>) : this(head, head.remainingAll(), pool)\n\n init {\n markNoMoreChunksAvailable()\n }\n\n /**\n * Returns a copy of the packet. The original packet and the copy could be used concurrently. Both need to be\n * either completely consumed or released via [release]\n */\n public final fun copy(): ByteReadPacket = ByteReadPacket(head.copyAll(), remaining, pool)\n\n final override fun fill(): ChunkBuffer? = null\n\n final override fun fill(destination: Memory, offset: Int, length: Int): Int {\n return 0\n }\n\n final override fun closeSource() {\n }\n\n override fun toString(): String {\n return \"ByteReadPacket($remaining bytes remaining)\"\n }\n\n public companion object {\n public val Empty: ByteReadPacket = ByteReadPacket(ChunkBuffer.Empty, 0L, ChunkBuffer.EmptyPool)\n\n @DangerousInternalIoApi\n public val ReservedSize: Int\n get() = Buffer.ReservedSize\n }\n}\n\n@Suppress(\"DEPRECATION\")\n@DangerousInternalIoApi\n@Deprecated(\n \"Will be removed in future releases.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"AbstractInput\", \"io.ktor.utils.io.core.AbstractInput\")\n)\npublic abstract class ByteReadPacketPlatformBase protected constructor(\n head: ChunkBuffer,\n remaining: Long,\n pool: ObjectPool<ChunkBuffer>\n) : ByteReadPacketBase(head, remaining, pool) {\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public constructor(\n head: IoBuffer,\n remaining: Long,\n pool: ObjectPool<ChunkBuffer>\n ) : this(head as ChunkBuffer, remaining, pool)\n}\n\npublic expect fun ByteReadPacket(\n array: ByteArray,\n offset: Int = 0,\n length: Int = array.size,\n block: (ByteArray) -> Unit\n): ByteReadPacket\n\n@Suppress(\"NOTHING_TO_INLINE\")\npublic inline fun ByteReadPacket(array: ByteArray, offset: Int = 0, length: Int = array.size): ByteReadPacket {\n return ByteReadPacket(array, offset, length) {}\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readShort(): Short {\n return readPrimitive(2, { memory, index -> memory.loadShortAt(index) }, { readShortFallback() })\n}\n\nprivate fun Input.readShortFallback(): Short {\n return readPrimitiveFallback(2) { it.readShort() }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readInt(): Int {\n return readPrimitive(4, { memory, index -> memory.loadIntAt(index) }, { readIntFallback() })\n}\n\nprivate fun Input.readIntFallback(): Int {\n return readPrimitiveFallback(4) { it.readInt() }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readLong(): Long {\n return readPrimitive(8, { memory, index -> memory.loadLongAt(index) }, { readLongFallback() })\n}\n\nprivate fun Input.readLongFallback(): Long {\n return readPrimitiveFallback(8) { it.readLong() }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readFloat(): Float {\n return readPrimitive(4, { memory, index -> memory.loadFloatAt(index) }, { readFloatFallback() })\n}\n\npublic fun Input.readFloatFallback(): Float {\n return readPrimitiveFallback(4) { it.readFloat() }\n}\n\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic fun Input.readDouble(): Double {\n return readPrimitive(8, { memory, index -> memory.loadDoubleAt(index) }, { readDoubleFallback() })\n}\n\npublic fun Input.readDoubleFallback(): Double {\n return readPrimitiveFallback(8) { it.readDouble() }\n}\n\nprivate inline fun <R> Input.readPrimitive(size: Int, main: (Memory, Int) -> R, fallback: () -> R): R {\n if (this is AbstractInput && headRemaining > size) {\n val index = headPosition\n headPosition = index + size\n return main(headMemory, index)\n }\n\n return fallback()\n}\n\nprivate inline fun <R> Input.readPrimitiveFallback(size: Int, read: (Buffer) -> R): R {\n val head = prepareReadFirstHead(size) ?: prematureEndOfStream(size)\n val value = read(head)\n completeReadHead(head)\n return value\n}\n","@file:Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\n\npublic fun Output.writeShort(value: Short) {\n if (!writePrimitiveTemplate(2) { memory, index -> memory.storeShortAt(index, value) }) {\n writeShortFallback(value)\n }\n}\n\nprivate fun Output.writeShortFallback(value: Short) {\n if (!writePrimitiveFallbackTemplate(2) { it.writeShort(value) }) {\n writeByte(value.highByte)\n writeByte(value.lowByte)\n }\n}\n\npublic fun Output.writeInt(value: Int) {\n if (!writePrimitiveTemplate(4) { memory, index -> memory.storeIntAt(index, value) }) {\n writeIntFallback(value)\n }\n}\n\nprivate fun Output.writeIntFallback(value: Int) {\n if (!writePrimitiveFallbackTemplate(4) { it.writeInt(value) }) {\n writeIntByteByByte(value)\n }\n}\n\nprivate fun Output.writeIntByteByByte(value: Int) {\n value.highShort.let {\n writeByte(it.highByte)\n writeByte(it.lowByte)\n }\n value.lowShort.let {\n writeByte(it.highByte)\n writeByte(it.lowByte)\n }\n}\n\npublic fun Output.writeLong(value: Long) {\n if (!writePrimitiveTemplate(8) { memory, index -> memory.storeLongAt(index, value) }) {\n writeLongFallback(value)\n }\n}\n\nprivate fun Output.writeLongFallback(value: Long) {\n if (!writePrimitiveFallbackTemplate(8) { it.writeLong(value) }) {\n writeIntByteByByte(value.highInt)\n writeIntByteByByte(value.lowInt)\n }\n}\n\npublic fun Output.writeFloat(value: Float) {\n if (!writePrimitiveTemplate(4) { memory, index -> memory.storeFloatAt(index, value) }) {\n writeIntFallback(value.toRawBits())\n }\n}\n\npublic fun Output.writeDouble(value: Double) {\n if (!writePrimitiveTemplate(8) { memory, index -> memory.storeDoubleAt(index, value) }) {\n writeLongFallback(value.toRawBits())\n }\n}\n\nprivate inline fun Output.writePrimitiveTemplate(\n componentSize: Int,\n block: (Memory, index: Int) -> Unit\n): Boolean {\n if (this is AbstractOutput) {\n val index = tailPosition\n if (tailEndExclusive - index > componentSize) {\n tailPosition = index + componentSize\n block(tailMemory, index)\n return true\n }\n }\n\n return false\n}\n\nprivate inline fun Output.writePrimitiveFallbackTemplate(\n componentSize: Int,\n writeOperation: (Buffer) -> Unit\n): Boolean {\n if (this is AbstractOutput) {\n val tail = prepareWriteHead(componentSize)\n writeOperation(tail)\n afterHeadWrite()\n return true\n }\n\n return false\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.core.internal.*\nimport kotlin.contracts.*\n\n/**\n * Creates a temporary packet view of the packet being build without discarding any bytes from the builder.\n * This is similar to `build().copy()` except that the builder keeps already written bytes untouched.\n * A temporary view packet is passed as argument to [block] function and it shouldn't leak outside of this block\n * otherwise an unexpected behaviour may occur.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\npublic inline fun <R> BytePacketBuilder.preview(block: (tmp: ByteReadPacket) -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n val packet = preview()\n return try {\n block(packet)\n } finally {\n packet.release()\n }\n}\n\n@PublishedApi\ninternal fun BytePacketBuilder.preview(): ByteReadPacket {\n val head = head\n return when {\n head === ChunkBuffer.Empty -> ByteReadPacket.Empty\n else -> ByteReadPacket(head.copyAll(), _pool)\n }\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\n\n/**\n * Discards bytes until [delimiter] occurred\n * @return number of bytes discarded\n */\npublic fun Input.discardUntilDelimiter(delimiter: Byte): Long {\n var discardedTotal = 0L\n\n takeWhile { chunk ->\n val discarded = chunk.discardUntilDelimiterImpl(delimiter)\n discardedTotal += discarded\n discarded > 0 && !chunk.canRead()\n }\n\n return discardedTotal\n}\n\n/**\n * Discards bytes until of of the specified delimiters [delimiter1] or [delimiter2] occurred\n * @return number of bytes discarded\n */\npublic fun Input.discardUntilDelimiters(delimiter1: Byte, delimiter2: Byte): Long {\n var discardedTotal = 0L\n\n takeWhile { chunk ->\n val discarded = chunk.discardUntilDelimitersImpl(delimiter1, delimiter2)\n discardedTotal += discarded\n discarded > 0 && !chunk.canRead()\n }\n\n return discardedTotal\n}\n\n/**\n * Copies to [dst] array at [offset] at most [length] bytes or until the specified [delimiter] occurred.\n * @return number of bytes copied\n */\npublic fun Input.readUntilDelimiter(delimiter: Byte, dst: ByteArray, offset: Int = 0, length: Int = dst.size): Int {\n var currentOffset = offset\n var dstRemaining = length\n\n takeWhile { chunk ->\n val copied = chunk.readUntilDelimiterImpl(delimiter, dst, currentOffset, dstRemaining)\n currentOffset += copied\n dstRemaining -= copied\n dstRemaining > 0 && !chunk.canRead()\n }\n\n return currentOffset - offset\n}\n\n/**\n * Copies to [dst] array at [offset] at most [length] bytes or until one of the specified delimiters\n * [delimiter1] or [delimiter2] occurred.\n * @return number of bytes copied\n */\npublic fun Input.readUntilDelimiters(\n delimiter1: Byte,\n delimiter2: Byte,\n dst: ByteArray,\n offset: Int = 0,\n length: Int = dst.size\n): Int {\n if (delimiter1 == delimiter2) return readUntilDelimiter(delimiter1, dst, offset, length)\n\n var currentOffset = offset\n var dstRemaining = length\n\n takeWhile { chunk ->\n val copied = chunk.readUntilDelimitersImpl(delimiter1, delimiter2, dst, currentOffset, dstRemaining)\n currentOffset += copied\n dstRemaining -= copied\n !chunk.canRead() && dstRemaining > 0\n }\n\n return currentOffset - offset\n}\n\n/**\n * Copies to [dst] output until the specified [delimiter] occurred.\n * @return number of bytes copied\n */\npublic fun Input.readUntilDelimiter(delimiter: Byte, dst: Output): Long {\n var copiedTotal = 0L\n takeWhile { chunk ->\n val copied = chunk.readUntilDelimiterImpl(delimiter, dst)\n copiedTotal += copied\n !chunk.canRead()\n }\n\n return copiedTotal\n}\n\n/**\n * Copies to [dst] output until one of the specified delimiters\n * [delimiter1] or [delimiter2] occurred.\n * @return number of bytes copied\n */\npublic fun Input.readUntilDelimiters(delimiter1: Byte, delimiter2: Byte, dst: Output): Long {\n var copiedTotal = 0L\n\n takeWhile { chunk ->\n val copied = chunk.readUntilDelimitersImpl(delimiter1, delimiter2, dst)\n copiedTotal += copied\n !chunk.canRead()\n }\n\n return copiedTotal\n}\n\ninternal expect fun Buffer.discardUntilDelimiterImpl(delimiter: Byte): Int\n\ninternal fun discardUntilDelimiterImplMemory(buffer: Buffer, delimiter: Byte): Int {\n val start = buffer.readPosition\n var i = start\n val limit = buffer.writePosition\n val memory = buffer.memory\n\n while (i < limit) {\n if (memory[i] == delimiter) break\n i++\n }\n\n buffer.discardUntilIndex(i)\n return i - start\n}\n\ninternal expect fun Buffer.discardUntilDelimitersImpl(delimiter1: Byte, delimiter2: Byte): Int\n\ninternal fun discardUntilDelimitersImplMemory(buffer: Buffer, delimiter1: Byte, delimiter2: Byte): Int {\n val start = buffer.readPosition\n var i = start\n val limit = buffer.writePosition\n val memory = buffer.memory\n\n while (i < limit) {\n val v = memory[i]\n if (v == delimiter1 || v == delimiter2) break\n i++\n }\n\n buffer.discardUntilIndex(i)\n return i - start\n}\n\ninternal expect fun Buffer.readUntilDelimiterImpl(\n delimiter: Byte,\n dst: ByteArray,\n offset: Int,\n length: Int\n): Int\n\ninternal expect fun Buffer.readUntilDelimitersImpl(\n delimiter1: Byte,\n delimiter2: Byte,\n dst: ByteArray,\n offset: Int,\n length: Int\n): Int\n\ninternal expect fun Buffer.readUntilDelimiterImpl(\n delimiter: Byte,\n dst: Output\n): Int\n\ninternal expect fun Buffer.readUntilDelimitersImpl(\n delimiter1: Byte,\n delimiter2: Byte,\n dst: Output\n): Int\n\ninternal inline fun Buffer.copyUntil(predicate: (Byte) -> Boolean, dst: ByteArray, offset: Int, length: Int): Int {\n val readPosition = readPosition\n var end = minOf(writePosition, readPosition + length)\n val memory = memory\n for (index in readPosition until end) {\n if (predicate(memory.loadAt(index))) {\n end = index\n break\n }\n }\n\n val copySize = end - readPosition\n memory.loadByteArray(readPosition, dst, offset, copySize)\n return copySize\n}\n\ninternal inline fun Buffer.copyUntil(predicate: (Byte) -> Boolean, dst: Output): Int {\n var index = readPosition\n val end = writePosition\n val memory = memory\n do {\n if (index == end || predicate(memory.loadAt(index))) {\n break\n }\n index++\n } while (true)\n\n val size = index - readPosition\n dst.writeFully(this, size)\n return size\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.internal.*\n\n@Suppress(\"NOTHING_TO_INLINE\")\npublic inline fun String.toByteArray(charset: Charset = Charsets.UTF_8): ByteArray =\n charset.newEncoder().encodeToByteArray(this, 0, length)\n\n/**\n * Create an instance of [String] from the specified [bytes] range starting at [offset] and bytes [length]\n * interpreting characters in the specified [charset].\n */\n@Suppress(\"FunctionName\")\npublic expect fun String(\n bytes: ByteArray,\n offset: Int = 0,\n length: Int = bytes.size,\n charset: Charset = Charsets.UTF_8\n): String\n\n/**\n * Read a string line considering optionally specified [estimate] but up to optional [limit] characters length\n * (does fail once limit exceeded) or return `null` if the packet is empty\n */\npublic fun ByteReadPacket.readUTF8Line(estimate: Int = 16, limit: Int = Int.MAX_VALUE): String? {\n if (isEmpty) return null\n val sb = StringBuilder(estimate)\n return if (readUTF8LineTo(sb, limit)) sb.toString() else null\n}\n\n/**\n * Read a string line considering optionally specified [estimate] but up to optional [limit] characters length\n * (does fail once limit exceeded) or return `null` if the packet is empty\n */\npublic fun Input.readUTF8Line(estimate: Int = 16, limit: Int = Int.MAX_VALUE): String? {\n val sb = StringBuilder(estimate)\n return if (readUTF8LineTo(sb, limit)) sb.toString() else null\n}\n\n/**\n * Read UTF-8 line and append all line characters to [out] except line endings. Does support CR, LF and CR+LF\n * @return `true` if some characters were appended or line ending reached (empty line) or `false` if packet\n * if empty\n */\npublic fun Input.readUTF8LineTo(out: Appendable, limit: Int): Boolean {\n var decoded = 0\n var size = 1\n var cr = false\n var end = false\n\n takeWhileSize { buffer ->\n var skip = 0\n size = buffer.decodeUTF8 { ch ->\n when (ch) {\n '\\r' -> {\n if (cr) {\n end = true\n return@decodeUTF8 false\n }\n cr = true\n true\n }\n '\\n' -> {\n end = true\n skip = 1\n false\n }\n else -> {\n if (cr) {\n end = true\n return@decodeUTF8 false\n }\n\n if (decoded == limit) bufferLimitExceeded(limit)\n decoded++\n out.append(ch)\n true\n }\n }\n }\n\n if (skip > 0) {\n buffer.discardExact(skip)\n }\n\n if (end) 0 else size.coerceAtLeast(1)\n }\n\n if (size > 1) prematureEndOfStream(size)\n\n return decoded > 0 || !endOfInput\n}\n\n/**\n * Reads UTF-8 characters until one of the specified [delimiters] found, [limit] exceeded or end of stream encountered\n *\n * @throws BufferLimitExceededException\n * @returns a string of characters read before delimiter\n */\npublic fun Input.readUTF8UntilDelimiter(delimiters: String, limit: Int = Int.MAX_VALUE): String {\n return buildString {\n readUTF8UntilDelimiterTo(this, delimiters, limit)\n }\n}\n\n/**\n * Reads UTF-8 characters to [out] buffer until one of the specified [delimiters] found, [limit] exceeded\n * or end of stream encountered\n *\n * @throws BufferLimitExceededException\n * @returns number of characters copied (possibly zero)\n */\npublic fun Input.readUTF8UntilDelimiterTo(out: Appendable, delimiters: String, limit: Int = Int.MAX_VALUE): Int {\n var decoded = 0\n var delimiter = false\n\n takeWhile { buffer ->\n buffer.decodeASCII { ch ->\n if (ch in delimiters) {\n delimiter = true\n false\n } else {\n if (decoded == limit) bufferLimitExceeded(limit)\n decoded++\n out.append(ch)\n true\n }\n }\n }\n\n if (!delimiter) {\n decoded = readUTF8UntilDelimiterToSlowUtf8(out, delimiters, limit, decoded)\n }\n\n return decoded\n}\n\n/**\n * Reads UTF-8 characters to [out] buffer until one of the specified [delimiters] found, [limit] exceeded\n * or end of stream encountered\n *\n * @throws BufferLimitExceededException\n * @returns number of characters copied (possibly zero)\n */\npublic fun Input.readUTF8UntilDelimiterTo(out: Output, delimiters: String, limit: Int = Int.MAX_VALUE): Int {\n val delimitersCount = delimiters.length\n if (delimitersCount == 1 && delimiters[0].isAsciiChar()) {\n return readUntilDelimiter(delimiters[0].toByte(), out).toInt()\n } else if (delimitersCount == 2 && delimiters[0].isAsciiChar() && delimiters[1].isAsciiChar()) {\n return readUntilDelimiters(delimiters[0].toByte(), delimiters[1].toByte(), out).toInt()\n }\n\n return readUTFUntilDelimiterToSlowAscii(delimiters, limit, out)\n}\n\n@Suppress(\"unused\", \"DEPRECATION_ERROR\")\n@Deprecated(\"Use Output version instead\", level = DeprecationLevel.HIDDEN)\npublic fun Input.readUTF8UntilDelimiterTo(\n out: BytePacketBuilderBase,\n delimiters: String,\n limit: Int = Int.MAX_VALUE\n): Int {\n return readUTF8UntilDelimiterTo(out as Output, delimiters, limit)\n}\n\n/**\n * Read exactly [n] bytes (consumes all remaining if [n] is not specified but up to [Int.MAX_VALUE] bytes).\n * Does fail if not enough bytes remaining.\n */\npublic fun ByteReadPacket.readBytes(\n n: Int = remaining.coerceAtMostMaxIntOrFail(\"Unable to convert to a ByteArray: packet is too big\")\n): ByteArray = when {\n n != 0 -> ByteArray(n).also { readFully(it, 0, n) }\n else -> EmptyByteArray\n}\n\n/**\n * Reads exactly [n] bytes from the input or fails if not enough bytes available.\n */\npublic fun Input.readBytes(n: Int): ByteArray = readBytesOf(n, n)\n\n/**\n * Reads all remaining bytes from the input\n */\npublic fun Input.readBytes(): ByteArray = readBytesOf()\n\n/**\n * Reads at least [min] but no more than [max] bytes from the input to a new byte array\n * @throws EOFException if not enough bytes available to get [min] bytes\n */\npublic fun Input.readBytesOf(min: Int = 0, max: Int = Int.MAX_VALUE): ByteArray = if (min == max && min == 0) {\n EmptyByteArray\n} else if (min == max) {\n ByteArray(min).also { readFully(it, 0, min) }\n} else {\n var array = ByteArray(max.toLong().coerceAtMost(sizeEstimate()).coerceAtLeast(min.toLong()).toInt())\n var size = 0\n\n while (size < max) {\n val partSize = minOf(max, array.size) - size\n val rc = readAvailable(array, size, partSize)\n if (rc <= 0) break\n size += rc\n if (array.size == size) {\n array = array.copyOf(size * 2)\n }\n }\n\n if (size < min) {\n throw EOFException(\"Not enough bytes available to read $min bytes: ${min - size} more required\")\n }\n\n if (size == array.size) array else array.copyOf(size)\n}\n\n/**\n * Reads at most [max] characters decoding bytes with specified [decoder]. Extra character bytes will remain unconsumed\n * @return number of characters copied to [out]\n */\n@Deprecated(\n \"Use CharsetDecoder.decode instead\",\n ReplaceWith(\"decoder.decode(this, out, max)\", \"io.ktor.utils.io.charsets.decode\"),\n level = DeprecationLevel.ERROR\n)\npublic fun Input.readText(out: Appendable, decoder: CharsetDecoder, max: Int = Int.MAX_VALUE): Int {\n return decoder.decode(this, out, max)\n}\n\n/**\n * Reads at most [max] characters decoding bytes with specified [charset]. Extra character bytes will remain unconsumed\n * @return number of characters copied to [out]\n */\npublic fun Input.readText(out: Appendable, charset: Charset = Charsets.UTF_8, max: Int = Int.MAX_VALUE): Int {\n return charset.newDecoder().decode(this, out, max)\n}\n\n/**\n * Reads at most [max] characters decoding bytes with specified [decoder]. Extra character bytes will remain unconsumed\n * @return a decoded string\n */\n@Deprecated(\n \"Use CharsetDecoder.decode instead\",\n ReplaceWith(\"decoder.decode(this, max)\", \"io.ktor.utils.io.charsets.decode\")\n)\npublic fun Input.readText(decoder: CharsetDecoder, max: Int = Int.MAX_VALUE): String {\n return decoder.decode(this, max)\n}\n\n/**\n * Reads at most [max] characters decoding bytes with specified [charset]. Extra character bytes will remain unconsumed\n * @return a decoded string\n */\npublic fun Input.readText(charset: Charset = Charsets.UTF_8, max: Int = Int.MAX_VALUE): String {\n return charset.newDecoder().decode(this, max)\n}\n\n/**\n * Reads at most [max] characters decoding bytes with specified [charset]. Extra character bytes will remain unconsumed\n * @return a decoded string\n */\npublic fun Buffer.readText(charset: Charset = Charsets.UTF_8, max: Int = Int.MAX_VALUE): String = buildString {\n charset.newDecoder().decodeBuffer(this@readText, this, true, max)\n}\n\n/**\n * Read exactly [n] characters interpreting bytes in the specified [charset].\n */\n@Deprecated(\n \"Use readTextExactCharacters instead.\",\n ReplaceWith(\"readTextExactCharacters(n, charset)\")\n)\npublic fun Input.readTextExact(charset: Charset = Charsets.UTF_8, n: Int): String {\n return readTextExactCharacters(n, charset)\n}\n\n/**\n * Read exactly [charactersCount] characters interpreting bytes in the specified [charset].\n */\npublic fun Input.readTextExactCharacters(charactersCount: Int, charset: Charset = Charsets.UTF_8): String {\n val s = readText(charset, charactersCount)\n if (s.length < charactersCount) {\n prematureEndOfStreamToReadChars(charactersCount)\n }\n return s\n}\n\n/**\n * Read exactly the specified number of [bytes]\n * interpreting bytes in the specified [charset] (optional, UTF-8 by default).\n */\n@Deprecated(\"Parameters order is changed.\", ReplaceWith(\"readTextExactBytes(bytes, charset)\"))\npublic fun Input.readTextExactBytes(charset: Charset = Charsets.UTF_8, bytes: Int): String {\n return readTextExactBytes(bytes, charset)\n}\n\n/**\n * Read exactly [bytesCount] interpreting bytes in the specified [charset] (optional, UTF-8 by default).\n */\npublic fun Input.readTextExactBytes(bytesCount: Int, charset: Charset = Charsets.UTF_8): String {\n return charset.newDecoder().decodeExactBytes(this, inputLength = bytesCount)\n}\n\n/**\n * Writes [text] characters in range \\[[fromIndex] .. [toIndex]) with the specified [encoder]\n */\n@Deprecated(\n \"Use the implementation with Charset instead\",\n ReplaceWith(\n \"writeText(text, fromIndex, toIndex, encoder.charset)\",\n \"io.ktor.utils.io.charsets.charset\"\n ),\n level = DeprecationLevel.ERROR\n)\npublic fun Output.writeText(\n text: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = text.length,\n encoder: CharsetEncoder\n) {\n encoder.encodeToImpl(this, text, fromIndex, toIndex)\n}\n\n/**\n * Writes [text] characters in range \\[[fromIndex] .. [toIndex]) with the specified [charset]\n */\npublic fun Output.writeText(\n text: CharSequence,\n fromIndex: Int = 0,\n toIndex: Int = text.length,\n charset: Charset = Charsets.UTF_8\n) {\n if (charset === Charsets.UTF_8) {\n return writeTextUtf8(text, fromIndex, toIndex)\n }\n\n charset.newEncoder().encodeToImpl(this, text, fromIndex, toIndex)\n}\n\n/**\n * Writes [text] characters in range \\[[fromIndex] .. [toIndex]) with the specified [charset]\n */\npublic fun Output.writeText(\n text: CharArray,\n fromIndex: Int = 0,\n toIndex: Int = text.size,\n charset: Charset = Charsets.UTF_8\n) {\n if (charset === Charsets.UTF_8) {\n return writeTextUtf8(CharArraySequence(text, 0, text.size), fromIndex, toIndex)\n }\n\n charset.newEncoder().encode(text, fromIndex, toIndex, this)\n}\n\nprivate fun Output.writeTextUtf8(text: CharSequence, fromIndex: Int, toIndex: Int) {\n var index = fromIndex\n writeWhileSize(1) { buffer ->\n val memory = buffer.memory\n val dstOffset = buffer.writePosition\n val dstLimit = buffer.limit\n\n val (characters, bytes) = memory.encodeUTF8(text, index, toIndex, dstOffset, dstLimit)\n\n index += characters.toInt()\n buffer.commitWritten(bytes.toInt())\n\n when {\n characters.toInt() == 0 && index < toIndex -> 8\n index < toIndex -> 1\n else -> 0\n }\n }\n}\n\ninternal expect fun String.getCharsInternal(dst: CharArray, dstOffset: Int)\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun Char.isAsciiChar() = toInt() <= 0x7f\n\nprivate fun Input.readUTFUntilDelimiterToSlowAscii(delimiters: String, limit: Int, out: Output): Int {\n var decoded = 0\n var delimiter = false\n\n takeWhile { buffer ->\n val before = buffer.readRemaining\n\n val rc = buffer.decodeASCII { ch ->\n if (ch in delimiters) {\n delimiter = true\n false\n } else {\n if (decoded == limit) bufferLimitExceeded(limit)\n decoded++\n true\n }\n }\n\n val delta = before - buffer.readRemaining\n if (delta > 0) {\n buffer.rewind(delta)\n out.writeFully(buffer, delta)\n }\n\n rc\n }\n\n if (!delimiter && !endOfInput) {\n decoded = readUTF8UntilDelimiterToSlowUtf8(out, delimiters, limit, decoded)\n }\n\n return decoded\n}\n\nprivate fun Input.readUTF8UntilDelimiterToSlowUtf8(\n out: Output,\n delimiters: String,\n limit: Int,\n decoded0: Int\n): Int {\n var decoded = decoded0\n var size = 1\n\n takeWhileSize { buffer ->\n val before = buffer.readRemaining\n\n size = buffer.decodeUTF8 { ch ->\n if (ch in delimiters) {\n false\n } else {\n if (decoded == limit) {\n bufferLimitExceeded(limit)\n }\n decoded++\n true\n }\n }\n\n val delta = before - buffer.readRemaining\n if (delta > 0) {\n buffer.rewind(delta)\n out.writeFully(buffer, delta)\n }\n\n size = if (size == -1) 0 else size.coerceAtLeast(1)\n size\n }\n\n if (size > 1) prematureEndOfStream(size)\n\n return decoded\n}\n\nprivate fun Input.readUTF8UntilDelimiterToSlowUtf8(\n out: Appendable,\n delimiters: String,\n limit: Int,\n decoded0: Int\n): Int {\n var decoded = decoded0\n var size = 1\n\n takeWhileSize { buffer ->\n size = buffer.decodeUTF8 { ch ->\n if (ch in delimiters) {\n false\n } else {\n if (decoded == limit) {\n bufferLimitExceeded(limit)\n }\n decoded++\n out.append(ch)\n true\n }\n }\n\n size = if (size == -1) 0 else size.coerceAtLeast(1)\n size\n }\n\n if (size > 1) prematureEndOfStream(size)\n\n return decoded\n}\n\nprivate fun bufferLimitExceeded(limit: Int): Nothing {\n throw BufferLimitExceededException(\"Too many characters before delimiter: limit $limit exceeded\")\n}\n\n@PublishedApi\ninternal fun prematureEndOfStream(size: Int): Nothing =\n throw EOFException(\"Premature end of stream: expected $size bytes\")\n\n@PublishedApi\ninternal fun prematureEndOfStream(size: Long): Nothing =\n throw EOFException(\"Premature end of stream: expected $size bytes\")\n\nprivate fun prematureEndOfStreamToReadChars(charactersCount: Int): Nothing =\n throw EOFException(\"Not enough input bytes to read $charactersCount characters.\")\n","package io.ktor.utils.io.core.internal\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.bits.DefaultAllocator\nimport io.ktor.utils.io.concurrent.*\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.pool.*\nimport kotlinx.atomicfu.*\n\n@DangerousInternalIoApi\npublic open class ChunkBuffer internal constructor(memory: Memory, origin: ChunkBuffer?) : Buffer(memory) {\n init {\n require(origin !== this) { \"A chunk couldn't be a view of itself.\" }\n }\n\n private val nextRef: AtomicRef<ChunkBuffer?> = atomic(null)\n private val refCount = atomic(1)\n\n /**\n * Reference to an origin buffer view this was copied from\n */\n public var origin: ChunkBuffer? by shared(origin)\n private set\n\n /**\n * Reference to next buffer view. Useful to chain multiple views.\n * @see appendNext\n * @see cleanNext\n */\n public var next: ChunkBuffer? get() = nextRef.value\n set(newValue) {\n if (newValue == null) {\n cleanNext()\n } else {\n appendNext(newValue)\n }\n }\n\n public val referenceCount: Int get() = refCount.value\n\n private fun appendNext(chunk: ChunkBuffer) {\n if (!nextRef.compareAndSet(null, chunk)) {\n throw IllegalStateException(\"This chunk has already a next chunk.\")\n }\n }\n\n public fun cleanNext(): ChunkBuffer? {\n return nextRef.getAndSet(null)\n }\n\n override fun duplicate(): ChunkBuffer = (origin ?: this).let { newOrigin ->\n newOrigin.acquire()\n ChunkBuffer(memory, newOrigin).also { copy ->\n duplicateTo(copy)\n }\n }\n\n public open fun release(pool: ObjectPool<ChunkBuffer>) {\n if (release()) {\n val origin = origin\n if (origin != null) {\n unlink()\n origin.release(pool)\n } else {\n pool.recycle(this)\n }\n }\n }\n\n internal fun unlink() {\n if (!refCount.compareAndSet(0, -1)) {\n throw IllegalStateException(\"Unable to unlink: buffer is in use.\")\n }\n\n cleanNext()\n origin = null\n }\n\n /**\n * Increase ref-count. May fail if already released.\n */\n internal fun acquire() {\n refCount.update { old ->\n if (old <= 0) throw IllegalStateException(\"Unable to acquire chunk: it is already released.\")\n old + 1\n }\n }\n\n /**\n * Invoked by a pool before return the instance to a user.\n */\n internal fun unpark() {\n refCount.update { old ->\n if (old < 0) {\n throw IllegalStateException(\"This instance is already disposed and couldn't be borrowed.\")\n }\n if (old > 0) {\n throw IllegalStateException(\"This instance is already in use but somehow appeared in the pool.\")\n }\n\n 1\n }\n }\n\n /**\n * Release ref-count.\n * @return `true` if the last usage was released\n */\n internal fun release(): Boolean {\n return refCount.updateAndGet { old ->\n if (old <= 0) throw IllegalStateException(\"Unable to release: it is already released.\")\n old - 1\n } == 0\n }\n\n final override fun reset() {\n require(origin == null) { \"Unable to reset buffer with origin\" }\n\n super.reset()\n @Suppress(\"DEPRECATION\")\n attachment = null\n nextRef.value = null\n }\n\n public companion object {\n public val Pool: ObjectPool<ChunkBuffer> = object : ObjectPool<ChunkBuffer> {\n override val capacity: Int\n get() = DefaultChunkedBufferPool.capacity\n\n override fun borrow(): ChunkBuffer {\n return DefaultChunkedBufferPool.borrow()\n }\n\n @Suppress(\"DEPRECATION\")\n override fun recycle(instance: ChunkBuffer) {\n if (instance !is IoBuffer) {\n throw IllegalArgumentException(\"Only IoBuffer instances can be recycled.\")\n }\n\n DefaultChunkedBufferPool.recycle(instance)\n }\n\n override fun dispose() {\n DefaultChunkedBufferPool.dispose()\n }\n }\n\n @Suppress(\"DEPRECATION\")\n public val Empty: ChunkBuffer get() = IoBuffer.Empty\n\n /**\n * A pool that always returns [ChunkBuffer.Empty]\n */\n public val EmptyPool: ObjectPool<ChunkBuffer> = object : ObjectPool<ChunkBuffer> {\n override val capacity: Int get() = 1\n\n override fun borrow() = Empty\n\n override fun recycle(instance: ChunkBuffer) {\n require(instance === ChunkBuffer.Empty) { \"Only ChunkBuffer.Empty instance could be recycled.\" }\n }\n\n override fun dispose() {\n }\n }\n\n @Suppress(\"DEPRECATION\")\n internal val NoPool: ObjectPool<ChunkBuffer> = object : NoPoolImpl<ChunkBuffer>() {\n override fun borrow(): ChunkBuffer {\n return IoBuffer(DefaultAllocator.alloc(DEFAULT_BUFFER_SIZE), null)\n }\n\n override fun recycle(instance: ChunkBuffer) {\n if (instance !is IoBuffer) {\n throw IllegalArgumentException(\"Only IoBuffer instances can be recycled.\")\n }\n\n DefaultAllocator.free(instance.memory)\n }\n }\n\n internal val NoPoolManuallyManaged: ObjectPool<ChunkBuffer> = object : NoPoolImpl<ChunkBuffer>() {\n override fun borrow(): ChunkBuffer {\n throw UnsupportedOperationException(\"This pool doesn't support borrow\")\n }\n\n override fun recycle(instance: ChunkBuffer) {\n // do nothing: manually managed objects should be disposed manually\n }\n }\n }\n}\n\n/**\n * @return `true` if and only if the are no buffer views that share the same actual buffer. This actually does\n * refcount and only work guaranteed if other views created/not created via [Buffer.duplicate] function.\n * One can instantiate multiple buffers with the same buffer and this function will return `true` in spite of\n * the fact that the buffer is actually shared.\n */\ninternal fun ChunkBuffer.isExclusivelyOwned(): Boolean = referenceCount == 1\n","@file:Suppress(\"KDocMissingDocumentation\")\n\npackage io.ktor.utils.io.core.internal\n\nimport io.ktor.utils.io.core.*\nimport kotlin.jvm.*\nimport kotlin.native.concurrent.*\n\n/**\n * API marked with this annotation is internal and extremely fragile and not intended to be used by library users.\n * Such API could be changed without notice including rename, removal and behaviour change.\n * Also using API marked with this annotation could cause data loss or any other damage.\n */\n@Suppress(\"DEPRECATION\")\n@RequiresOptIn(level = RequiresOptIn.Level.ERROR)\n@Experimental(level = Experimental.Level.ERROR)\npublic annotation class DangerousInternalIoApi\n\n@DangerousInternalIoApi\npublic fun ByteReadPacket.`$unsafeAppend$`(builder: BytePacketBuilder) {\n val builderHead = builder.stealAll() ?: return\n val builderSize = builder.size\n\n if (builderSize <= PACKET_MAX_COPY_SIZE && builderHead.next == null && tryWriteAppend(builderHead)) {\n builder.afterBytesStolen()\n return\n }\n\n append(builderHead)\n}\n\ninternal fun ByteReadPacket.unsafeAppend(builder: BytePacketBuilder): Int {\n val builderSize = builder.size\n val builderHead = builder.stealAll() ?: return 0\n\n if (builderSize <= PACKET_MAX_COPY_SIZE && builderHead.next == null && tryWriteAppend(builderHead)) {\n builder.afterBytesStolen()\n return builderSize\n }\n\n append(builderHead)\n return builderSize\n}\n\n@Suppress(\"DEPRECATION\", \"UNUSED\")\n@JvmName(\"prepareReadFirstHead\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.prepareReadFirstHeadOld(minSize: Int): IoBuffer? {\n return prepareReadFirstHead(minSize) as IoBuffer?\n}\n\n@DangerousInternalIoApi\npublic fun Input.prepareReadFirstHead(minSize: Int): ChunkBuffer? {\n if (this is AbstractInput) {\n return prepareReadHead(minSize)\n }\n if (this is ChunkBuffer) {\n return if (canRead()) this else null\n }\n\n return prepareReadHeadFallback(minSize)\n}\n\nprivate fun Input.prepareReadHeadFallback(minSize: Int): ChunkBuffer? {\n if (endOfInput) return null\n\n val buffer = ChunkBuffer.Pool.borrow()\n val copied = peekTo(\n buffer.memory,\n buffer.writePosition.toLong(),\n 0L,\n minSize.toLong(),\n buffer.writeRemaining.toLong()\n ).toInt()\n buffer.commitWritten(copied)\n\n if (copied < minSize) {\n prematureEndOfStream(minSize)\n }\n\n return buffer\n}\n\n@Suppress(\"UNUSED\", \"DEPRECATION\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.completeReadHead(current: IoBuffer) {\n completeReadHead(current)\n}\n\n@DangerousInternalIoApi\npublic fun Input.completeReadHead(current: ChunkBuffer) {\n if (current === this) {\n return\n }\n if (this is AbstractInput) {\n if (!current.canRead()) {\n ensureNext(current)\n } else if (current.endGap < Buffer.ReservedSize) {\n fixGapAfterRead(current)\n } else {\n headPosition = current.readPosition\n }\n return\n }\n\n completeReadHeadFallback(current)\n}\n\nprivate fun Input.completeReadHeadFallback(current: ChunkBuffer) {\n val discardAmount = current.capacity - current.writeRemaining - current.readRemaining\n discardExact(discardAmount)\n current.release(ChunkBuffer.Pool)\n}\n\n@Suppress(\"DEPRECATION\", \"UNUSED\")\n@JvmName(\"prepareReadNextHead\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Input.prepareReadNextHeadOld(current: IoBuffer): IoBuffer? {\n return prepareReadNextHead(current) as IoBuffer?\n}\n\n@DangerousInternalIoApi\npublic fun Input.prepareReadNextHead(current: ChunkBuffer): ChunkBuffer? {\n if (current === this) {\n return if (canRead()) this else null\n }\n if (this is AbstractInput) {\n return ensureNextHead(current)\n }\n\n return prepareNextReadHeadFallback(current)\n}\n\nprivate fun Input.prepareNextReadHeadFallback(current: ChunkBuffer): ChunkBuffer? {\n val discardAmount = current.capacity - current.writeRemaining - current.readRemaining\n discardExact(discardAmount)\n current.resetForWrite()\n\n if (endOfInput || peekTo(current) <= 0) {\n current.release(ChunkBuffer.Pool)\n return null\n }\n\n return current\n}\n\n@Suppress(\"DEPRECATION\", \"UNUSED\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Output.prepareWriteHead(capacity: Int, current: IoBuffer?): IoBuffer {\n return prepareWriteHead(capacity, current) as IoBuffer\n}\n\n@DangerousInternalIoApi\npublic fun Output.prepareWriteHead(capacity: Int, current: ChunkBuffer?): ChunkBuffer {\n if (this is AbstractOutput) {\n if (current != null) {\n afterHeadWrite()\n }\n return prepareWriteHead(capacity)\n }\n\n return prepareWriteHeadFallback(current)\n}\n\nprivate fun Output.prepareWriteHeadFallback(current: ChunkBuffer?): ChunkBuffer {\n if (current != null) {\n writeFully(current)\n current.resetForWrite()\n return current\n }\n\n return ChunkBuffer.Pool.borrow()\n}\n\n@Suppress(\"DEPRECATION\", \"UNUSED\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun Output.afterHeadWrite(current: IoBuffer) {\n return afterHeadWrite(current)\n}\n\n@DangerousInternalIoApi\npublic fun Output.afterHeadWrite(current: ChunkBuffer) {\n if (this is AbstractOutput) {\n return afterHeadWrite()\n }\n\n afterWriteHeadFallback(current)\n}\n\n@JvmField\n@SharedImmutable\ninternal val EmptyByteArray = ByteArray(0)\n\nprivate fun Output.afterWriteHeadFallback(current: ChunkBuffer) {\n writeFully(current)\n current.release(ChunkBuffer.Pool)\n}\n","package io.ktor.utils.io.errors\n\nimport io.ktor.utils.io.core.*\n\npublic expect open class IOException(message: String, cause: Throwable?) : Exception {\n public constructor(message: String)\n}\n\npublic expect open class EOFException(message: String) : IOException\n\n@Suppress(\"DeprecatedCallableAddReplaceWith\")\n@Deprecated(\"Not implemented.\", level = DeprecationLevel.ERROR)\npublic fun <R> TODO_ERROR(value: R): Nothing = TODO(\"Not implemented. Value is $value\")\n\n@Suppress(\"DeprecatedCallableAddReplaceWith\")\n@Deprecated(\"Not implemented.\", level = DeprecationLevel.ERROR)\npublic fun TODO_ERROR(): Nothing = TODO(\"Not implemented.\")\n\ninternal fun checkPeekTo(destination: Buffer, offset: Int, min: Int, max: Int) {\n io.ktor.utils.io.core.internal.require(offset >= 0) { \"offset shouldn't be negative: $offset.\" }\n io.ktor.utils.io.core.internal.require(min >= 0) { \"min shouldn't be negative: $min.\" }\n io.ktor.utils.io.core.internal.require(max >= min) { \"max should't be less than min: max = $max, min = $min.\" }\n io.ktor.utils.io.core.internal.require(min <= destination.writeRemaining) {\n \"Not enough free space in the destination buffer \" +\n \"to write the specified minimum number of bytes: min = $min, free = ${destination.writeRemaining}.\"\n }\n}\n\n@PublishedApi\ninternal fun incompatibleVersionError(): Nothing = throw Error(\n \"This API is no longer supported. \" +\n \"Please downgrade kotlinx-io or recompile your project/dependencies with new kotlinx-io.\"\n)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.internal\n\nimport io.ktor.utils.io.*\nimport kotlinx.atomicfu.*\nimport kotlinx.coroutines.*\n\n/**\n * Exclusive slot for waiting.\n * Only one waiter allowed.\n *\n * TODO: replace [Job] -> [Continuation] when all coroutines problems are fixed.\n */\ninternal class AwaitingSlot {\n private val suspension: AtomicRef<CompletableJob?> = atomic(null)\n\n init {\n makeShared()\n }\n\n /**\n * Wait for other [sleep] or resume.\n */\n public suspend fun sleep() {\n if (trySuspend()) {\n return\n }\n\n resume()\n }\n\n /**\n * Resume waiter.\n */\n public fun resume() {\n suspension.getAndSet(null)?.complete()\n }\n\n /**\n * Cancel waiter.\n */\n public fun cancel(cause: Throwable?) {\n val continuation = suspension.getAndSet(null) ?: return\n\n if (cause != null) {\n continuation.completeExceptionally(cause)\n } else {\n continuation.complete()\n }\n }\n\n private suspend fun trySuspend(): Boolean {\n var suspended = false\n\n val job = Job()\n if (suspension.compareAndSet(null, job)) {\n suspended = true\n job.join()\n }\n\n return suspended\n }\n}\n","package io.ktor.utils.io.internal\n\nimport io.ktor.utils.io.ByteChannelSequentialBase\nimport io.ktor.utils.io.close\nimport io.ktor.utils.io.core.internal.ChunkBuffer\n\ninternal suspend fun ByteChannelSequentialBase.joinToImpl(dst: ByteChannelSequentialBase, closeOnEnd: Boolean) {\n copyToSequentialImpl(dst, Long.MAX_VALUE)\n if (closeOnEnd) dst.close()\n}\n\n/**\n * Reads up to [limit] bytes from receiver channel and writes them to [dst] channel.\n * Closes [dst] channel if fails to read or write with cause exception.\n * @return a number of copied bytes\n */\ninternal suspend fun ByteChannelSequentialBase.copyToSequentialImpl(dst: ByteChannelSequentialBase, limit: Long): Long {\n require(this !== dst)\n if (closedCause != null) {\n dst.close(closedCause)\n return 0L\n }\n\n var remainingLimit = limit\n\n while (remainingLimit > 0) {\n if (!awaitInternalAtLeast1()) {\n break\n }\n val transferred = transferTo(dst, remainingLimit)\n\n val copied = if (transferred == 0L) {\n val tail = copyToTail(dst, remainingLimit)\n if (tail == 0L) {\n break\n }\n\n tail\n } else {\n if (dst.availableForWrite == 0) {\n dst.awaitAtLeastNBytesAvailableForWrite(1)\n }\n\n transferred\n }\n\n remainingLimit -= copied\n }\n\n return limit - remainingLimit\n}\n\nprivate suspend fun ByteChannelSequentialBase.copyToTail(dst: ByteChannelSequentialBase, limit: Long): Long {\n val lastPiece = ChunkBuffer.Pool.borrow()\n try {\n lastPiece.resetForWrite(limit.coerceAtMost(lastPiece.capacity.toLong()).toInt())\n val rc = readAvailable(lastPiece)\n if (rc == -1) {\n lastPiece.release(ChunkBuffer.Pool)\n return 0\n }\n\n dst.writeFully(lastPiece)\n return rc.toLong()\n } finally {\n lastPiece.release(ChunkBuffer.Pool)\n }\n}\n","package io.ktor.utils.io.pool\n\nimport io.ktor.utils.io.core.*\nimport kotlinx.atomicfu.*\nimport kotlin.jvm.*\n\npublic interface ObjectPool<T : Any> : Closeable {\n /**\n * Pool capacity\n */\n public val capacity: Int\n\n /**\n * borrow an instance. Pool can recycle an old instance or create a new one\n */\n public fun borrow(): T\n\n /**\n * Recycle an instance. Should be recycled what was borrowed before otherwise could fail\n */\n public fun recycle(instance: T)\n\n /**\n * Dispose the whole pool. None of borrowed objects could be used after the pool gets disposed\n * otherwise it can result in undefined behaviour\n */\n public fun dispose()\n\n /**\n * Does pool dispose\n */\n override fun close() {\n dispose()\n }\n}\n\n/**\n * A pool implementation of zero capacity that always creates new instances\n */\npublic abstract class NoPoolImpl<T : Any> : ObjectPool<T> {\n override val capacity: Int\n get() = 0\n\n override fun recycle(instance: T) {\n }\n\n override fun dispose() {\n }\n}\n\n/**\n * A pool that produces at most one instance\n */\npublic abstract class SingleInstancePool<T : Any> : ObjectPool<T> {\n private val borrowed = atomic(0)\n private val disposed = atomic(false)\n\n @Volatile\n private var instance: T? = null\n\n /**\n * Creates a new instance of [T]\n */\n protected abstract fun produceInstance(): T\n\n /**\n * Dispose [instance] and release it's resources\n */\n protected abstract fun disposeInstance(instance: T)\n\n final override val capacity: Int get() = 1\n\n final override fun borrow(): T {\n borrowed.update {\n if (it != 0) throw IllegalStateException(\"Instance is already consumed\")\n 1\n }\n\n val instance = produceInstance()\n this.instance = instance\n\n return instance\n }\n\n final override fun recycle(instance: T) {\n if (this.instance !== instance) {\n if (this.instance == null && borrowed.value != 0) {\n throw IllegalStateException(\"Already recycled or an irrelevant instance tried to be recycled\")\n }\n\n throw IllegalStateException(\"Unable to recycle irrelevant instance\")\n }\n\n this.instance = null\n\n if (!disposed.compareAndSet(false, true)) {\n throw IllegalStateException(\"An instance is already disposed\")\n }\n\n disposeInstance(instance)\n }\n\n final override fun dispose() {\n if (disposed.compareAndSet(false, true)) {\n val instance = this.instance ?: return\n this.instance = null\n\n disposeInstance(instance)\n }\n }\n}\n\n/**\n * Default object pool implementation.\n */\npublic expect abstract class DefaultPool<T : Any>(capacity: Int) : ObjectPool<T> {\n /**\n * Pool capacity.\n */\n final override val capacity: Int\n\n /**\n * Creates a new instance of [T]\n */\n protected abstract fun produceInstance(): T\n\n /**\n * Dispose [instance] and release it's resources\n */\n protected open fun disposeInstance(instance: T)\n\n /**\n * Clear [instance]'s state before reuse: reset pointers, counters and so on\n */\n protected open fun clearInstance(instance: T): T\n\n /**\n * Validate [instance] of [T]. Could verify that the object has been borrowed from this pool\n */\n protected open fun validateInstance(instance: T)\n\n final override fun borrow(): T\n\n final override fun recycle(instance: T)\n\n final override fun dispose()\n}\n\n/**\n * Borrows and instance of [T] from the pool, invokes [block] with it and finally recycles it\n */\n@Deprecated(\"Use useInstance instead\", ReplaceWith(\"useInstance(block)\"))\npublic inline fun <T : Any, R> ObjectPool<T>.useBorrowed(block: (T) -> R): R {\n return useInstance(block)\n}\n\n/**\n * Borrows and instance of [T] from the pool, invokes [block] with it and finally recycles it\n */\npublic inline fun <T : Any, R> ObjectPool<T>.useInstance(block: (T) -> R): R {\n val instance = borrow()\n try {\n return block(instance)\n } finally {\n recycle(instance)\n }\n}\n","package io.ktor.utils.io\n\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.internal.*\nimport kotlinx.coroutines.*\nimport org.khronos.webgl.*\n\n/**\n * Creates buffered channel for asynchronous reading and writing of sequences of bytes.\n */\npublic actual fun ByteChannel(autoFlush: Boolean): ByteChannel {\n return ByteChannelJS(IoBuffer.Empty, autoFlush)\n}\n\n/**\n * Creates channel for reading from the specified byte array.\n */\npublic actual fun ByteReadChannel(content: ByteArray, offset: Int, length: Int): ByteReadChannel {\n if (content.isEmpty()) return ByteReadChannel.Empty\n val head = IoBuffer.Pool.borrow()\n var tail = head\n\n var start = offset\n val end = start + length\n while (true) {\n tail.reserveEndGap(8)\n val size = minOf(end - start, tail.writeRemaining)\n (tail as Buffer).writeFully(content, start, size)\n start += size\n\n if (start == end) break\n val current = tail\n tail = IoBuffer.Pool.borrow()\n current.next = tail\n }\n\n return ByteChannelJS(head, false).apply { close() }\n}\n\n/**\n * Creates channel for reading from the specified [ArrayBufferView]\n */\npublic fun ByteReadChannel(content: ArrayBufferView): ByteReadChannel {\n if (content.byteLength == 0) return ByteReadChannel.Empty\n val head = IoBuffer.Pool.borrow()\n var tail = head\n\n var start = 0\n var remaining = content.byteLength - content.byteOffset\n while (true) {\n tail.reserveEndGap(8)\n val size = minOf(remaining, tail.writeRemaining)\n tail.writeFully(content, start, size)\n start += size\n remaining -= size\n\n if (remaining == 0) break\n tail = IoBuffer.Pool.borrow()\n }\n\n return ByteChannelJS(head, false).apply { close() }\n}\n\npublic actual suspend fun ByteReadChannel.joinTo(dst: ByteWriteChannel, closeOnEnd: Boolean) {\n (this as ByteChannelSequentialBase).joinToImpl((dst as ByteChannelSequentialBase), closeOnEnd)\n}\n\n/**\n * Reads up to [limit] bytes from receiver channel and writes them to [dst] channel.\n * Closes [dst] channel if fails to read or write with cause exception.\n * @return a number of copied bytes\n */\npublic actual suspend fun ByteReadChannel.copyTo(dst: ByteWriteChannel, limit: Long): Long {\n return (this as ByteChannelSequentialBase).copyToSequentialImpl((dst as ByteChannelSequentialBase), limit)\n}\n\ninternal class ByteChannelJS(initial: IoBuffer, autoFlush: Boolean) : ByteChannelSequentialBase(initial, autoFlush) {\n private var attachedJob: Job? = null\n\n @OptIn(InternalCoroutinesApi::class)\n override fun attachJob(job: Job) {\n attachedJob?.cancel()\n attachedJob = job\n job.invokeOnCompletion(onCancelling = true) { cause ->\n attachedJob = null\n if (cause != null) {\n cancel(cause)\n }\n }\n }\n\n override suspend fun readAvailable(dst: ArrayBuffer, offset: Int, length: Int): Int {\n return if (readable.isEmpty) {\n readAvailableSuspend(dst, offset, length)\n } else {\n closedCause?.let { throw it }\n readable.readAvailable(dst, offset, length)\n }\n }\n\n private suspend fun readAvailableSuspend(dst: ArrayBuffer, offset: Int, length: Int): Int {\n if (!await(1)) return -1\n return readAvailable(dst, offset, length)\n }\n\n override suspend fun readFully(dst: ArrayBuffer, offset: Int, length: Int) {\n if (availableForRead >= length) {\n closedCause?.let { throw it }\n readable.readFully(dst, offset, length)\n return\n }\n\n return readFullySuspend(dst, offset, length)\n }\n\n private suspend fun readFullySuspend(dst: ArrayBuffer, offset: Int, length: Int) {\n var start = offset\n val end = offset + length\n var remaining = length\n\n while (start < end) {\n val rc = readAvailable(dst, start, remaining)\n if (rc == -1) throw EOFException(\"Premature end of stream: required $remaining more bytes\")\n start += rc\n remaining -= rc\n }\n }\n\n override fun toString(): String = \"ByteChannel[$attachedJob, ${hashCode()}]\"\n}\n","// ktlint-disable filename\n/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io\n\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.*\nimport kotlin.jvm.*\n\ninternal actual class ByteChannelSequentialBaseSharedState actual constructor() {\n actual var closed: Boolean = false\n\n actual var readByteOrder: ByteOrder = ByteOrder.BIG_ENDIAN\n\n actual var writeByteOrder: ByteOrder = ByteOrder.BIG_ENDIAN\n\n actual var totalBytesRead: Long = 0L\n\n actual var totalBytesWritten: Long = 0L\n\n actual var closedCause: Throwable? = null\n\n actual var lastReadAvailable: Int = 0\n\n actual var lastReadView: ChunkBuffer = ChunkBuffer.Empty\n}\n","// ktlint-disable filename\npackage io.ktor.utils.io\n\nimport kotlin.coroutines.*\n\ninternal actual class Condition actual constructor(val predicate: () -> Boolean) {\n private var cont: Continuation<Unit>? = null\n\n actual fun check(): Boolean {\n return predicate()\n }\n\n actual fun signal() {\n val cont = cont\n if (cont != null && predicate()) {\n this.cont = null\n cont.resume(Unit)\n }\n }\n\n actual suspend fun await(block: () -> Unit) {\n if (predicate()) return\n\n return suspendCoroutine { c ->\n cont = c\n block()\n }\n }\n actual suspend fun await() {\n if (predicate()) return\n\n return suspendCoroutine { c ->\n cont = c\n }\n }\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\n/**\n * Reverse number's byte order\n */\npublic actual fun Short.reverseByteOrder(): Short = swap(this)\n\n/**\n * Reverse number's byte order\n */\npublic actual fun Int.reverseByteOrder(): Int = swap(this)\n\n/**\n * Reverse number's byte order\n */\npublic actual fun Long.reverseByteOrder(): Long = swap(this)\n\n/**\n * Reverse number's byte order\n */\npublic actual fun Float.reverseByteOrder(): Float = swap(this)\n\n/**\n * Reverse number's byte order\n */\npublic actual fun Double.reverseByteOrder(): Double = swap(this)\n\nprivate inline fun swap(s: Short): Short = (((s.toInt() and 0xff) shl 8) or ((s.toInt() and 0xffff) ushr 8)).toShort()\n\nprivate inline fun swap(s: Int): Int =\n (swap((s and 0xffff).toShort()).toInt() shl 16) or (swap((s ushr 16).toShort()).toInt() and 0xffff)\n\nprivate inline fun swap(s: Long): Long =\n (swap((s and 0xffffffff).toInt()).toLong() shl 32) or (swap((s ushr 32).toInt()).toLong() and 0xffffffff)\n\nprivate inline fun swap(s: Float): Float = Float.fromBits(swap(s.toRawBits()))\n\nprivate inline fun swap(s: Double): Double = Double.fromBits(swap(s.toRawBits()))\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io\n\n/**\n * Print exception stacktrace.\n */\npublic actual fun Throwable.printStack() {\n @Suppress(\"UnsafeCastFromDynamic\")\n println(asDynamic().stack)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io\n\nimport io.ktor.utils.io.core.internal.*\n\n@DangerousInternalIoApi\npublic actual fun Any.preventFreeze() {\n}\n\n@DangerousInternalIoApi\npublic actual fun Any.makeShared() {\n}\n","@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage io.ktor.utils.io.bits\n\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.core.internal.*\nimport org.khronos.webgl.*\n\nprivate val isLittleEndianPlatform = ByteOrder.nativeOrder() === ByteOrder.LITTLE_ENDIAN\n\n/**\n * Copies shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadShortArray(\n offset: Int,\n destination: ShortArray,\n destinationOffset: Int,\n count: Int\n) {\n val typed = Int16Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n // TODO investigate this implementation vs DataView.getInt16(...)\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index]\n }\n }\n}\n\n/**\n * Copies shorts integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadShortArray(\n offset: Long,\n destination: ShortArray,\n destinationOffset: Int,\n count: Int\n) {\n loadShortArray(offset.toIntOrFail(\"offset\"), destination, destinationOffset, count)\n}\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadIntArray(\n offset: Int,\n destination: IntArray,\n destinationOffset: Int,\n count: Int\n) {\n val typed = Int32Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index]\n }\n }\n}\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadIntArray(\n offset: Long,\n destination: IntArray,\n destinationOffset: Int,\n count: Int\n) {\n loadIntArray(offset.toIntOrFail(\"offset\"), destination, destinationOffset, count)\n}\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadLongArray(\n offset: Int,\n destination: LongArray,\n destinationOffset: Int,\n count: Int\n) {\n val typed = Int32Array(view.buffer, view.byteOffset + offset, count * 2)\n\n if (isLittleEndianPlatform) {\n for (index in 0 until count * 2 step 2) {\n destination[index / 2 + destinationOffset] =\n (typed[index + 1].reverseByteOrder().toLong() and 0xffffffffL) or\n (typed[index].reverseByteOrder().toLong() shl 32)\n }\n } else {\n for (index in 0 until count * 2 step 2) {\n destination[index / 2 + destinationOffset] = (typed[index].toLong() and 0xffffffffL) or\n (typed[index + 1].toLong() shl 32)\n }\n }\n}\n\n/**\n * Copies regular integers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadLongArray(\n offset: Long,\n destination: LongArray,\n destinationOffset: Int,\n count: Int\n) {\n loadLongArray(offset.toIntOrFail(\"offset\"), destination, destinationOffset, count)\n}\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadFloatArray(\n offset: Int,\n destination: FloatArray,\n destinationOffset: Int,\n count: Int\n) {\n val typed = Float32Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index]\n }\n }\n}\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadFloatArray(\n offset: Long,\n destination: FloatArray,\n destinationOffset: Int,\n count: Int\n) {\n loadFloatArray(offset.toIntOrFail(\"offset\"), destination, destinationOffset, count)\n}\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadDoubleArray(\n offset: Int,\n destination: DoubleArray,\n destinationOffset: Int,\n count: Int\n) {\n val typed = Float64Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n destination[index + destinationOffset] = typed[index]\n }\n }\n}\n\n/**\n * Copies floating point numbers from this memory range from the specified [offset] and [count]\n * to the [destination] at [destinationOffset] interpreting numbers in the network order (Big Endian).\n * @param destinationOffset items\n */\npublic actual fun Memory.loadDoubleArray(\n offset: Long,\n destination: DoubleArray,\n destinationOffset: Int,\n count: Int\n) {\n loadDoubleArray(offset.toIntOrFail(\"offset\"), destination, destinationOffset, count)\n}\n\n/**\n * Copies shorts integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeShortArray(\n offset: Int,\n source: ShortArray,\n sourceOffset: Int,\n count: Int\n) {\n val typed = Int16Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n // TODO investigate this implementation vs DataView.getInt16(...)\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset]\n }\n }\n}\n\n/**\n * Copies shorts integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeShortArray(\n offset: Long,\n source: ShortArray,\n sourceOffset: Int,\n count: Int\n) {\n storeShortArray(offset.toIntOrFail(\"offset\"), source, sourceOffset, count)\n}\n\n/**\n * Copies regular integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeIntArray(\n offset: Int,\n source: IntArray,\n sourceOffset: Int,\n count: Int\n) {\n val typed = Int32Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset]\n }\n }\n}\n\n/**\n * Copies regular integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeIntArray(\n offset: Long,\n source: IntArray,\n sourceOffset: Int,\n count: Int\n) {\n storeIntArray(offset.toIntOrFail(\"offset\"), source, sourceOffset, count)\n}\n\n/**\n * Copies regular integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeLongArray(\n offset: Int,\n source: LongArray,\n sourceOffset: Int,\n count: Int\n) {\n val typed = Int32Array(view.buffer, view.byteOffset + offset, count * 2)\n\n if (isLittleEndianPlatform) {\n for (index in 0 until count * 2 step 2) {\n val sourceIndex = index / 2 + sourceOffset\n val sourceValue = source[sourceIndex]\n typed[index] = (sourceValue ushr 32).toInt().reverseByteOrder()\n typed[index + 1] = (sourceValue and 0xffffffffL).toInt().reverseByteOrder()\n }\n } else {\n for (index in 0 until count * 2 step 2) {\n val sourceIndex = index / 2 + sourceOffset\n val sourceValue = source[sourceIndex]\n typed[index] = (sourceValue ushr 32).toInt()\n typed[index + 1] = (sourceValue and 0xffffffffL).toInt()\n }\n }\n}\n\n/**\n * Copies regular integers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeLongArray(\n offset: Long,\n source: LongArray,\n sourceOffset: Int,\n count: Int\n) {\n storeLongArray(offset.toIntOrFail(\"offset\"), source, sourceOffset, count)\n}\n\n/**\n * Copies floating point numbers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeFloatArray(\n offset: Int,\n source: FloatArray,\n sourceOffset: Int,\n count: Int\n) {\n val typed = Float32Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset]\n }\n }\n}\n\n/**\n * Copies floating point numbers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeFloatArray(\n offset: Long,\n source: FloatArray,\n sourceOffset: Int,\n count: Int\n) {\n storeFloatArray(offset.toIntOrFail(\"offset\"), source, sourceOffset, count)\n}\n\n/**\n * Copies floating point numbers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeDoubleArray(\n offset: Int,\n source: DoubleArray,\n sourceOffset: Int,\n count: Int\n) {\n val typed = Float64Array(view.buffer, view.byteOffset + offset, count)\n\n if (isLittleEndianPlatform) {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset].reverseByteOrder()\n }\n } else {\n repeat(count) { index ->\n typed[index] = source[index + sourceOffset]\n }\n }\n}\n\n/**\n * Copies floating point numbers from from the [source] array at [sourceOffset] to this memory at the specified [offset]\n * interpreting numbers in the network order (Big Endian).\n * @param sourceOffset items\n */\npublic actual fun Memory.storeDoubleArray(\n offset: Long,\n source: DoubleArray,\n sourceOffset: Int,\n count: Int\n) {\n storeDoubleArray(offset.toIntOrFail(\"offset\"), source, sourceOffset, count)\n}\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// NOTE: THIS FILE IS AUTO-GENERATED, DO NOT EDIT!\n// See github.com/kotlin/dukat for details\n\npackage org.khronos.webgl\n\nimport kotlin.js.*\nimport org.w3c.css.masking.*\nimport org.w3c.dom.*\nimport org.w3c.dom.clipboard.*\nimport org.w3c.dom.css.*\nimport org.w3c.dom.encryptedmedia.*\nimport org.w3c.dom.events.*\nimport org.w3c.dom.mediacapture.*\nimport org.w3c.dom.mediasource.*\nimport org.w3c.dom.parsing.*\nimport org.w3c.dom.pointerevents.*\nimport org.w3c.dom.svg.*\nimport org.w3c.dom.url.*\nimport org.w3c.fetch.*\nimport org.w3c.files.*\nimport org.w3c.notifications.*\nimport org.w3c.performance.*\nimport org.w3c.workers.*\nimport org.w3c.xhr.*\n\npublic external interface WebGLContextAttributes {\n var alpha: Boolean? /* = true */\n get() = definedExternally\n set(value) = definedExternally\n var depth: Boolean? /* = true */\n get() = definedExternally\n set(value) = definedExternally\n var stencil: Boolean? /* = false */\n get() = definedExternally\n set(value) = definedExternally\n var antialias: Boolean? /* = true */\n get() = definedExternally\n set(value) = definedExternally\n var premultipliedAlpha: Boolean? /* = true */\n get() = definedExternally\n set(value) = definedExternally\n var preserveDrawingBuffer: Boolean? /* = false */\n get() = definedExternally\n set(value) = definedExternally\n var preferLowPowerToHighPerformance: Boolean? /* = false */\n get() = definedExternally\n set(value) = definedExternally\n var failIfMajorPerformanceCaveat: Boolean? /* = false */\n get() = definedExternally\n set(value) = definedExternally\n}\n\n@kotlin.internal.InlineOnly\npublic inline fun WebGLContextAttributes(alpha: Boolean? = true, depth: Boolean? = true, stencil: Boolean? = false, antialias: Boolean? = true, premultipliedAlpha: Boolean? = true, preserveDrawingBuffer: Boolean? = false, preferLowPowerToHighPerformance: Boolean? = false, failIfMajorPerformanceCaveat: Boolean? = false): WebGLContextAttributes {\n val o = js(\"({})\")\n o[\"alpha\"] = alpha\n o[\"depth\"] = depth\n o[\"stencil\"] = stencil\n o[\"antialias\"] = antialias\n o[\"premultipliedAlpha\"] = premultipliedAlpha\n o[\"preserveDrawingBuffer\"] = preserveDrawingBuffer\n o[\"preferLowPowerToHighPerformance\"] = preferLowPowerToHighPerformance\n o[\"failIfMajorPerformanceCaveat\"] = failIfMajorPerformanceCaveat\n return o\n}\n\npublic external abstract class WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLBuffer](https://developer.mozilla.org/en/docs/Web/API/WebGLBuffer) to Kotlin\n */\npublic external abstract class WebGLBuffer : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLFramebuffer](https://developer.mozilla.org/en/docs/Web/API/WebGLFramebuffer) to Kotlin\n */\npublic external abstract class WebGLFramebuffer : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLProgram](https://developer.mozilla.org/en/docs/Web/API/WebGLProgram) to Kotlin\n */\npublic external abstract class WebGLProgram : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLRenderbuffer](https://developer.mozilla.org/en/docs/Web/API/WebGLRenderbuffer) to Kotlin\n */\npublic external abstract class WebGLRenderbuffer : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLShader](https://developer.mozilla.org/en/docs/Web/API/WebGLShader) to Kotlin\n */\npublic external abstract class WebGLShader : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLTexture](https://developer.mozilla.org/en/docs/Web/API/WebGLTexture) to Kotlin\n */\npublic external abstract class WebGLTexture : WebGLObject\n\n/**\n * Exposes the JavaScript [WebGLUniformLocation](https://developer.mozilla.org/en/docs/Web/API/WebGLUniformLocation) to Kotlin\n */\npublic external abstract class WebGLUniformLocation\n\n/**\n * Exposes the JavaScript [WebGLActiveInfo](https://developer.mozilla.org/en/docs/Web/API/WebGLActiveInfo) to Kotlin\n */\npublic external abstract class WebGLActiveInfo {\n open val size: Int\n open val type: Int\n open val name: String\n}\n\n/**\n * Exposes the JavaScript [WebGLShaderPrecisionFormat](https://developer.mozilla.org/en/docs/Web/API/WebGLShaderPrecisionFormat) to Kotlin\n */\npublic external abstract class WebGLShaderPrecisionFormat {\n open val rangeMin: Int\n open val rangeMax: Int\n open val precision: Int\n}\n\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface WebGLRenderingContextBase {\n val canvas: HTMLCanvasElement\n val drawingBufferWidth: Int\n val drawingBufferHeight: Int\n fun getContextAttributes(): WebGLContextAttributes?\n fun isContextLost(): Boolean\n fun getSupportedExtensions(): Array<String>?\n fun getExtension(name: String): dynamic\n fun activeTexture(texture: Int)\n fun attachShader(program: WebGLProgram?, shader: WebGLShader?)\n fun bindAttribLocation(program: WebGLProgram?, index: Int, name: String)\n fun bindBuffer(target: Int, buffer: WebGLBuffer?)\n fun bindFramebuffer(target: Int, framebuffer: WebGLFramebuffer?)\n fun bindRenderbuffer(target: Int, renderbuffer: WebGLRenderbuffer?)\n fun bindTexture(target: Int, texture: WebGLTexture?)\n fun blendColor(red: Float, green: Float, blue: Float, alpha: Float)\n fun blendEquation(mode: Int)\n fun blendEquationSeparate(modeRGB: Int, modeAlpha: Int)\n fun blendFunc(sfactor: Int, dfactor: Int)\n fun blendFuncSeparate(srcRGB: Int, dstRGB: Int, srcAlpha: Int, dstAlpha: Int)\n fun bufferData(target: Int, size: Int, usage: Int)\n fun bufferData(target: Int, data: BufferDataSource?, usage: Int)\n fun bufferSubData(target: Int, offset: Int, data: BufferDataSource?)\n fun checkFramebufferStatus(target: Int): Int\n fun clear(mask: Int)\n fun clearColor(red: Float, green: Float, blue: Float, alpha: Float)\n fun clearDepth(depth: Float)\n fun clearStencil(s: Int)\n fun colorMask(red: Boolean, green: Boolean, blue: Boolean, alpha: Boolean)\n fun compileShader(shader: WebGLShader?)\n fun compressedTexImage2D(target: Int, level: Int, internalformat: Int, width: Int, height: Int, border: Int, data: ArrayBufferView)\n fun compressedTexSubImage2D(target: Int, level: Int, xoffset: Int, yoffset: Int, width: Int, height: Int, format: Int, data: ArrayBufferView)\n fun copyTexImage2D(target: Int, level: Int, internalformat: Int, x: Int, y: Int, width: Int, height: Int, border: Int)\n fun copyTexSubImage2D(target: Int, level: Int, xoffset: Int, yoffset: Int, x: Int, y: Int, width: Int, height: Int)\n fun createBuffer(): WebGLBuffer?\n fun createFramebuffer(): WebGLFramebuffer?\n fun createProgram(): WebGLProgram?\n fun createRenderbuffer(): WebGLRenderbuffer?\n fun createShader(type: Int): WebGLShader?\n fun createTexture(): WebGLTexture?\n fun cullFace(mode: Int)\n fun deleteBuffer(buffer: WebGLBuffer?)\n fun deleteFramebuffer(framebuffer: WebGLFramebuffer?)\n fun deleteProgram(program: WebGLProgram?)\n fun deleteRenderbuffer(renderbuffer: WebGLRenderbuffer?)\n fun deleteShader(shader: WebGLShader?)\n fun deleteTexture(texture: WebGLTexture?)\n fun depthFunc(func: Int)\n fun depthMask(flag: Boolean)\n fun depthRange(zNear: Float, zFar: Float)\n fun detachShader(program: WebGLProgram?, shader: WebGLShader?)\n fun disable(cap: Int)\n fun disableVertexAttribArray(index: Int)\n fun drawArrays(mode: Int, first: Int, count: Int)\n fun drawElements(mode: Int, count: Int, type: Int, offset: Int)\n fun enable(cap: Int)\n fun enableVertexAttribArray(index: Int)\n fun finish()\n fun flush()\n fun framebufferRenderbuffer(target: Int, attachment: Int, renderbuffertarget: Int, renderbuffer: WebGLRenderbuffer?)\n fun framebufferTexture2D(target: Int, attachment: Int, textarget: Int, texture: WebGLTexture?, level: Int)\n fun frontFace(mode: Int)\n fun generateMipmap(target: Int)\n fun getActiveAttrib(program: WebGLProgram?, index: Int): WebGLActiveInfo?\n fun getActiveUniform(program: WebGLProgram?, index: Int): WebGLActiveInfo?\n fun getAttachedShaders(program: WebGLProgram?): Array<WebGLShader>?\n fun getAttribLocation(program: WebGLProgram?, name: String): Int\n fun getBufferParameter(target: Int, pname: Int): Any?\n fun getParameter(pname: Int): Any?\n fun getError(): Int\n fun getFramebufferAttachmentParameter(target: Int, attachment: Int, pname: Int): Any?\n fun getProgramParameter(program: WebGLProgram?, pname: Int): Any?\n fun getProgramInfoLog(program: WebGLProgram?): String?\n fun getRenderbufferParameter(target: Int, pname: Int): Any?\n fun getShaderParameter(shader: WebGLShader?, pname: Int): Any?\n fun getShaderPrecisionFormat(shadertype: Int, precisiontype: Int): WebGLShaderPrecisionFormat?\n fun getShaderInfoLog(shader: WebGLShader?): String?\n fun getShaderSource(shader: WebGLShader?): String?\n fun getTexParameter(target: Int, pname: Int): Any?\n fun getUniform(program: WebGLProgram?, location: WebGLUniformLocation?): Any?\n fun getUniformLocation(program: WebGLProgram?, name: String): WebGLUniformLocation?\n fun getVertexAttrib(index: Int, pname: Int): Any?\n fun getVertexAttribOffset(index: Int, pname: Int): Int\n fun hint(target: Int, mode: Int)\n fun isBuffer(buffer: WebGLBuffer?): Boolean\n fun isEnabled(cap: Int): Boolean\n fun isFramebuffer(framebuffer: WebGLFramebuffer?): Boolean\n fun isProgram(program: WebGLProgram?): Boolean\n fun isRenderbuffer(renderbuffer: WebGLRenderbuffer?): Boolean\n fun isShader(shader: WebGLShader?): Boolean\n fun isTexture(texture: WebGLTexture?): Boolean\n fun lineWidth(width: Float)\n fun linkProgram(program: WebGLProgram?)\n fun pixelStorei(pname: Int, param: Int)\n fun polygonOffset(factor: Float, units: Float)\n fun readPixels(x: Int, y: Int, width: Int, height: Int, format: Int, type: Int, pixels: ArrayBufferView?)\n fun renderbufferStorage(target: Int, internalformat: Int, width: Int, height: Int)\n fun sampleCoverage(value: Float, invert: Boolean)\n fun scissor(x: Int, y: Int, width: Int, height: Int)\n fun shaderSource(shader: WebGLShader?, source: String)\n fun stencilFunc(func: Int, ref: Int, mask: Int)\n fun stencilFuncSeparate(face: Int, func: Int, ref: Int, mask: Int)\n fun stencilMask(mask: Int)\n fun stencilMaskSeparate(face: Int, mask: Int)\n fun stencilOp(fail: Int, zfail: Int, zpass: Int)\n fun stencilOpSeparate(face: Int, fail: Int, zfail: Int, zpass: Int)\n fun texImage2D(target: Int, level: Int, internalformat: Int, width: Int, height: Int, border: Int, format: Int, type: Int, pixels: ArrayBufferView?)\n fun texImage2D(target: Int, level: Int, internalformat: Int, format: Int, type: Int, source: TexImageSource?)\n fun texParameterf(target: Int, pname: Int, param: Float)\n fun texParameteri(target: Int, pname: Int, param: Int)\n fun texSubImage2D(target: Int, level: Int, xoffset: Int, yoffset: Int, width: Int, height: Int, format: Int, type: Int, pixels: ArrayBufferView?)\n fun texSubImage2D(target: Int, level: Int, xoffset: Int, yoffset: Int, format: Int, type: Int, source: TexImageSource?)\n fun uniform1f(location: WebGLUniformLocation?, x: Float)\n fun uniform1fv(location: WebGLUniformLocation?, v: Float32Array)\n fun uniform1fv(location: WebGLUniformLocation?, v: Array<Float>)\n fun uniform1i(location: WebGLUniformLocation?, x: Int)\n fun uniform1iv(location: WebGLUniformLocation?, v: Int32Array)\n fun uniform1iv(location: WebGLUniformLocation?, v: Array<Int>)\n fun uniform2f(location: WebGLUniformLocation?, x: Float, y: Float)\n fun uniform2fv(location: WebGLUniformLocation?, v: Float32Array)\n fun uniform2fv(location: WebGLUniformLocation?, v: Array<Float>)\n fun uniform2i(location: WebGLUniformLocation?, x: Int, y: Int)\n fun uniform2iv(location: WebGLUniformLocation?, v: Int32Array)\n fun uniform2iv(location: WebGLUniformLocation?, v: Array<Int>)\n fun uniform3f(location: WebGLUniformLocation?, x: Float, y: Float, z: Float)\n fun uniform3fv(location: WebGLUniformLocation?, v: Float32Array)\n fun uniform3fv(location: WebGLUniformLocation?, v: Array<Float>)\n fun uniform3i(location: WebGLUniformLocation?, x: Int, y: Int, z: Int)\n fun uniform3iv(location: WebGLUniformLocation?, v: Int32Array)\n fun uniform3iv(location: WebGLUniformLocation?, v: Array<Int>)\n fun uniform4f(location: WebGLUniformLocation?, x: Float, y: Float, z: Float, w: Float)\n fun uniform4fv(location: WebGLUniformLocation?, v: Float32Array)\n fun uniform4fv(location: WebGLUniformLocation?, v: Array<Float>)\n fun uniform4i(location: WebGLUniformLocation?, x: Int, y: Int, z: Int, w: Int)\n fun uniform4iv(location: WebGLUniformLocation?, v: Int32Array)\n fun uniform4iv(location: WebGLUniformLocation?, v: Array<Int>)\n fun uniformMatrix2fv(location: WebGLUniformLocation?, transpose: Boolean, value: Float32Array)\n fun uniformMatrix2fv(location: WebGLUniformLocation?, transpose: Boolean, value: Array<Float>)\n fun uniformMatrix3fv(location: WebGLUniformLocation?, transpose: Boolean, value: Float32Array)\n fun uniformMatrix3fv(location: WebGLUniformLocation?, transpose: Boolean, value: Array<Float>)\n fun uniformMatrix4fv(location: WebGLUniformLocation?, transpose: Boolean, value: Float32Array)\n fun uniformMatrix4fv(location: WebGLUniformLocation?, transpose: Boolean, value: Array<Float>)\n fun useProgram(program: WebGLProgram?)\n fun validateProgram(program: WebGLProgram?)\n fun vertexAttrib1f(index: Int, x: Float)\n fun vertexAttrib1fv(index: Int, values: dynamic)\n fun vertexAttrib2f(index: Int, x: Float, y: Float)\n fun vertexAttrib2fv(index: Int, values: dynamic)\n fun vertexAttrib3f(index: Int, x: Float, y: Float, z: Float)\n fun vertexAttrib3fv(index: Int, values: dynamic)\n fun vertexAttrib4f(index: Int, x: Float, y: Float, z: Float, w: Float)\n fun vertexAttrib4fv(index: Int, values: dynamic)\n fun vertexAttribPointer(index: Int, size: Int, type: Int, normalized: Boolean, stride: Int, offset: Int)\n fun viewport(x: Int, y: Int, width: Int, height: Int)\n\n companion object {\n val DEPTH_BUFFER_BIT: Int\n val STENCIL_BUFFER_BIT: Int\n val COLOR_BUFFER_BIT: Int\n val POINTS: Int\n val LINES: Int\n val LINE_LOOP: Int\n val LINE_STRIP: Int\n val TRIANGLES: Int\n val TRIANGLE_STRIP: Int\n val TRIANGLE_FAN: Int\n val ZERO: Int\n val ONE: Int\n val SRC_COLOR: Int\n val ONE_MINUS_SRC_COLOR: Int\n val SRC_ALPHA: Int\n val ONE_MINUS_SRC_ALPHA: Int\n val DST_ALPHA: Int\n val ONE_MINUS_DST_ALPHA: Int\n val DST_COLOR: Int\n val ONE_MINUS_DST_COLOR: Int\n val SRC_ALPHA_SATURATE: Int\n val FUNC_ADD: Int\n val BLEND_EQUATION: Int\n val BLEND_EQUATION_RGB: Int\n val BLEND_EQUATION_ALPHA: Int\n val FUNC_SUBTRACT: Int\n val FUNC_REVERSE_SUBTRACT: Int\n val BLEND_DST_RGB: Int\n val BLEND_SRC_RGB: Int\n val BLEND_DST_ALPHA: Int\n val BLEND_SRC_ALPHA: Int\n val CONSTANT_COLOR: Int\n val ONE_MINUS_CONSTANT_COLOR: Int\n val CONSTANT_ALPHA: Int\n val ONE_MINUS_CONSTANT_ALPHA: Int\n val BLEND_COLOR: Int\n val ARRAY_BUFFER: Int\n val ELEMENT_ARRAY_BUFFER: Int\n val ARRAY_BUFFER_BINDING: Int\n val ELEMENT_ARRAY_BUFFER_BINDING: Int\n val STREAM_DRAW: Int\n val STATIC_DRAW: Int\n val DYNAMIC_DRAW: Int\n val BUFFER_SIZE: Int\n val BUFFER_USAGE: Int\n val CURRENT_VERTEX_ATTRIB: Int\n val FRONT: Int\n val BACK: Int\n val FRONT_AND_BACK: Int\n val CULL_FACE: Int\n val BLEND: Int\n val DITHER: Int\n val STENCIL_TEST: Int\n val DEPTH_TEST: Int\n val SCISSOR_TEST: Int\n val POLYGON_OFFSET_FILL: Int\n val SAMPLE_ALPHA_TO_COVERAGE: Int\n val SAMPLE_COVERAGE: Int\n val NO_ERROR: Int\n val INVALID_ENUM: Int\n val INVALID_VALUE: Int\n val INVALID_OPERATION: Int\n val OUT_OF_MEMORY: Int\n val CW: Int\n val CCW: Int\n val LINE_WIDTH: Int\n val ALIASED_POINT_SIZE_RANGE: Int\n val ALIASED_LINE_WIDTH_RANGE: Int\n val CULL_FACE_MODE: Int\n val FRONT_FACE: Int\n val DEPTH_RANGE: Int\n val DEPTH_WRITEMASK: Int\n val DEPTH_CLEAR_VALUE: Int\n val DEPTH_FUNC: Int\n val STENCIL_CLEAR_VALUE: Int\n val STENCIL_FUNC: Int\n val STENCIL_FAIL: Int\n val STENCIL_PASS_DEPTH_FAIL: Int\n val STENCIL_PASS_DEPTH_PASS: Int\n val STENCIL_REF: Int\n val STENCIL_VALUE_MASK: Int\n val STENCIL_WRITEMASK: Int\n val STENCIL_BACK_FUNC: Int\n val STENCIL_BACK_FAIL: Int\n val STENCIL_BACK_PASS_DEPTH_FAIL: Int\n val STENCIL_BACK_PASS_DEPTH_PASS: Int\n val STENCIL_BACK_REF: Int\n val STENCIL_BACK_VALUE_MASK: Int\n val STENCIL_BACK_WRITEMASK: Int\n val VIEWPORT: Int\n val SCISSOR_BOX: Int\n val COLOR_CLEAR_VALUE: Int\n val COLOR_WRITEMASK: Int\n val UNPACK_ALIGNMENT: Int\n val PACK_ALIGNMENT: Int\n val MAX_TEXTURE_SIZE: Int\n val MAX_VIEWPORT_DIMS: Int\n val SUBPIXEL_BITS: Int\n val RED_BITS: Int\n val GREEN_BITS: Int\n val BLUE_BITS: Int\n val ALPHA_BITS: Int\n val DEPTH_BITS: Int\n val STENCIL_BITS: Int\n val POLYGON_OFFSET_UNITS: Int\n val POLYGON_OFFSET_FACTOR: Int\n val TEXTURE_BINDING_2D: Int\n val SAMPLE_BUFFERS: Int\n val SAMPLES: Int\n val SAMPLE_COVERAGE_VALUE: Int\n val SAMPLE_COVERAGE_INVERT: Int\n val COMPRESSED_TEXTURE_FORMATS: Int\n val DONT_CARE: Int\n val FASTEST: Int\n val NICEST: Int\n val GENERATE_MIPMAP_HINT: Int\n val BYTE: Int\n val UNSIGNED_BYTE: Int\n val SHORT: Int\n val UNSIGNED_SHORT: Int\n val INT: Int\n val UNSIGNED_INT: Int\n val FLOAT: Int\n val DEPTH_COMPONENT: Int\n val ALPHA: Int\n val RGB: Int\n val RGBA: Int\n val LUMINANCE: Int\n val LUMINANCE_ALPHA: Int\n val UNSIGNED_SHORT_4_4_4_4: Int\n val UNSIGNED_SHORT_5_5_5_1: Int\n val UNSIGNED_SHORT_5_6_5: Int\n val FRAGMENT_SHADER: Int\n val VERTEX_SHADER: Int\n val MAX_VERTEX_ATTRIBS: Int\n val MAX_VERTEX_UNIFORM_VECTORS: Int\n val MAX_VARYING_VECTORS: Int\n val MAX_COMBINED_TEXTURE_IMAGE_UNITS: Int\n val MAX_VERTEX_TEXTURE_IMAGE_UNITS: Int\n val MAX_TEXTURE_IMAGE_UNITS: Int\n val MAX_FRAGMENT_UNIFORM_VECTORS: Int\n val SHADER_TYPE: Int\n val DELETE_STATUS: Int\n val LINK_STATUS: Int\n val VALIDATE_STATUS: Int\n val ATTACHED_SHADERS: Int\n val ACTIVE_UNIFORMS: Int\n val ACTIVE_ATTRIBUTES: Int\n val SHADING_LANGUAGE_VERSION: Int\n val CURRENT_PROGRAM: Int\n val NEVER: Int\n val LESS: Int\n val EQUAL: Int\n val LEQUAL: Int\n val GREATER: Int\n val NOTEQUAL: Int\n val GEQUAL: Int\n val ALWAYS: Int\n val KEEP: Int\n val REPLACE: Int\n val INCR: Int\n val DECR: Int\n val INVERT: Int\n val INCR_WRAP: Int\n val DECR_WRAP: Int\n val VENDOR: Int\n val RENDERER: Int\n val VERSION: Int\n val NEAREST: Int\n val LINEAR: Int\n val NEAREST_MIPMAP_NEAREST: Int\n val LINEAR_MIPMAP_NEAREST: Int\n val NEAREST_MIPMAP_LINEAR: Int\n val LINEAR_MIPMAP_LINEAR: Int\n val TEXTURE_MAG_FILTER: Int\n val TEXTURE_MIN_FILTER: Int\n val TEXTURE_WRAP_S: Int\n val TEXTURE_WRAP_T: Int\n val TEXTURE_2D: Int\n val TEXTURE: Int\n val TEXTURE_CUBE_MAP: Int\n val TEXTURE_BINDING_CUBE_MAP: Int\n val TEXTURE_CUBE_MAP_POSITIVE_X: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_X: Int\n val TEXTURE_CUBE_MAP_POSITIVE_Y: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_Y: Int\n val TEXTURE_CUBE_MAP_POSITIVE_Z: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_Z: Int\n val MAX_CUBE_MAP_TEXTURE_SIZE: Int\n val TEXTURE0: Int\n val TEXTURE1: Int\n val TEXTURE2: Int\n val TEXTURE3: Int\n val TEXTURE4: Int\n val TEXTURE5: Int\n val TEXTURE6: Int\n val TEXTURE7: Int\n val TEXTURE8: Int\n val TEXTURE9: Int\n val TEXTURE10: Int\n val TEXTURE11: Int\n val TEXTURE12: Int\n val TEXTURE13: Int\n val TEXTURE14: Int\n val TEXTURE15: Int\n val TEXTURE16: Int\n val TEXTURE17: Int\n val TEXTURE18: Int\n val TEXTURE19: Int\n val TEXTURE20: Int\n val TEXTURE21: Int\n val TEXTURE22: Int\n val TEXTURE23: Int\n val TEXTURE24: Int\n val TEXTURE25: Int\n val TEXTURE26: Int\n val TEXTURE27: Int\n val TEXTURE28: Int\n val TEXTURE29: Int\n val TEXTURE30: Int\n val TEXTURE31: Int\n val ACTIVE_TEXTURE: Int\n val REPEAT: Int\n val CLAMP_TO_EDGE: Int\n val MIRRORED_REPEAT: Int\n val FLOAT_VEC2: Int\n val FLOAT_VEC3: Int\n val FLOAT_VEC4: Int\n val INT_VEC2: Int\n val INT_VEC3: Int\n val INT_VEC4: Int\n val BOOL: Int\n val BOOL_VEC2: Int\n val BOOL_VEC3: Int\n val BOOL_VEC4: Int\n val FLOAT_MAT2: Int\n val FLOAT_MAT3: Int\n val FLOAT_MAT4: Int\n val SAMPLER_2D: Int\n val SAMPLER_CUBE: Int\n val VERTEX_ATTRIB_ARRAY_ENABLED: Int\n val VERTEX_ATTRIB_ARRAY_SIZE: Int\n val VERTEX_ATTRIB_ARRAY_STRIDE: Int\n val VERTEX_ATTRIB_ARRAY_TYPE: Int\n val VERTEX_ATTRIB_ARRAY_NORMALIZED: Int\n val VERTEX_ATTRIB_ARRAY_POINTER: Int\n val VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: Int\n val IMPLEMENTATION_COLOR_READ_TYPE: Int\n val IMPLEMENTATION_COLOR_READ_FORMAT: Int\n val COMPILE_STATUS: Int\n val LOW_FLOAT: Int\n val MEDIUM_FLOAT: Int\n val HIGH_FLOAT: Int\n val LOW_INT: Int\n val MEDIUM_INT: Int\n val HIGH_INT: Int\n val FRAMEBUFFER: Int\n val RENDERBUFFER: Int\n val RGBA4: Int\n val RGB5_A1: Int\n val RGB565: Int\n val DEPTH_COMPONENT16: Int\n val STENCIL_INDEX: Int\n val STENCIL_INDEX8: Int\n val DEPTH_STENCIL: Int\n val RENDERBUFFER_WIDTH: Int\n val RENDERBUFFER_HEIGHT: Int\n val RENDERBUFFER_INTERNAL_FORMAT: Int\n val RENDERBUFFER_RED_SIZE: Int\n val RENDERBUFFER_GREEN_SIZE: Int\n val RENDERBUFFER_BLUE_SIZE: Int\n val RENDERBUFFER_ALPHA_SIZE: Int\n val RENDERBUFFER_DEPTH_SIZE: Int\n val RENDERBUFFER_STENCIL_SIZE: Int\n val FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: Int\n val FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: Int\n val FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: Int\n val FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: Int\n val COLOR_ATTACHMENT0: Int\n val DEPTH_ATTACHMENT: Int\n val STENCIL_ATTACHMENT: Int\n val DEPTH_STENCIL_ATTACHMENT: Int\n val NONE: Int\n val FRAMEBUFFER_COMPLETE: Int\n val FRAMEBUFFER_INCOMPLETE_ATTACHMENT: Int\n val FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: Int\n val FRAMEBUFFER_INCOMPLETE_DIMENSIONS: Int\n val FRAMEBUFFER_UNSUPPORTED: Int\n val FRAMEBUFFER_BINDING: Int\n val RENDERBUFFER_BINDING: Int\n val MAX_RENDERBUFFER_SIZE: Int\n val INVALID_FRAMEBUFFER_OPERATION: Int\n val UNPACK_FLIP_Y_WEBGL: Int\n val UNPACK_PREMULTIPLY_ALPHA_WEBGL: Int\n val CONTEXT_LOST_WEBGL: Int\n val UNPACK_COLORSPACE_CONVERSION_WEBGL: Int\n val BROWSER_DEFAULT_WEBGL: Int\n }\n}\n\n/**\n * Exposes the JavaScript [WebGLRenderingContext](https://developer.mozilla.org/en/docs/Web/API/WebGLRenderingContext) to Kotlin\n */\npublic external abstract class WebGLRenderingContext : WebGLRenderingContextBase, RenderingContext {\n companion object {\n val DEPTH_BUFFER_BIT: Int\n val STENCIL_BUFFER_BIT: Int\n val COLOR_BUFFER_BIT: Int\n val POINTS: Int\n val LINES: Int\n val LINE_LOOP: Int\n val LINE_STRIP: Int\n val TRIANGLES: Int\n val TRIANGLE_STRIP: Int\n val TRIANGLE_FAN: Int\n val ZERO: Int\n val ONE: Int\n val SRC_COLOR: Int\n val ONE_MINUS_SRC_COLOR: Int\n val SRC_ALPHA: Int\n val ONE_MINUS_SRC_ALPHA: Int\n val DST_ALPHA: Int\n val ONE_MINUS_DST_ALPHA: Int\n val DST_COLOR: Int\n val ONE_MINUS_DST_COLOR: Int\n val SRC_ALPHA_SATURATE: Int\n val FUNC_ADD: Int\n val BLEND_EQUATION: Int\n val BLEND_EQUATION_RGB: Int\n val BLEND_EQUATION_ALPHA: Int\n val FUNC_SUBTRACT: Int\n val FUNC_REVERSE_SUBTRACT: Int\n val BLEND_DST_RGB: Int\n val BLEND_SRC_RGB: Int\n val BLEND_DST_ALPHA: Int\n val BLEND_SRC_ALPHA: Int\n val CONSTANT_COLOR: Int\n val ONE_MINUS_CONSTANT_COLOR: Int\n val CONSTANT_ALPHA: Int\n val ONE_MINUS_CONSTANT_ALPHA: Int\n val BLEND_COLOR: Int\n val ARRAY_BUFFER: Int\n val ELEMENT_ARRAY_BUFFER: Int\n val ARRAY_BUFFER_BINDING: Int\n val ELEMENT_ARRAY_BUFFER_BINDING: Int\n val STREAM_DRAW: Int\n val STATIC_DRAW: Int\n val DYNAMIC_DRAW: Int\n val BUFFER_SIZE: Int\n val BUFFER_USAGE: Int\n val CURRENT_VERTEX_ATTRIB: Int\n val FRONT: Int\n val BACK: Int\n val FRONT_AND_BACK: Int\n val CULL_FACE: Int\n val BLEND: Int\n val DITHER: Int\n val STENCIL_TEST: Int\n val DEPTH_TEST: Int\n val SCISSOR_TEST: Int\n val POLYGON_OFFSET_FILL: Int\n val SAMPLE_ALPHA_TO_COVERAGE: Int\n val SAMPLE_COVERAGE: Int\n val NO_ERROR: Int\n val INVALID_ENUM: Int\n val INVALID_VALUE: Int\n val INVALID_OPERATION: Int\n val OUT_OF_MEMORY: Int\n val CW: Int\n val CCW: Int\n val LINE_WIDTH: Int\n val ALIASED_POINT_SIZE_RANGE: Int\n val ALIASED_LINE_WIDTH_RANGE: Int\n val CULL_FACE_MODE: Int\n val FRONT_FACE: Int\n val DEPTH_RANGE: Int\n val DEPTH_WRITEMASK: Int\n val DEPTH_CLEAR_VALUE: Int\n val DEPTH_FUNC: Int\n val STENCIL_CLEAR_VALUE: Int\n val STENCIL_FUNC: Int\n val STENCIL_FAIL: Int\n val STENCIL_PASS_DEPTH_FAIL: Int\n val STENCIL_PASS_DEPTH_PASS: Int\n val STENCIL_REF: Int\n val STENCIL_VALUE_MASK: Int\n val STENCIL_WRITEMASK: Int\n val STENCIL_BACK_FUNC: Int\n val STENCIL_BACK_FAIL: Int\n val STENCIL_BACK_PASS_DEPTH_FAIL: Int\n val STENCIL_BACK_PASS_DEPTH_PASS: Int\n val STENCIL_BACK_REF: Int\n val STENCIL_BACK_VALUE_MASK: Int\n val STENCIL_BACK_WRITEMASK: Int\n val VIEWPORT: Int\n val SCISSOR_BOX: Int\n val COLOR_CLEAR_VALUE: Int\n val COLOR_WRITEMASK: Int\n val UNPACK_ALIGNMENT: Int\n val PACK_ALIGNMENT: Int\n val MAX_TEXTURE_SIZE: Int\n val MAX_VIEWPORT_DIMS: Int\n val SUBPIXEL_BITS: Int\n val RED_BITS: Int\n val GREEN_BITS: Int\n val BLUE_BITS: Int\n val ALPHA_BITS: Int\n val DEPTH_BITS: Int\n val STENCIL_BITS: Int\n val POLYGON_OFFSET_UNITS: Int\n val POLYGON_OFFSET_FACTOR: Int\n val TEXTURE_BINDING_2D: Int\n val SAMPLE_BUFFERS: Int\n val SAMPLES: Int\n val SAMPLE_COVERAGE_VALUE: Int\n val SAMPLE_COVERAGE_INVERT: Int\n val COMPRESSED_TEXTURE_FORMATS: Int\n val DONT_CARE: Int\n val FASTEST: Int\n val NICEST: Int\n val GENERATE_MIPMAP_HINT: Int\n val BYTE: Int\n val UNSIGNED_BYTE: Int\n val SHORT: Int\n val UNSIGNED_SHORT: Int\n val INT: Int\n val UNSIGNED_INT: Int\n val FLOAT: Int\n val DEPTH_COMPONENT: Int\n val ALPHA: Int\n val RGB: Int\n val RGBA: Int\n val LUMINANCE: Int\n val LUMINANCE_ALPHA: Int\n val UNSIGNED_SHORT_4_4_4_4: Int\n val UNSIGNED_SHORT_5_5_5_1: Int\n val UNSIGNED_SHORT_5_6_5: Int\n val FRAGMENT_SHADER: Int\n val VERTEX_SHADER: Int\n val MAX_VERTEX_ATTRIBS: Int\n val MAX_VERTEX_UNIFORM_VECTORS: Int\n val MAX_VARYING_VECTORS: Int\n val MAX_COMBINED_TEXTURE_IMAGE_UNITS: Int\n val MAX_VERTEX_TEXTURE_IMAGE_UNITS: Int\n val MAX_TEXTURE_IMAGE_UNITS: Int\n val MAX_FRAGMENT_UNIFORM_VECTORS: Int\n val SHADER_TYPE: Int\n val DELETE_STATUS: Int\n val LINK_STATUS: Int\n val VALIDATE_STATUS: Int\n val ATTACHED_SHADERS: Int\n val ACTIVE_UNIFORMS: Int\n val ACTIVE_ATTRIBUTES: Int\n val SHADING_LANGUAGE_VERSION: Int\n val CURRENT_PROGRAM: Int\n val NEVER: Int\n val LESS: Int\n val EQUAL: Int\n val LEQUAL: Int\n val GREATER: Int\n val NOTEQUAL: Int\n val GEQUAL: Int\n val ALWAYS: Int\n val KEEP: Int\n val REPLACE: Int\n val INCR: Int\n val DECR: Int\n val INVERT: Int\n val INCR_WRAP: Int\n val DECR_WRAP: Int\n val VENDOR: Int\n val RENDERER: Int\n val VERSION: Int\n val NEAREST: Int\n val LINEAR: Int\n val NEAREST_MIPMAP_NEAREST: Int\n val LINEAR_MIPMAP_NEAREST: Int\n val NEAREST_MIPMAP_LINEAR: Int\n val LINEAR_MIPMAP_LINEAR: Int\n val TEXTURE_MAG_FILTER: Int\n val TEXTURE_MIN_FILTER: Int\n val TEXTURE_WRAP_S: Int\n val TEXTURE_WRAP_T: Int\n val TEXTURE_2D: Int\n val TEXTURE: Int\n val TEXTURE_CUBE_MAP: Int\n val TEXTURE_BINDING_CUBE_MAP: Int\n val TEXTURE_CUBE_MAP_POSITIVE_X: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_X: Int\n val TEXTURE_CUBE_MAP_POSITIVE_Y: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_Y: Int\n val TEXTURE_CUBE_MAP_POSITIVE_Z: Int\n val TEXTURE_CUBE_MAP_NEGATIVE_Z: Int\n val MAX_CUBE_MAP_TEXTURE_SIZE: Int\n val TEXTURE0: Int\n val TEXTURE1: Int\n val TEXTURE2: Int\n val TEXTURE3: Int\n val TEXTURE4: Int\n val TEXTURE5: Int\n val TEXTURE6: Int\n val TEXTURE7: Int\n val TEXTURE8: Int\n val TEXTURE9: Int\n val TEXTURE10: Int\n val TEXTURE11: Int\n val TEXTURE12: Int\n val TEXTURE13: Int\n val TEXTURE14: Int\n val TEXTURE15: Int\n val TEXTURE16: Int\n val TEXTURE17: Int\n val TEXTURE18: Int\n val TEXTURE19: Int\n val TEXTURE20: Int\n val TEXTURE21: Int\n val TEXTURE22: Int\n val TEXTURE23: Int\n val TEXTURE24: Int\n val TEXTURE25: Int\n val TEXTURE26: Int\n val TEXTURE27: Int\n val TEXTURE28: Int\n val TEXTURE29: Int\n val TEXTURE30: Int\n val TEXTURE31: Int\n val ACTIVE_TEXTURE: Int\n val REPEAT: Int\n val CLAMP_TO_EDGE: Int\n val MIRRORED_REPEAT: Int\n val FLOAT_VEC2: Int\n val FLOAT_VEC3: Int\n val FLOAT_VEC4: Int\n val INT_VEC2: Int\n val INT_VEC3: Int\n val INT_VEC4: Int\n val BOOL: Int\n val BOOL_VEC2: Int\n val BOOL_VEC3: Int\n val BOOL_VEC4: Int\n val FLOAT_MAT2: Int\n val FLOAT_MAT3: Int\n val FLOAT_MAT4: Int\n val SAMPLER_2D: Int\n val SAMPLER_CUBE: Int\n val VERTEX_ATTRIB_ARRAY_ENABLED: Int\n val VERTEX_ATTRIB_ARRAY_SIZE: Int\n val VERTEX_ATTRIB_ARRAY_STRIDE: Int\n val VERTEX_ATTRIB_ARRAY_TYPE: Int\n val VERTEX_ATTRIB_ARRAY_NORMALIZED: Int\n val VERTEX_ATTRIB_ARRAY_POINTER: Int\n val VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: Int\n val IMPLEMENTATION_COLOR_READ_TYPE: Int\n val IMPLEMENTATION_COLOR_READ_FORMAT: Int\n val COMPILE_STATUS: Int\n val LOW_FLOAT: Int\n val MEDIUM_FLOAT: Int\n val HIGH_FLOAT: Int\n val LOW_INT: Int\n val MEDIUM_INT: Int\n val HIGH_INT: Int\n val FRAMEBUFFER: Int\n val RENDERBUFFER: Int\n val RGBA4: Int\n val RGB5_A1: Int\n val RGB565: Int\n val DEPTH_COMPONENT16: Int\n val STENCIL_INDEX: Int\n val STENCIL_INDEX8: Int\n val DEPTH_STENCIL: Int\n val RENDERBUFFER_WIDTH: Int\n val RENDERBUFFER_HEIGHT: Int\n val RENDERBUFFER_INTERNAL_FORMAT: Int\n val RENDERBUFFER_RED_SIZE: Int\n val RENDERBUFFER_GREEN_SIZE: Int\n val RENDERBUFFER_BLUE_SIZE: Int\n val RENDERBUFFER_ALPHA_SIZE: Int\n val RENDERBUFFER_DEPTH_SIZE: Int\n val RENDERBUFFER_STENCIL_SIZE: Int\n val FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: Int\n val FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: Int\n val FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: Int\n val FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: Int\n val COLOR_ATTACHMENT0: Int\n val DEPTH_ATTACHMENT: Int\n val STENCIL_ATTACHMENT: Int\n val DEPTH_STENCIL_ATTACHMENT: Int\n val NONE: Int\n val FRAMEBUFFER_COMPLETE: Int\n val FRAMEBUFFER_INCOMPLETE_ATTACHMENT: Int\n val FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: Int\n val FRAMEBUFFER_INCOMPLETE_DIMENSIONS: Int\n val FRAMEBUFFER_UNSUPPORTED: Int\n val FRAMEBUFFER_BINDING: Int\n val RENDERBUFFER_BINDING: Int\n val MAX_RENDERBUFFER_SIZE: Int\n val INVALID_FRAMEBUFFER_OPERATION: Int\n val UNPACK_FLIP_Y_WEBGL: Int\n val UNPACK_PREMULTIPLY_ALPHA_WEBGL: Int\n val CONTEXT_LOST_WEBGL: Int\n val UNPACK_COLORSPACE_CONVERSION_WEBGL: Int\n val BROWSER_DEFAULT_WEBGL: Int\n }\n}\n\n/**\n * Exposes the JavaScript [WebGLContextEvent](https://developer.mozilla.org/en/docs/Web/API/WebGLContextEvent) to Kotlin\n */\npublic external open class WebGLContextEvent(type: String, eventInit: WebGLContextEventInit = definedExternally) : Event {\n open val statusMessage: String\n\n companion object {\n val NONE: Short\n val CAPTURING_PHASE: Short\n val AT_TARGET: Short\n val BUBBLING_PHASE: Short\n }\n}\n\npublic external interface WebGLContextEventInit : EventInit {\n var statusMessage: String? /* = \"\" */\n get() = definedExternally\n set(value) = definedExternally\n}\n\n@kotlin.internal.InlineOnly\npublic inline fun WebGLContextEventInit(statusMessage: String? = \"\", bubbles: Boolean? = false, cancelable: Boolean? = false, composed: Boolean? = false): WebGLContextEventInit {\n val o = js(\"({})\")\n o[\"statusMessage\"] = statusMessage\n o[\"bubbles\"] = bubbles\n o[\"cancelable\"] = cancelable\n o[\"composed\"] = composed\n return o\n}\n\n/**\n * Exposes the JavaScript [ArrayBuffer](https://developer.mozilla.org/en/docs/Web/API/ArrayBuffer) to Kotlin\n */\npublic external open class ArrayBuffer(length: Int) : BufferDataSource {\n open val byteLength: Int\n fun slice(begin: Int, end: Int = definedExternally): ArrayBuffer\n\n companion object {\n fun isView(value: Any?): Boolean\n }\n}\n\n/**\n * Exposes the JavaScript [ArrayBufferView](https://developer.mozilla.org/en/docs/Web/API/ArrayBufferView) to Kotlin\n */\npublic external interface ArrayBufferView : BufferDataSource {\n val buffer: ArrayBuffer\n val byteOffset: Int\n val byteLength: Int\n}\n\n/**\n * Exposes the JavaScript [Int8Array](https://developer.mozilla.org/en/docs/Web/API/Int8Array) to Kotlin\n */\npublic external open class Int8Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Int8Array)\n constructor(array: Array<Byte>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Int8Array, offset: Int = definedExternally)\n fun set(array: Array<Byte>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Int8Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int8Array.get(index: Int): Byte = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int8Array.set(index: Int, value: Byte) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Uint8Array](https://developer.mozilla.org/en/docs/Web/API/Uint8Array) to Kotlin\n */\npublic external open class Uint8Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Uint8Array)\n constructor(array: Array<Byte>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Uint8Array, offset: Int = definedExternally)\n fun set(array: Array<Byte>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Uint8Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint8Array.get(index: Int): Byte = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint8Array.set(index: Int, value: Byte) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Uint8ClampedArray](https://developer.mozilla.org/en/docs/Web/API/Uint8ClampedArray) to Kotlin\n */\npublic external open class Uint8ClampedArray : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Uint8ClampedArray)\n constructor(array: Array<Byte>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Uint8ClampedArray, offset: Int = definedExternally)\n fun set(array: Array<Byte>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Uint8ClampedArray\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint8ClampedArray.get(index: Int): Byte = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint8ClampedArray.set(index: Int, value: Byte) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Int16Array](https://developer.mozilla.org/en/docs/Web/API/Int16Array) to Kotlin\n */\npublic external open class Int16Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Int16Array)\n constructor(array: Array<Short>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Int16Array, offset: Int = definedExternally)\n fun set(array: Array<Short>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Int16Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int16Array.get(index: Int): Short = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int16Array.set(index: Int, value: Short) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Uint16Array](https://developer.mozilla.org/en/docs/Web/API/Uint16Array) to Kotlin\n */\npublic external open class Uint16Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Uint16Array)\n constructor(array: Array<Short>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Uint16Array, offset: Int = definedExternally)\n fun set(array: Array<Short>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Uint16Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint16Array.get(index: Int): Short = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint16Array.set(index: Int, value: Short) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Int32Array](https://developer.mozilla.org/en/docs/Web/API/Int32Array) to Kotlin\n */\npublic external open class Int32Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Int32Array)\n constructor(array: Array<Int>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Int32Array, offset: Int = definedExternally)\n fun set(array: Array<Int>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Int32Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int32Array.get(index: Int): Int = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Int32Array.set(index: Int, value: Int) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Uint32Array](https://developer.mozilla.org/en/docs/Web/API/Uint32Array) to Kotlin\n */\npublic external open class Uint32Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Uint32Array)\n constructor(array: Array<Int>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Uint32Array, offset: Int = definedExternally)\n fun set(array: Array<Int>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Uint32Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint32Array.get(index: Int): Int = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Uint32Array.set(index: Int, value: Int) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Float32Array](https://developer.mozilla.org/en/docs/Web/API/Float32Array) to Kotlin\n */\npublic external open class Float32Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Float32Array)\n constructor(array: Array<Float>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Float32Array, offset: Int = definedExternally)\n fun set(array: Array<Float>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Float32Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Float32Array.get(index: Int): Float = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Float32Array.set(index: Int, value: Float) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [Float64Array](https://developer.mozilla.org/en/docs/Web/API/Float64Array) to Kotlin\n */\npublic external open class Float64Array : ArrayBufferView {\n constructor(length: Int)\n constructor(array: Float64Array)\n constructor(array: Array<Double>)\n constructor(buffer: ArrayBuffer, byteOffset: Int = definedExternally, length: Int = definedExternally)\n open val length: Int\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun set(array: Float64Array, offset: Int = definedExternally)\n fun set(array: Array<Double>, offset: Int = definedExternally)\n fun subarray(start: Int, end: Int): Float64Array\n\n companion object {\n val BYTES_PER_ELEMENT: Int\n }\n}\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Float64Array.get(index: Int): Double = asDynamic()[index]\n\n@kotlin.internal.InlineOnly\npublic inline operator fun Float64Array.set(index: Int, value: Double) { asDynamic()[index] = value }\n\n/**\n * Exposes the JavaScript [DataView](https://developer.mozilla.org/en/docs/Web/API/DataView) to Kotlin\n */\npublic external open class DataView(buffer: ArrayBuffer, byteOffset: Int = definedExternally, byteLength: Int = definedExternally) : ArrayBufferView {\n override val buffer: ArrayBuffer\n override val byteOffset: Int\n override val byteLength: Int\n fun getInt8(byteOffset: Int): Byte\n fun getUint8(byteOffset: Int): Byte\n fun getInt16(byteOffset: Int, littleEndian: Boolean = definedExternally): Short\n fun getUint16(byteOffset: Int, littleEndian: Boolean = definedExternally): Short\n fun getInt32(byteOffset: Int, littleEndian: Boolean = definedExternally): Int\n fun getUint32(byteOffset: Int, littleEndian: Boolean = definedExternally): Int\n fun getFloat32(byteOffset: Int, littleEndian: Boolean = definedExternally): Float\n fun getFloat64(byteOffset: Int, littleEndian: Boolean = definedExternally): Double\n fun setInt8(byteOffset: Int, value: Byte)\n fun setUint8(byteOffset: Int, value: Byte)\n fun setInt16(byteOffset: Int, value: Short, littleEndian: Boolean = definedExternally)\n fun setUint16(byteOffset: Int, value: Short, littleEndian: Boolean = definedExternally)\n fun setInt32(byteOffset: Int, value: Int, littleEndian: Boolean = definedExternally)\n fun setUint32(byteOffset: Int, value: Int, littleEndian: Boolean = definedExternally)\n fun setFloat32(byteOffset: Int, value: Float, littleEndian: Boolean = definedExternally)\n fun setFloat64(byteOffset: Int, value: Double, littleEndian: Boolean = definedExternally)\n}\n\npublic external interface BufferDataSource\n\npublic external interface TexImageSource","package io.ktor.utils.io.charsets\n\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.js.*\nimport org.khronos.webgl.*\n\npublic actual abstract class Charset(internal val _name: String) {\n public actual abstract fun newEncoder(): CharsetEncoder\n public actual abstract fun newDecoder(): CharsetDecoder\n\n public actual companion object {\n public actual fun forName(name: String): Charset {\n if (name == \"UTF-8\" || name == \"utf-8\" || name == \"UTF8\" || name == \"utf8\") return Charsets.UTF_8\n if (name == \"ISO-8859-1\" || name == \"iso-8859-1\" || name.replace('_', '-').let {\n it == \"iso-8859-1\" || it.toLowerCase() == \"iso-8859-1\"\n } || name == \"latin1\"\n ) {\n return Charsets.ISO_8859_1\n }\n throw IllegalArgumentException(\"Charset $name is not supported\")\n }\n }\n}\n\npublic actual val Charset.name: String get() = _name\n\n// -----------------------\n\npublic actual abstract class CharsetEncoder(internal val _charset: Charset)\nprivate data class CharsetEncoderImpl(private val charset: Charset) : CharsetEncoder(charset)\npublic actual val CharsetEncoder.charset: Charset get() = _charset\n\npublic actual fun CharsetEncoder.encodeToByteArray(input: CharSequence, fromIndex: Int, toIndex: Int): ByteArray =\n encodeToByteArrayImpl1(input, fromIndex, toIndex)\n\ninternal actual fun CharsetEncoder.encodeImpl(input: CharSequence, fromIndex: Int, toIndex: Int, dst: Buffer): Int {\n require(fromIndex <= toIndex)\n if (charset == Charsets.ISO_8859_1) {\n return encodeISO88591(input, fromIndex, toIndex, dst)\n }\n\n require(charset === Charsets.UTF_8) { \"Only UTF-8 encoding is supported in JS\" }\n\n val encoder = TextEncoder() // Only UTF-8 is supported so we know that at most 6 bytes per character is used\n var start = fromIndex\n var dstRemaining = dst.writeRemaining\n\n while (start < toIndex && dstRemaining > 0) {\n val numChars = minOf(toIndex - start, dstRemaining / 6).coerceAtLeast(1)\n val dropLastChar = input[start + numChars - 1].isHighSurrogate()\n val endIndexExclusive = when {\n dropLastChar && numChars == 1 -> start + 2\n dropLastChar -> start + numChars - 1\n else -> start + numChars\n }\n\n val array1 = encoder.encode(input.substring(start, endIndexExclusive))\n if (array1.length > dstRemaining) break\n dst.writeFully(array1)\n start = endIndexExclusive\n dstRemaining -= array1.length\n }\n\n return start - fromIndex\n}\n\npublic actual fun CharsetEncoder.encodeUTF8(input: ByteReadPacket, dst: Output) {\n require(charset === Charsets.UTF_8)\n // we only support UTF-8 so as far as input is UTF-8 encoded string then we simply copy bytes\n dst.writePacket(input)\n}\n\ninternal actual fun CharsetEncoder.encodeComplete(dst: Buffer): Boolean = true\n\n// ----------------------------------------------------------------------\n\npublic actual abstract class CharsetDecoder(internal val _charset: Charset)\n\nprivate data class CharsetDecoderImpl(private val charset: Charset) : CharsetDecoder(charset)\n\npublic actual val CharsetDecoder.charset: Charset get() = _charset\n\ninternal actual fun CharsetDecoder.decodeBuffer(\n input: Buffer,\n out: Appendable,\n lastBuffer: Boolean,\n max: Int\n): Int {\n if (max == 0) return 0\n\n val decoder = Decoder(charset.name)\n val copied: Int\n\n input.readDirectInt8Array { view ->\n val result = view.decodeBufferImpl(decoder, max)\n out.append(result.charactersDecoded)\n copied = result.bytesConsumed\n\n result.bytesConsumed\n }\n\n return copied\n}\n\npublic actual fun CharsetDecoder.decode(input: Input, dst: Appendable, max: Int): Int {\n val decoder = Decoder(charset.name, true)\n var charactersCopied = 0\n\n // use decode stream while we have remaining characters count > buffer size in bytes\n // it is much faster than using decodeBufferImpl\n input.takeWhileSize { buffer ->\n val rem = max - charactersCopied\n val bufferSize = buffer.readRemaining\n if (rem < bufferSize) return@takeWhileSize 0\n\n buffer.readDirectInt8Array { view ->\n val decodedText = decodeWrap {\n decoder.decodeStream(view, stream = true)\n }\n dst.append(decodedText)\n charactersCopied += decodedText.length\n view.byteLength\n }\n\n when {\n charactersCopied == max -> {\n val tail = try {\n decoder.decode()\n } catch (_: dynamic) {\n \"\"\n }\n\n if (tail.isNotEmpty()) {\n // if we have a trailing byte then we can't handle this chunk via fast-path\n // because we don't know how many bytes in the end we need to preserve\n buffer.rewind(bufferSize)\n }\n 0\n }\n charactersCopied < max -> MAX_CHARACTERS_SIZE_IN_BYTES\n else -> 0\n }\n }\n\n if (charactersCopied < max) {\n var size = 1\n input.takeWhileSize(1) { buffer ->\n val rc = buffer.readDirectInt8Array { view ->\n val result = view.decodeBufferImpl(decoder, max - charactersCopied)\n dst.append(result.charactersDecoded)\n charactersCopied += result.charactersDecoded.length\n result.bytesConsumed\n }\n when {\n rc > 0 -> size = 1\n size == MAX_CHARACTERS_SIZE_IN_BYTES -> size = 0\n else -> size++\n }\n\n size\n }\n }\n\n return charactersCopied\n}\n\npublic actual fun CharsetDecoder.decodeExactBytes(input: Input, inputLength: Int): String {\n if (inputLength == 0) return \"\"\n if (input is AbstractInput && input.headRemaining >= inputLength) {\n val decoder = Decoder(charset._name, true)\n\n val head = input.head\n val view = input.headMemory.view\n\n val text = decodeWrap {\n val subView: ArrayBufferView = when {\n head.readPosition == 0 && inputLength == view.byteLength -> view\n else -> DataView(view.buffer, view.byteOffset + head.readPosition, inputLength)\n }\n\n decoder.decode(subView)\n }\n\n input.discardExact(inputLength)\n return text\n }\n\n return decodeExactBytesSlow(input, inputLength)\n}\n\n// -----------------------------------------------------------\n\npublic actual object Charsets {\n public actual val UTF_8: Charset = CharsetImpl(\"UTF-8\")\n public actual val ISO_8859_1: Charset = CharsetImpl(\"ISO-8859-1\")\n}\n\nprivate data class CharsetImpl(val name: String) : Charset(name) {\n override fun newEncoder(): CharsetEncoder = CharsetEncoderImpl(this)\n override fun newDecoder(): CharsetDecoder = CharsetDecoderImpl(this)\n}\n\npublic actual open class MalformedInputException actual constructor(message: String) : Throwable(message)\n\nprivate fun CharsetDecoder.decodeExactBytesSlow(input: Input, inputLength: Int): String {\n val decoder = Decoder(charset.name, true)\n var inputRemaining = inputLength\n val sb = StringBuilder(inputLength)\n\n decodeWrap {\n input.takeWhileSize(6) { buffer ->\n val chunkSize = buffer.readRemaining\n val size = minOf(chunkSize, inputRemaining)\n val text = when {\n buffer.readPosition == 0 && buffer.memory.view.byteLength == size -> decoder.decodeStream(\n buffer.memory.view,\n true\n )\n else -> decoder.decodeStream(\n Int8Array(\n buffer.memory.view.buffer,\n buffer.memory.view.byteOffset + buffer.readPosition,\n size\n ),\n true\n )\n }\n sb.append(text)\n\n buffer.discardExact(size)\n inputRemaining -= size\n\n if (inputRemaining > 0) 6 else 0\n }\n\n if (inputRemaining > 0) {\n input.takeWhile { buffer ->\n val chunkSize = buffer.readRemaining\n val size = minOf(chunkSize, inputRemaining)\n val text = when {\n buffer.readPosition == 0 && buffer.memory.view.byteLength == size -> {\n decoder.decode(buffer.memory.view)\n }\n else -> decoder.decodeStream(\n Int8Array(\n buffer.memory.view.buffer,\n buffer.memory.view.byteOffset + buffer.readPosition,\n size\n ),\n true\n )\n }\n sb.append(text)\n buffer.discardExact(size)\n inputRemaining -= size\n true\n }\n }\n\n sb.append(decoder.decode())\n }\n\n if (inputRemaining > 0) {\n throw EOFException(\n \"Not enough bytes available: had only ${inputLength - inputRemaining} instead of $inputLength\"\n )\n }\n return sb.toString()\n}\n","package io.ktor.utils.io.js\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport org.khronos.webgl.*\n\n@Deprecated(\n \"Use readText with charset instead\",\n ReplaceWith(\n \"readText(Charset.forName(encoding), max)\",\n \"io.ktor.utils.io.core.readText\",\n \"io.ktor.utils.io.charsets.Charset\"\n )\n)\npublic fun ByteReadPacket.readText(encoding: String, max: Int = Int.MAX_VALUE): String =\n readText(Charset.forName(encoding), max)\n\n@Deprecated(\n \"Use readText with charset instead\",\n ReplaceWith(\n \"readText(out, Charset.forName(encoding), max)\",\n \"io.ktor.utils.io.core.readText\",\n \"io.ktor.utils.io.charsets.Charset\"\n )\n)\npublic fun ByteReadPacket.readText(encoding: String = \"UTF-8\", out: Appendable, max: Int = Int.MAX_VALUE): Int {\n return readText(out, Charset.forName(encoding), max)\n}\n\ninternal inline fun <R> decodeWrap(block: () -> R): R {\n try {\n return block()\n } catch (t: Throwable) {\n throw MalformedInputException(\"Failed to decode bytes: ${t.message ?: \"no cause provided\"}\")\n }\n}\n","/*\n * Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.js\n\nimport org.khronos.webgl.*\n\ninternal fun Decoder(encoding: String, fatal: Boolean = true): Decoder = try {\n TextDecoder(encoding, textDecoderOptions(fatal)).toKtor()\n} catch (cause: Throwable) {\n TextDecoderFallback(encoding, fatal)\n}\n\ninternal interface Decoder {\n fun decode(): String\n fun decode(buffer: ArrayBufferView): String\n fun decode(buffer: ArrayBufferView, options: dynamic): String\n}\n\ninternal inline fun Decoder.decodeStream(buffer: ArrayBufferView, stream: Boolean): String {\n decodeWrap {\n return decode(buffer, decodeOptions(stream))\n }\n}\n\ninternal fun decodeOptions(stream: Boolean): dynamic = Any().apply {\n with(this.asDynamic()) {\n this.stream = stream\n }\n}\n","package io.ktor.utils.io.charsets\n\nimport io.ktor.utils.io.js.*\nimport org.khronos.webgl.*\n\n// I don't know any characters that have longer characters\ninternal const val MAX_CHARACTERS_SIZE_IN_BYTES: Int = 8\nprivate const val MAX_CHARACTERS_COUNT = Int.MAX_VALUE / MAX_CHARACTERS_SIZE_IN_BYTES\n\ninternal data class DecodeBufferResult(val charactersDecoded: String, val bytesConsumed: Int)\n\ninternal fun Int8Array.decodeBufferImpl(nativeDecoder: Decoder, maxCharacters: Int): DecodeBufferResult {\n if (maxCharacters == 0) {\n return DecodeBufferResult(\"\", 0)\n }\n\n // fast-path: try to assume that we have 1 byte per character content\n try {\n val sizeInBytes = maxCharacters.coerceAtMost(byteLength)\n val text = nativeDecoder.decode(subarray(0, sizeInBytes))\n if (text.length <= maxCharacters) {\n return DecodeBufferResult(text, sizeInBytes)\n }\n } catch (_: dynamic) {\n }\n\n return decodeBufferImplSlow(nativeDecoder, maxCharacters)\n}\n\nprivate fun Int8Array.decodeBufferImplSlow(nativeDecoder: Decoder, maxCharacters: Int): DecodeBufferResult {\n val maxBytes = when {\n maxCharacters >= MAX_CHARACTERS_COUNT -> Int.MAX_VALUE\n else -> maxCharacters * MAX_CHARACTERS_SIZE_IN_BYTES\n }.coerceAtMost(byteLength)\n\n var sizeInBytes = maxBytes\n while (sizeInBytes > MAX_CHARACTERS_SIZE_IN_BYTES) {\n try {\n val text = nativeDecoder.decode(subarray(0, sizeInBytes))\n if (text.length <= maxCharacters) {\n return DecodeBufferResult(text, sizeInBytes)\n }\n } catch (_: dynamic) {\n }\n\n sizeInBytes /= 2\n }\n\n sizeInBytes = MAX_CHARACTERS_SIZE_IN_BYTES\n while (sizeInBytes > 0) {\n try {\n val text = nativeDecoder.decode(subarray(0, sizeInBytes))\n if (text.length <= maxCharacters) {\n return DecodeBufferResult(text, sizeInBytes)\n }\n } catch (_: dynamic) {\n }\n\n sizeInBytes--\n }\n\n // all attempts were failed so most likely we have a broken character but we can't find it for some reason\n // so the following decode most likely will fail\n decodeWrap {\n nativeDecoder.decode(this)\n }\n\n // if it didn't for some reason we have no idea what to do\n throw MalformedInputException(\"Unable to decode buffer\")\n}\n","package io.ktor.utils.io.charsets\n\nimport io.ktor.utils.io.core.*\nimport org.khronos.webgl.*\n\ninternal fun encodeISO88591(input: CharSequence, fromIndex: Int, toIndex: Int, dst: Buffer): Int {\n if (fromIndex >= toIndex) return 0\n\n dst.writeDirect { view ->\n val i8 = Int8Array(view.buffer, view.byteOffset, view.byteLength)\n var writeIndex = 0\n for (index in fromIndex until toIndex) {\n val character = input[index].toInt()\n if (character > 0xff) {\n failedToMapError(character)\n }\n i8[writeIndex++] = character.toByte()\n }\n writeIndex\n }\n return toIndex - fromIndex\n}\n\nprivate fun failedToMapError(ch: Int): Nothing {\n throw MalformedInputException(\"The character with unicode point $ch couldn't be mapped to ISO-8859-1 character\")\n}\n","@file:Suppress(\"ReplaceRangeToWithUntil\", \"RedundantModalityModifier\", \"DEPRECATION\", \"DEPRECATION_ERROR\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\nimport org.khronos.webgl.*\nimport kotlin.contracts.*\n\n@Suppress(\"DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES\")\n@Deprecated(\"Use Buffer instead.\", replaceWith = ReplaceWith(\"Buffer\", \"io.ktor.utils.io.core.Buffer\"))\npublic actual class IoBuffer actual constructor(\n memory: Memory,\n origin: ChunkBuffer?\n) : Input, Output, ChunkBuffer(memory, origin) {\n private val content: ArrayBuffer get() = memory.view.buffer\n\n override val endOfInput: Boolean get() = writePosition == readPosition\n\n @Deprecated(\n \"Not supported anymore. All operations are big endian by default. \" +\n \"Read/write with readXXXLittleEndian/writeXXXLittleEndian or \" +\n \"do readXXX/writeXXX with X.reverseByteOrder() instead.\",\n level = DeprecationLevel.ERROR\n )\n actual final override var byteOrder: ByteOrder\n get() = ByteOrder.BIG_ENDIAN\n set(newOrder) {\n if (newOrder != ByteOrder.BIG_ENDIAN) {\n throw IllegalArgumentException(\"Only big endian is supported\")\n }\n }\n\n final override fun peekTo(destination: Memory, destinationOffset: Long, offset: Long, min: Long, max: Long): Long {\n return (this as Buffer).peekTo(destination, destinationOffset, offset, min, max)\n }\n\n final override fun tryPeek(): Int {\n return tryPeekByte()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readFully(dst: ArrayBuffer, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: ArrayBuffer, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readAvailable(dst: IoBuffer, length: Int): Int {\n return (this as Buffer).readAvailable(dst, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: ArrayBufferView, offset: Int, length: Int) {\n if (readRemaining < length) throw IllegalStateException(\n \"Not enough bytes available ($readRemaining) to read $length bytes\"\n )\n if (length > dst.byteLength) throw IllegalArgumentException(\n \"Destination buffer overflow: length = $length, buffer capacity ${dst.byteLength}\"\n )\n require(offset >= 0) { \"offset should be positive\" }\n require(offset + length <= dst.byteLength) { throw IndexOutOfBoundsException(\"\") }\n\n (this as Buffer).readFully(dst.buffer, dst.byteOffset + offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: ArrayBufferView, offset: Int, length: Int): Int {\n val readRemaining = readRemaining\n if (readRemaining == 0) return -1\n val size = minOf(length, readRemaining)\n (this as Buffer).readFully(dst, offset, size)\n return size\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: Int8Array, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: Int8Array, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readFully(dst: IoBuffer, length: Int) {\n (this as Buffer).readFully(dst, length)\n }\n\n final override fun append(csq: CharSequence?, start: Int, end: Int): Appendable {\n val idx = appendChars(csq ?: \"null\", start, end)\n if (idx != end) throw IllegalStateException(\"Not enough free space to append char sequence\")\n return this\n }\n\n final override fun append(csq: CharSequence?): Appendable {\n return if (csq == null) append(\"null\") else append(csq, 0, csq.length)\n }\n\n final override fun append(csq: CharArray, start: Int, end: Int): Appendable {\n val idx = appendChars(csq, start, end)\n\n if (idx != end) throw IllegalStateException(\"Not enough free space to append char sequence\")\n return this\n }\n\n override fun append(c: Char): Appendable {\n (this as Buffer).append(c)\n return this\n }\n\n @Deprecated(\n \"Use writeFully instead\",\n ReplaceWith(\"writeFully(array, offset, length)\"),\n level = DeprecationLevel.ERROR\n )\n public fun write(array: ByteArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(array, offset, length)\n }\n\n @Deprecated(\n \"Use writeFully instead\",\n ReplaceWith(\"writeFully(array, offset, length)\"),\n level = DeprecationLevel.ERROR\n )\n public fun write(src: Int8Array, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readShort(): Short {\n return (this as Buffer).readShort()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readInt(): Int {\n return (this as Buffer).readInt()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFloat(): Float {\n return (this as Buffer).readFloat()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readDouble(): Double {\n return (this as Buffer).readDouble()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: ByteArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: ShortArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: IntArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: LongArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: FloatArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readFully(dst: DoubleArray, offset: Int, length: Int) {\n (this as Buffer).readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: ByteArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: ShortArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: IntArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: LongArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: FloatArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun readAvailable(dst: DoubleArray, offset: Int, length: Int): Int {\n return (this as Buffer).readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun peekTo(buffer: IoBuffer): Int {\n return (this as Input).peekTo(buffer)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun readLong(): Long {\n return (this as Buffer).readLong()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeShort(v: Short) {\n (this as Buffer).writeShort(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeInt(v: Int) {\n (this as Buffer).writeInt(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFloat(v: Float) {\n (this as Buffer).writeFloat(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeDouble(v: Double) {\n (this as Buffer).writeDouble(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: ByteArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: ShortArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: IntArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: LongArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: FloatArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: DoubleArray, offset: Int, length: Int) {\n (this as Buffer).writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun writeFully(src: IoBuffer, length: Int) {\n (this as Buffer).writeFully(src, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n override fun fill(n: Long, v: Byte) {\n (this as Buffer).fill(n, v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n final override fun writeLong(v: Long) {\n (this as Buffer).writeLong(v)\n }\n\n @Deprecated(\"Use writeFully instead\", ReplaceWith(\"writeFully(src, length)\"), level = DeprecationLevel.ERROR)\n public fun writeBuffer(src: IoBuffer, length: Int): Int {\n (this as Buffer).writeFully(src, length)\n return length\n }\n\n actual final override fun flush() {\n }\n\n @PublishedApi\n internal fun readableView(): DataView {\n val readPosition = readPosition\n val writePosition = writePosition\n\n return when {\n readPosition == writePosition -> EmptyDataView\n readPosition == 0 && writePosition == content.byteLength -> memory.view\n else -> DataView(content, readPosition, writePosition - readPosition)\n }\n }\n\n @PublishedApi\n internal fun writableView(): DataView {\n val writePosition = writePosition\n val limit = limit\n\n return when {\n writePosition == limit -> EmptyDataView\n writePosition == 0 && limit == content.byteLength -> memory.view\n else -> DataView(content, writePosition, limit - writePosition)\n }\n }\n\n /**\n * Apply [block] function on a [DataView] of readable bytes.\n * The [block] function should return number of consumed bytes.\n * @return number of bytes consumed\n */\n @ExperimentalIoApi\n public inline fun readDirect(block: (DataView) -> Int): Int {\n val view = readableView()\n val rc = block(view)\n check(rc >= 0) { \"The returned value from block function shouldn't be negative: $rc\" }\n discard(rc)\n return rc\n }\n\n /**\n * Apply [block] function on a [DataView] of the free space.\n * The [block] function should return number of written bytes.\n * @return number of bytes written\n */\n @ExperimentalIoApi\n public inline fun writeDirect(block: (DataView) -> Int): Int {\n val view = writableView()\n val rc = block(view)\n check(rc >= 0) { \"The returned value from block function shouldn't be negative: $rc\" }\n check(rc <= writeRemaining) { \"The returned value from block function is too big: $rc > $writeRemaining\" }\n commitWritten(rc)\n return rc\n }\n\n public actual fun release(pool: ObjectPool<IoBuffer>) {\n releaseImpl(pool)\n }\n\n actual override fun close() {\n throw UnsupportedOperationException(\"close for buffer view is not supported\")\n }\n\n override fun toString(): String =\n \"Buffer[readable = $readRemaining, writable = $writeRemaining, startGap = $startGap, endGap = $endGap]\"\n\n public actual companion object {\n /**\n * Number of bytes usually reserved in the end of chunk\n * when several instances of [IoBuffer] are connected into a chain (usually inside of [ByteReadPacket]\n * or [BytePacketBuilder])\n */\n @DangerousInternalIoApi\n public actual val ReservedSize: Int\n get() = Buffer.ReservedSize\n\n private val EmptyBuffer = ArrayBuffer(0)\n private val EmptyDataView = DataView(EmptyBuffer)\n\n public actual val Empty: IoBuffer = IoBuffer(Memory.Empty, null)\n\n /**\n * The default buffer pool\n */\n public actual val Pool: ObjectPool<IoBuffer> = object : DefaultPool<IoBuffer>(BUFFER_VIEW_POOL_SIZE) {\n override fun produceInstance(): IoBuffer {\n return IoBuffer(DefaultAllocator.alloc(DEFAULT_BUFFER_SIZE), null)\n }\n\n override fun clearInstance(instance: IoBuffer): IoBuffer {\n return super.clearInstance(instance).apply {\n unpark()\n reset()\n }\n }\n\n override fun validateInstance(instance: IoBuffer) {\n super.validateInstance(instance)\n\n require(instance.referenceCount == 0) {\n \"unable to recycle buffer: buffer view is in use (refCount = ${instance.referenceCount})\"\n }\n require(instance.origin == null) {\n \"Unable to recycle buffer view: view copy shouldn't be recycled\"\n }\n }\n\n override fun disposeInstance(instance: IoBuffer) {\n DefaultAllocator.free(instance.memory)\n instance.unlink()\n }\n }\n\n public actual val NoPool: ObjectPool<IoBuffer> = object : NoPoolImpl<IoBuffer>() {\n override fun borrow(): IoBuffer {\n return IoBuffer(DefaultAllocator.alloc(DEFAULT_BUFFER_SIZE), null)\n }\n\n override fun recycle(instance: IoBuffer) {\n DefaultAllocator.free(instance.memory)\n }\n }\n\n public actual val EmptyPool: ObjectPool<IoBuffer> = EmptyBufferPoolImpl\n }\n}\n\npublic fun Buffer.readFully(dst: ArrayBuffer, offset: Int = 0, length: Int = dst.byteLength - offset) {\n read { memory, start, endExclusive ->\n if (endExclusive - start < length) {\n throw EOFException(\"Not enough bytes available to read $length bytes\")\n }\n\n memory.copyTo(dst, start, length, offset)\n length\n }\n}\n\npublic fun Buffer.readFully(dst: ArrayBufferView, offset: Int = 0, length: Int = dst.byteLength - offset) {\n read { memory, start, endExclusive ->\n if (endExclusive - start < length) {\n throw EOFException(\"Not enough bytes available to read $length bytes\")\n }\n\n memory.copyTo(dst, start, length, offset)\n length\n }\n}\n\npublic fun Buffer.readAvailable(dst: ArrayBuffer, offset: Int = 0, length: Int = dst.byteLength - offset): Int {\n if (!canRead()) return -1\n val readSize = minOf(length, readRemaining)\n readFully(dst, offset, readSize)\n return readSize\n}\n\npublic fun Buffer.readAvailable(dst: ArrayBufferView, offset: Int = 0, length: Int = dst.byteLength - offset): Int {\n if (!canRead()) return -1\n val readSize = minOf(length, readRemaining)\n readFully(dst, offset, readSize)\n return readSize\n}\n\npublic fun Buffer.writeFully(src: ArrayBuffer, offset: Int = 0, length: Int = src.byteLength) {\n write { memory, start, endExclusive ->\n if (endExclusive - start < length) {\n throw InsufficientSpaceException(\"Not enough free space to write $length bytes\")\n }\n\n src.copyTo(memory, offset, length, start)\n length\n }\n}\n\npublic fun Buffer.writeFully(src: ArrayBufferView, offset: Int = 0, length: Int = src.byteLength - offset) {\n write { memory, dstOffset, endExclusive ->\n if (endExclusive - dstOffset < length) {\n throw InsufficientSpaceException(\"Not enough free space to write $length bytes\")\n }\n\n src.copyTo(memory, offset, length, dstOffset)\n length\n }\n}\n\npublic inline fun Buffer.writeDirect(block: (DataView) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n return write { memory, start, endExclusive ->\n block(memory.slice(start, endExclusive - start).view)\n }\n}\n\npublic inline fun Buffer.readDirect(block: (DataView) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n return read { memory, start, endExclusive ->\n block(memory.slice(start, endExclusive - start).view)\n }\n}\n\npublic inline fun Buffer.writeDirectInt8Array(block: (Int8Array) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n return write { memory, start, endExclusive ->\n block(Int8Array(memory.view.buffer, memory.view.byteOffset + start, endExclusive - start))\n }\n}\n\npublic inline fun Buffer.readDirectInt8Array(block: (Int8Array) -> Int): Int {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n return read { memory, start, endExclusive ->\n block(Int8Array(memory.view.buffer, memory.view.byteOffset + start, endExclusive - start))\n }\n}\n","// ktlint-disable filename\npackage io.ktor.utils.io.core\n\nimport org.khronos.webgl.*\n\npublic actual enum class ByteOrder {\n BIG_ENDIAN, LITTLE_ENDIAN;\n\n public actual companion object {\n private val native: ByteOrder\n\n init {\n val buffer = ArrayBuffer(4)\n val arr = Int32Array(buffer)\n val view = DataView(buffer)\n\n arr[0] = 0x11223344\n\n native = if (view.getInt32(0, true) == 0x11223344) LITTLE_ENDIAN else BIG_ENDIAN\n }\n\n public actual fun nativeOrder(): ByteOrder = native\n }\n}\n","@file:Suppress(\"FunctionName\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport io.ktor.utils.io.pool.*\nimport org.khronos.webgl.*\n\npublic actual fun ByteReadPacket(\n array: ByteArray,\n offset: Int,\n length: Int,\n block: (ByteArray) -> Unit\n): ByteReadPacket {\n val content = array.asDynamic() as Int8Array\n val sub = when {\n offset == 0 && length == array.size -> content.buffer\n else -> content.buffer.slice(offset, offset + length)\n }\n\n val pool = object : SingleInstancePool<ChunkBuffer>() {\n override fun produceInstance(): ChunkBuffer {\n @Suppress(\"DEPRECATION\")\n return IoBuffer(Memory.of(sub), null)\n }\n\n override fun disposeInstance(instance: ChunkBuffer) {\n @Suppress(\"DEPRECATION\")\n check(instance is IoBuffer) { \"Only IoBuffer could be recycled\" }\n block(array)\n }\n }\n\n return ByteReadPacket(pool.borrow().apply { resetForRead() }, pool)\n}\n","package io.ktor.utils.io.core\n\npublic actual interface Closeable {\n public actual fun close()\n}\n\n@PublishedApi\ninternal actual fun Throwable.addSuppressedInternal(other: Throwable) {\n}\n","@file:Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\")\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\nimport org.khronos.webgl.*\n\npublic fun Input.readFully(dst: Int8Array, offset: Int = 0, length: Int = dst.length - offset) {\n if (this is AbstractInput) {\n return readFully(dst, offset, length)\n }\n\n val rc = readAvailable(dst, offset, length)\n if (rc != length) {\n prematureEndOfStream(length)\n }\n}\n\npublic fun Input.readFully(dst: ArrayBuffer, offset: Int = 0, length: Int = dst.byteLength - offset) {\n if (this is AbstractInput) {\n return readFully(dst, offset, length)\n }\n\n val rc = readAvailable(dst, offset, length)\n if (rc != length) {\n prematureEndOfStream(length)\n }\n}\n\npublic fun Input.readFully(dst: ArrayBufferView, byteOffset: Int = 0, byteLength: Int = dst.byteLength - byteOffset) {\n if (this is AbstractInput) {\n return readFully(dst, byteOffset, byteLength)\n }\n\n val rc = readAvailable(dst, byteOffset, byteLength)\n if (rc != byteLength) {\n prematureEndOfStream(byteLength)\n }\n}\n\npublic fun Input.readAvailable(dst: Int8Array, offset: Int = 0, length: Int = dst.length - offset): Int {\n if (this is AbstractInput) {\n return readAvailable(dst, offset, length)\n }\n\n @Suppress(\"UNCHECKED_CAST_TO_EXTERNAL_INTERFACE\")\n return readAvailable(dst as ArrayBufferView, offset, length)\n}\n\n@Suppress(\"Duplicates\")\npublic fun Input.readAvailable(dst: ArrayBuffer, offset: Int = 0, length: Int = dst.byteLength - offset): Int {\n if (this is AbstractInput) {\n return readAvailable(dst, offset, length)\n }\n\n var bytesCopied = 0\n takeWhile { buffer ->\n val partSize = minOf(buffer.readRemaining, length - bytesCopied)\n buffer.memory.copyTo(dst, buffer.readPosition, partSize, bytesCopied)\n bytesCopied += partSize\n bytesCopied < length\n }\n\n return bytesCopied\n}\n\n@Suppress(\"Duplicates\")\npublic fun Input.readAvailable(\n dst: ArrayBufferView,\n byteOffset: Int = 0,\n byteLength: Int = dst.byteLength - byteOffset\n): Int {\n if (this is AbstractInput) {\n return readAvailable(dst, byteOffset, byteLength)\n }\n\n var bytesCopied = 0\n takeWhile { buffer ->\n val partSize = minOf(buffer.readRemaining, byteLength - bytesCopied)\n buffer.memory.copyTo(dst, buffer.readPosition, partSize, bytesCopied)\n bytesCopied += partSize\n bytesCopied < byteLength\n }\n\n return bytesCopied\n}\n\ninternal fun AbstractInput.readFully(dst: Int8Array, offset: Int, length: Int) {\n @Suppress(\"UNCHECKED_CAST_TO_EXTERNAL_INTERFACE\")\n return readFully(dst as ArrayBufferView, offset, length)\n}\n\ninternal fun AbstractInput.readFully(dst: ArrayBuffer, offset: Int, length: Int) {\n if (remaining < length) throw IllegalArgumentException(\n \"Not enough bytes available ($remaining) to read $length bytes\"\n )\n var copied = 0\n\n takeWhile { buffer: Buffer ->\n val rc = buffer.readAvailable(dst, offset + copied, length - copied)\n if (rc > 0) copied += rc\n copied < length\n }\n}\n\ninternal fun AbstractInput.readFully(dst: ArrayBufferView, offset: Int, length: Int) {\n require(length <= dst.byteLength) {\n throw IndexOutOfBoundsException(\"length $length is greater than view size ${dst.byteLength}\")\n }\n\n return readFully(dst.buffer, dst.byteOffset + offset, length)\n}\n\ninternal fun AbstractInput.readAvailable(dst: Int8Array, offset: Int, length: Int): Int {\n val remaining = remaining\n if (remaining == 0L) return -1\n val size = minOf(remaining, length.toLong()).toInt()\n readFully(dst, offset, size)\n return size\n}\n\ninternal fun AbstractInput.readAvailable(dst: ArrayBuffer, offset: Int, length: Int): Int {\n val remaining = remaining\n if (remaining == 0L) return -1\n val size = minOf(remaining, length.toLong()).toInt()\n readFully(dst, offset, size)\n return size\n}\n\ninternal fun AbstractInput.readAvailable(dst: ArrayBufferView, offset: Int, length: Int): Int {\n val remaining = remaining\n if (remaining == 0L) return -1\n val size = minOf(remaining, length.toLong()).toInt()\n readFully(dst, offset, size)\n return size\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.concurrent\n\nimport io.ktor.utils.io.core.internal.*\nimport kotlin.properties.*\nimport kotlin.reflect.*\n\n/**\n * Allows to create mutate property with frozen value.\n * Please note that any assigned value will be frozen.\n *\n * Usage:\n * ```kotlin\n * var myCounter by shared(0)\n * ```\n */\n@Suppress(\"NOTHING_TO_INLINE\")\n@DangerousInternalIoApi\npublic actual inline fun <T> shared(value: T): ReadWriteProperty<Any, T> = object : ReadWriteProperty<Any, T> {\n private var value: T = value\n\n override fun getValue(thisRef: Any, property: KProperty<*>): T {\n return this.value\n }\n\n override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {\n this.value = value\n }\n}\n\n/**\n * Allow to create thread local reference without freezing.\n * Please note that reference is thread-local only in kotlin-native. Otherwise it will be simple [value] reference.\n *\n * This reference is allowed to use only from creation thread. Otherwise it will return null.\n */\n@DangerousInternalIoApi\npublic actual fun <T : Any> threadLocal(value: T): ReadOnlyProperty<Any, T?> =\n ReadOnlyProperty<Any, T?> { thisRef, property -> value }\n","// ktlint-disable filename\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.Memory\nimport org.khronos.webgl.*\n\n/**\n * Shouldn't be implemented directly. Inherit [AbstractInput] instead.\n */\n@Suppress(\"NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS\")\npublic actual interface Input : Closeable {\n @Deprecated(\n \"Not supported anymore. All operations are big endian by default. \" +\n \"Read and readXXXLittleEndian or readXXX then X.reverseByteOrder() instead.\",\n level = DeprecationLevel.ERROR\n )\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual var byteOrder: ByteOrder\n get() = ByteOrder.BIG_ENDIAN\n set(newValue) {\n if (newValue != ByteOrder.BIG_ENDIAN) {\n throw IllegalArgumentException(\"Only BIG_ENDIAN is supported\")\n }\n }\n\n /**\n * It is `true` when it is known that no more bytes will be available. When it is `false` then this means that\n * it is not known yet or there are available bytes.\n * Please note that `false` value doesn't guarantee that there are available bytes so `readByte()` may fail.\n */\n public actual val endOfInput: Boolean\n\n /**\n * Copy at least [min] but up to [max] bytes to the specified [destination] buffer from this input\n * skipping [offset] bytes. If there are not enough bytes available to provide [min] bytes then\n * it fails with an exception.\n * It is safe to specify `max > destination.writeRemaining` but\n * `min` shouldn't be bigger than the [destination] free space.\n * This function could trigger the underlying source reading that may lead to blocking I/O.\n * It is safe to specify too big [offset] but only if `min = 0`, fails otherwise.\n * This function usually copy more bytes than [min] (unless `max = min`).\n *\n * @param destination to write bytes\n * @param offset to skip input\n * @param min bytes to be copied, shouldn't be greater than the buffer free space. Could be `0`.\n * @param max bytes to be copied even if there are more bytes buffered, could be [Int.MAX_VALUE].\n * @return number of bytes copied to the [destination] possibly `0`\n * @throws Throwable when not enough bytes available to provide\n */\n public actual fun peekTo(\n destination: Memory,\n destinationOffset: Long,\n offset: Long,\n min: Long,\n max: Long\n ): Long\n\n /**\n * Read the next upcoming byte\n * @throws EOFException if no more bytes available.\n */\n public actual fun readByte(): Byte\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readShort(): Short {\n return readShort()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readInt(): Int {\n return readInt()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readLong(): Long {\n return readLong()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFloat(): Float {\n return readFloat()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readDouble(): Double {\n return readDouble()\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: ByteArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: ShortArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: IntArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: LongArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: FloatArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readFully(dst: DoubleArray, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"DEPRECATION\")\n public actual fun readFully(dst: IoBuffer, length: Int) {\n return readFully(dst, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: ByteArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: ShortArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: IntArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: LongArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: FloatArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun readAvailable(dst: DoubleArray, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\", \"DEPRECATION\")\n public actual fun readAvailable(dst: IoBuffer, length: Int): Int {\n return readAvailable(dst, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: Int8Array, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: ArrayBuffer, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readFully(dst: ArrayBufferView, offset: Int, length: Int) {\n return readFully(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: Int8Array, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: ArrayBuffer, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun readAvailable(dst: ArrayBufferView, offset: Int, length: Int): Int {\n return readAvailable(dst, offset, length)\n }\n\n /*\n * Returns next byte (unsigned) or `-1` if no more bytes available\n */\n public actual fun tryPeek(): Int\n\n /**\n * Copy available bytes to the specified [buffer] but keep them available.\n * If the underlying implementation could trigger\n * bytes population from the underlying source and block until any bytes available\n *\n * Very similar to [readAvailable] but don't discard copied bytes.\n *\n * @return number of bytes were copied\n */\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"DEPRECATION\", \"ACTUAL_WITHOUT_EXPECT\")\n public actual fun peekTo(buffer: IoBuffer): Int {\n return peekTo(buffer)\n }\n\n public actual fun discard(n: Long): Long\n\n actual override fun close()\n}\n","// ktlint-disable filename\n/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\n\ninternal actual class AbstractOutputSharedState {\n actual var head: ChunkBuffer? = null\n\n actual var tail: ChunkBuffer? = null\n\n actual var tailMemory: Memory = Memory.Empty\n\n actual var tailPosition: Int = 0\n\n actual var tailEndExclusive: Int = 0\n\n actual var tailInitialPosition: Int = 0\n\n actual var chainedSize: Int = 0\n}\n","// ktlint-disable filename\n/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.internal.*\n\ninternal actual class AbstractInputSharedState actual constructor(\n actual var head: ChunkBuffer,\n remaining: Long\n) {\n actual var headMemory: Memory = head.memory\n\n actual var headPosition: Int = head.readPosition\n\n actual var headEndExclusive: Int = head.writePosition\n\n actual var tailRemaining: Long = remaining - (headEndExclusive - headPosition)\n}\n","// ktlint-disable filename\n/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.core\n\ninternal actual class BufferSharedState actual constructor(actual var limit: Int) {\n actual var readPosition: Int = 0\n\n actual var writePosition: Int = 0\n\n actual var startGap: Int = 0\n\n actual var attachment: Any? = null\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport org.khronos.webgl.*\n\nprivate fun Memory.asInt8Array(): Int8Array {\n return Int8Array(view.buffer, view.byteOffset, view.byteLength)\n}\n\ninternal actual fun Buffer.discardUntilDelimiterImpl(delimiter: Byte): Int {\n val content = memory.asInt8Array()\n var idx = readPosition\n val end = writePosition\n\n while (idx < end) {\n if (content[idx] == delimiter) break\n idx++\n }\n\n val start = readPosition\n discardUntilIndex(idx)\n return idx - start\n}\n\ninternal actual fun Buffer.discardUntilDelimitersImpl(delimiter1: Byte, delimiter2: Byte): Int {\n val content = memory.asInt8Array()\n var idx = readPosition\n val end = writePosition\n\n while (idx < end) {\n val v = content[idx]\n if (v == delimiter1 || v == delimiter2) break\n idx++\n }\n\n val start = readPosition\n discardUntilIndex(idx)\n return idx - start\n}\n\ninternal actual fun Buffer.readUntilDelimiterImpl(\n delimiter: Byte,\n dst: ByteArray,\n offset: Int,\n length: Int\n): Int {\n check(offset >= 0)\n check(length >= 0)\n check(offset + length <= dst.size)\n\n return readUntilImpl({ it == delimiter }, dst, offset, length)\n}\n\ninternal actual fun Buffer.readUntilDelimitersImpl(\n delimiter1: Byte,\n delimiter2: Byte,\n dst: ByteArray,\n offset: Int,\n length: Int\n): Int {\n check(offset >= 0)\n check(length >= 0)\n check(offset + length <= dst.size)\n check(delimiter1 != delimiter2)\n\n return readUntilImpl({ it == delimiter1 || it == delimiter2 }, dst, offset, length)\n}\n\ninternal actual fun Buffer.readUntilDelimiterImpl(delimiter: Byte, dst: Output): Int {\n return readUntilImpl({ it == delimiter }, dst)\n}\n\ninternal actual fun Buffer.readUntilDelimitersImpl(delimiter1: Byte, delimiter2: Byte, dst: Output): Int {\n check(delimiter1 != delimiter2)\n\n return readUntilImpl({ it == delimiter1 || it == delimiter2 }, dst)\n}\n\nprivate inline fun Buffer.readUntilImpl(\n predicate: (Byte) -> Boolean,\n dst: ByteArray,\n offset: Int,\n length: Int\n): Int {\n val array = memory.asInt8Array()\n val start = readPosition\n var i = start\n val end = i + minOf(length, readRemaining)\n\n while (i < end) {\n if (predicate(array[i])) break\n i++\n }\n\n val copied = i - start\n val dstArray = dst.asDynamic() as Int8Array\n dstArray.set(array.subarray(start, end), offset)\n discardUntilIndex(i)\n\n return copied\n}\n\nprivate inline fun Buffer.readUntilImpl(\n predicate: (Byte) -> Boolean,\n dst: Output\n): Int {\n val array = memory.asInt8Array()\n var i = readPosition\n var copiedTotal = 0\n\n dst.writeWhile { chunk ->\n chunk.writeFully(chunk, 0)\n val start = i\n val end = minOf(i + chunk.writeRemaining, writePosition)\n\n while (i < end) {\n if (predicate(array[i])) break\n i++\n }\n\n val size = i - start\n\n chunk.memory.asInt8Array().set(array.subarray(start, i), chunk.writePosition)\n chunk.commitWritten(size)\n copiedTotal += size\n\n chunk.writeRemaining == 0 && i < end\n }\n\n discardUntilIndex(i)\n return copiedTotal\n}\n","// ktlint-disable filename\npackage io.ktor.utils.io.core\n\n/**\n * This shouldn't be implemented directly. Inherit [AbstractOutput] instead.\n */\n@Suppress(\"NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS\")\npublic actual interface Output : Appendable, Closeable {\n @Deprecated(\"Write with writeXXXLittleEndian or do X.reverseByteOrder() and then writeXXX instead.\")\n public actual var byteOrder: ByteOrder\n\n public actual fun writeByte(v: Byte)\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeShort(v: Short) {\n writeShort(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeInt(v: Int) {\n writeInt(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeLong(v: Long) {\n writeLong(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFloat(v: Float) {\n writeFloat(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeDouble(v: Double) {\n writeDouble(v)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: ByteArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: ShortArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: IntArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: LongArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: FloatArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: DoubleArray, offset: Int, length: Int) {\n writeFully(src, offset, length)\n }\n\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public actual fun writeFully(src: IoBuffer, length: Int) {\n writeFully(src, length)\n }\n\n public actual fun append(csq: CharArray, start: Int, end: Int): Appendable\n\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public actual fun fill(n: Long, v: Byte) {\n fill(n, v)\n }\n\n public actual fun flush()\n\n actual override fun close()\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.core.internal.*\n\npublic actual val PACKET_MAX_COPY_SIZE: Int = 200\ninternal const val BUFFER_VIEW_POOL_SIZE = 100\ninternal const val BUFFER_VIEW_SIZE = 4096\n\npublic actual fun BytePacketBuilder(headerSizeHint: Int): BytePacketBuilder =\n BytePacketBuilder(headerSizeHint, ChunkBuffer.Pool)\n\npublic actual typealias EOFException = io.ktor.utils.io.errors.EOFException\n","/*\n * Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.js\n\nimport org.khronos.webgl.*\n\ninternal external class TextDecoder(encoding: String, options: dynamic = definedExternally) {\n val encoding: String\n\n fun decode(): String\n fun decode(buffer: ArrayBuffer): String\n fun decode(buffer: ArrayBuffer, options: dynamic): String\n fun decode(buffer: ArrayBufferView): String\n fun decode(buffer: ArrayBufferView, options: dynamic): String\n}\n\ninternal fun TextDecoder.toKtor(): Decoder = object : Decoder {\n override fun decode(): String = this@toKtor.decode()\n override fun decode(buffer: ArrayBufferView): String = this@toKtor.decode(buffer)\n override fun decode(buffer: ArrayBufferView, options: dynamic): String = this@toKtor.decode(buffer, options)\n}\n\ninternal fun textDecoderOptions(fatal: Boolean = false): Any = Any().apply {\n with(this.asDynamic()) {\n this.fatal = fatal\n }\n}\n","package io.ktor.utils.io.core\n\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.internal.*\nimport org.khronos.webgl.*\nimport kotlin.require\n\n/**\n * Create an instance of [String] from the specified [bytes] range starting at [offset] and bytes [length]\n * interpreting characters in the specified [charset].\n */\n@Suppress(\"FunctionName\")\npublic actual fun String(bytes: ByteArray, offset: Int, length: Int, charset: Charset): String {\n if (offset < 0 || length < 0 || offset + length > bytes.size) {\n checkIndices(offset, length, bytes)\n }\n\n @Suppress(\"UnsafeCastFromDynamic\")\n val i8: Int8Array = bytes.asDynamic() // we know that K/JS generates Int8Array for ByteBuffer\n val bufferOffset = i8.byteOffset + offset\n val buffer = i8.buffer.slice(bufferOffset, bufferOffset + length)\n\n @Suppress(\"DEPRECATION\")\n val view = IoBuffer(Memory.of(buffer), null)\n view.resetForRead()\n val packet = ByteReadPacket(view, ChunkBuffer.NoPoolManuallyManaged)\n\n return charset.newDecoder().decode(packet, Int.MAX_VALUE)\n}\n\npublic fun checkIndices(offset: Int, length: Int, bytes: ByteArray): Nothing {\n require(offset >= 0) { throw IndexOutOfBoundsException(\"offset ($offset) shouldn't be negative\") }\n require(length >= 0) { throw IndexOutOfBoundsException(\"length ($length) shouldn't be negative\") }\n require(offset + length <= bytes.size) {\n throw IndexOutOfBoundsException(\"offset ($offset) + length ($length) > bytes.size (${bytes.size})\")\n }\n\n throw IndexOutOfBoundsException()\n}\n\ninternal actual fun String.getCharsInternal(dst: CharArray, dstOffset: Int) {\n val length = length\n require(dstOffset + length <= dst.size)\n\n var dstIndex = dstOffset\n for (srcIndex in 0 until length) {\n dst[dstIndex++] = this[srcIndex]\n }\n}\n","package io.ktor.utils.io.errors\n\npublic actual open class IOException actual constructor(message: String, cause: Throwable?) :\n Exception(message, cause) {\n public actual constructor(message: String) : this(message, null)\n}\n\npublic actual open class EOFException actual constructor(message: String) : IOException(message)\n","/*\n * Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.utils.io.js\n\nimport io.ktor.utils.io.core.*\nimport org.khronos.webgl.*\n\nprivate val ENCODING_ALIASES = setOf(\n \"ansi_x3.4-1968\",\n \"ascii\",\n \"cp1252\",\n \"cp819\",\n \"csisolatin1\",\n \"ibm819\",\n \"iso-8859-1\",\n \"iso-ir-100\",\n \"iso8859-1\",\n \"iso88591\",\n \"iso_8859-1\",\n \"iso_8859-1:1987\",\n \"l1\",\n \"latin1\",\n \"us-ascii\",\n \"windows-1252\",\n \"x-cp1252\"\n)\n\nprivate val REPLACEMENT = byteArrayOf(0xEF.toByte(), 0xBF.toByte(), 0xBD.toByte())\n\n/**\n * Windows-1252 decoder.\n *\n * According to https://encoding.spec.whatwg.org/, ISO-8859-1 should be treated as windows-1252 for http.\n */\ninternal class TextDecoderFallback(\n encoding: String,\n val fatal: Boolean\n) : Decoder {\n\n init {\n val requestedEncoding = encoding.trim().toLowerCase()\n check(ENCODING_ALIASES.contains(requestedEncoding)) { \"$encoding is not supported.\" }\n }\n\n override fun decode(): String = \"\"\n\n override fun decode(buffer: ArrayBufferView): String = buildPacket {\n val bytes = buffer as Int8Array\n for (index in 0 until bytes.length) {\n val byte = bytes[index]\n val point: Int = byte.toCodePoint()\n\n if (point < 0) {\n check(!fatal) { \"Invalid character: $point\" }\n writeFully(REPLACEMENT)\n continue\n }\n\n if (point > 0xFF) {\n writeByte((point shr 8).toByte())\n }\n\n writeByte((point and 0xFF).toByte())\n }\n }.readBytes().decodeToString()\n\n override fun decode(buffer: ArrayBufferView, options: dynamic): String {\n return decode(buffer)\n }\n}\n\nprivate fun Byte.toCodePoint(): Int {\n val value = toInt() and 0xFF\n if (value.isASCII()) {\n return value\n }\n\n return WIN1252_TABLE[value - 0x80]\n}\n\nprivate fun Int.isASCII(): Boolean = this in 0..0x7F\n","package io.ktor.utils.io.pool\n\npublic actual abstract class DefaultPool<T : Any>\nactual constructor(actual final override val capacity: Int) : ObjectPool<T> {\n\n private val instances = arrayOfNulls<Any?>(capacity)\n private var size = 0\n\n protected actual abstract fun produceInstance(): T\n protected actual open fun disposeInstance(instance: T) {}\n\n protected actual open fun clearInstance(instance: T): T = instance\n protected actual open fun validateInstance(instance: T) {}\n\n actual final override fun borrow(): T {\n if (size == 0) return produceInstance()\n val idx = --size\n\n @Suppress(\"UNCHECKED_CAST\")\n val instance = instances[idx] as T\n instances[idx] = null\n\n return clearInstance(instance)\n }\n\n actual final override fun recycle(instance: T) {\n validateInstance(instance)\n if (size == capacity) {\n disposeInstance(instance)\n } else {\n instances[size++] = instance\n }\n }\n\n actual final override fun dispose() {\n for (i in 0 until size) {\n @Suppress(\"UNCHECKED_CAST\")\n val instance = instances[i] as T\n instances[i] = null\n disposeInstance(instance)\n }\n size = 0\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\nprivate val URL_ALPHABET = (('a'..'z') + ('A'..'Z') + ('0'..'9')).map { it.toByte() }\n\n@SharedImmutable\nprivate val URL_ALPHABET_CHARS = (('a'..'z') + ('A'..'Z') + ('0'..'9'))\n\n@SharedImmutable\nprivate val HEX_ALPHABET = ('a'..'f') + ('A'..'F') + ('0'..'9')\n\n/**\n * https://tools.ietf.org/html/rfc3986#section-2\n */\n@SharedImmutable\nprivate val URL_PROTOCOL_PART = listOf(\n ':', '/', '?', '#', '[', ']', '@', // general\n '!', '$', '&', '\\'', '(', ')', '*', ',', ';', '=', // sub-components\n '-', '.', '_', '~', '+' // unreserved\n).map { it.toByte() }\n\n/**\n * from `pchar` in https://tools.ietf.org/html/rfc3986#section-2\n */\n@SharedImmutable\nprivate val VALID_PATH_PART = listOf(\n ':', '@',\n '!', '$', '&', '\\'', '(', ')', '*', '+', ',', ';', '=',\n '-', '.', '_', '~'\n)\n\n/**\n * Oauth specific percent encoding\n * https://tools.ietf.org/html/rfc5849#section-3.6\n */\n@SharedImmutable\nprivate val OAUTH_SYMBOLS = listOf('-', '.', '_', '~').map { it.toByte() }\n\ninternal val LETTERS_AND_NUMBERS = ('a'..'z').toSet() + ('A'..'Z').toSet() + ('0'..'9').toSet()\n\n/**\n * https://tools.ietf.org/html/rfc7230#section-3.2.6\n */\ninternal val TOKENS: Set<Char> =\n setOf('!', '#', '%', '&', '\\'', '*', '+', '-', '.', '^', '_', '`', '|', '~') + LETTERS_AND_NUMBERS\n\n/**\n * Encode url part as specified in\n * https://tools.ietf.org/html/rfc3986#section-2\n */\npublic fun String.encodeURLQueryComponent(\n encodeFull: Boolean = false,\n spaceToPlus: Boolean = false,\n charset: Charset = Charsets.UTF_8\n): String = buildString {\n val content = charset.newEncoder().encode(this@encodeURLQueryComponent)\n content.forEach {\n when {\n it == ' '.toByte() -> if (spaceToPlus) append('+') else append(\"%20\")\n it in URL_ALPHABET || (!encodeFull && it in URL_PROTOCOL_PART) -> append(it.toChar())\n else -> append(it.percentEncode())\n }\n }\n}\n\n/**\n * Encode URL path or component. It escapes all illegal or ambiguous characters\n */\npublic fun String.encodeURLPath(): String = buildString {\n val charset = Charsets.UTF_8\n\n var index = 0\n while (index < this@encodeURLPath.length) {\n val current = this@encodeURLPath[index]\n if (current == '/' || current in URL_ALPHABET_CHARS || current in VALID_PATH_PART) {\n append(current)\n index++\n continue\n }\n\n if (current == '%' &&\n index + 2 < this@encodeURLPath.length &&\n this@encodeURLPath[index + 1] in HEX_ALPHABET &&\n this@encodeURLPath[index + 2] in HEX_ALPHABET\n ) {\n append(current)\n append(this@encodeURLPath[index + 1])\n append(this@encodeURLPath[index + 2])\n\n index += 3\n continue\n }\n\n val symbolSize = if (current.isSurrogate()) 2 else 1\n // we need to call newEncoder() for every symbol, otherwise it won't work\n charset.newEncoder().encode(this@encodeURLPath, index, index + symbolSize).forEach {\n append(it.percentEncode())\n }\n index += symbolSize\n }\n}\n\n/**\n * Encode [this] in percent encoding specified here:\n * https://tools.ietf.org/html/rfc5849#section-3.6\n */\npublic fun String.encodeOAuth(): String = encodeURLParameter()\n\n/**\n * Encode [this] as query parameter key.\n */\npublic fun String.encodeURLParameter(\n spaceToPlus: Boolean = false\n): String = buildString {\n val content = Charsets.UTF_8.newEncoder().encode(this@encodeURLParameter)\n content.forEach {\n when {\n it in URL_ALPHABET || it in OAUTH_SYMBOLS -> append(it.toChar())\n spaceToPlus && it == ' '.toByte() -> append('+')\n else -> append(it.percentEncode())\n }\n }\n}\n\n/**\n * Encode [this] as query parameter value.\n */\ninternal fun String.encodeURLParameterValue(): String = buildString {\n val content = Charsets.UTF_8.newEncoder().encode(this@encodeURLParameterValue)\n content.forEach {\n when {\n it in URL_ALPHABET || it in OAUTH_SYMBOLS || it == '='.toByte() -> append(it.toChar())\n it == ' '.toByte() -> append('+')\n else -> append(it.percentEncode())\n }\n }\n}\n\n/**\n * Decode URL query component\n */\npublic fun String.decodeURLQueryComponent(\n start: Int = 0,\n end: Int = length,\n plusIsSpace: Boolean = false,\n charset: Charset = Charsets.UTF_8\n): String = decodeScan(start, end, plusIsSpace, charset)\n\n/**\n * Decode percent encoded URL part within the specified range [[start], [end]).\n * This function is not intended to decode urlencoded forms so it doesn't decode plus character to space.\n */\npublic fun String.decodeURLPart(\n start: Int = 0,\n end: Int = length,\n charset: Charset = Charsets.UTF_8\n): String = decodeScan(start, end, false, charset)\n\nprivate fun String.decodeScan(start: Int, end: Int, plusIsSpace: Boolean, charset: Charset): String {\n for (index in start until end) {\n val ch = this[index]\n if (ch == '%' || (plusIsSpace && ch == '+')) {\n return decodeImpl(start, end, index, plusIsSpace, charset)\n }\n }\n return if (start == 0 && end == length) toString() else substring(start, end)\n}\n\nprivate fun CharSequence.decodeImpl(\n start: Int,\n end: Int,\n prefixEnd: Int,\n plusIsSpace: Boolean,\n charset: Charset\n): String {\n val length = end - start\n // if length is big, it probably means it is encoded\n val sbSize = if (length > 255) length / 3 else length\n val sb = StringBuilder(sbSize)\n\n if (prefixEnd > start) {\n sb.append(this, start, prefixEnd)\n }\n\n var index = prefixEnd\n\n // reuse ByteArray for hex decoding stripes\n var bytes: ByteArray? = null\n\n while (index < end) {\n val c = this[index]\n when {\n plusIsSpace && c == '+' -> {\n sb.append(' ')\n index++\n }\n c == '%' -> {\n // if ByteArray was not needed before, create it with an estimate of remaining string be all hex\n if (bytes == null) {\n bytes = ByteArray((end - index) / 3)\n }\n\n // fill ByteArray with all the bytes, so Charset can decode text\n var count = 0\n while (index < end && this[index] == '%') {\n if (index + 2 >= end) {\n throw URLDecodeException(\n \"Incomplete trailing HEX escape: ${substring(index)}, in $this at $index\"\n )\n }\n\n val digit1 = charToHexDigit(this[index + 1])\n val digit2 = charToHexDigit(this[index + 2])\n if (digit1 == -1 || digit2 == -1) {\n throw URLDecodeException(\n \"Wrong HEX escape: %${this[index + 1]}${this[index + 2]}, in $this, at $index\"\n )\n }\n\n bytes[count++] = (digit1 * 16 + digit2).toByte()\n index += 3\n }\n\n // Decode chars from bytes and put into StringBuilder\n // Note: Tried using ByteBuffer and using enc.decode() – it's slower\n sb.append(String(bytes, offset = 0, length = count, charset = charset))\n }\n else -> {\n sb.append(c)\n index++\n }\n }\n }\n\n return sb.toString()\n}\n\n/**\n * URL decoder exception\n */\npublic class URLDecodeException(message: String) : Exception(message)\n\nprivate fun Byte.percentEncode(): String = buildString(3) {\n val code = toInt() and 0xff\n append('%')\n append(hexDigitToChar(code shr 4))\n append(hexDigitToChar(code and 0x0f))\n}\n\nprivate fun charToHexDigit(c2: Char) = when (c2) {\n in '0'..'9' -> c2 - '0'\n in 'A'..'F' -> c2 - 'A' + 10\n in 'a'..'f' -> c2 - 'a' + 10\n else -> -1\n}\n\nprivate fun hexDigitToChar(digit: Int): Char = when (digit) {\n in 0..9 -> '0' + digit\n else -> 'A' + digit - 10\n}\n\nprivate fun ByteReadPacket.forEach(block: (Byte) -> Unit) {\n takeWhile { buffer ->\n while (buffer.canRead()) {\n block(buffer.readByte())\n }\n true\n }\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\n/**\n * Converts the string into a regular expression [Regex] with the default options.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.toRegex(): Regex = Regex(this)\n\n/**\n * Converts the string into a regular expression [Regex] with the specified single [option].\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.toRegex(option: RegexOption): Regex = Regex(this, option)\n\n/**\n * Converts the string into a regular expression [Regex] with the specified set of [options].\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.toRegex(options: Set<RegexOption>): Regex = Regex(this, options)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Escapes the characters in a String using HTML entities\n */\npublic fun String.escapeHTML(): String {\n val text = this@escapeHTML\n if (text.isEmpty()) return text\n\n return buildString(length) {\n for (idx in 0 until text.length) {\n val ch = text[idx]\n when (ch) {\n '\\'' -> append(\"'\")\n '\\\"' -> append(\""\")\n '&' -> append(\"&\")\n '<' -> append(\"<\")\n '>' -> append(\">\")\n else -> append(ch)\n }\n }\n }\n}\n\n/**\n * Splits the given string into two parts before and after separator.\n *\n * Useful together with destructuring declarations\n */\npublic inline fun String.chomp(\n separator: String,\n onMissingDelimiter: () -> Pair<String, String>\n): Pair<String, String> {\n val idx = indexOf(separator)\n return when (idx) {\n -1 -> onMissingDelimiter()\n else -> substring(0, idx) to substring(idx + 1)\n }\n}\n\n/**\n * Does the same as the regular [toLowerCase] except that locale-specific rules are not applied to ASCII characters\n * so latin characters are converted by the original english rules.\n */\n@InternalAPI\npublic fun String.toLowerCasePreservingASCIIRules(): String {\n val firstIndex = indexOfFirst {\n toLowerCasePreservingASCII(it) != it\n }\n\n if (firstIndex == -1) {\n return this\n }\n\n val original = this\n return buildString(length) {\n append(original, 0, firstIndex)\n\n for (index in firstIndex..original.lastIndex) {\n append(toLowerCasePreservingASCII(original[index]))\n }\n }\n}\n\n/**\n * Does the same as the regular [toUpperCase] except that locale-specific rules are not applied to ASCII characters\n * so latin characters are converted by the original english rules.\n */\n@InternalAPI\npublic fun String.toUpperCasePreservingASCIIRules(): String {\n val firstIndex = indexOfFirst {\n toUpperCasePreservingASCII(it) != it\n }\n\n if (firstIndex == -1) {\n return this\n }\n\n val original = this\n return buildString(length) {\n append(original, 0, firstIndex)\n\n for (index in firstIndex..original.lastIndex) {\n append(toUpperCasePreservingASCII(original[index]))\n }\n }\n}\n\nprivate fun toLowerCasePreservingASCII(ch: Char): Char = when (ch) {\n in 'A'..'Z' -> ch + 32\n in '\\u0000'..'\\u007f' -> ch\n else -> ch.toLowerCase()\n}\n\nprivate fun toUpperCasePreservingASCII(ch: Char): Char = when (ch) {\n in 'a'..'z' -> ch - 32\n in '\\u0000'..'\\u007f' -> ch\n else -> ch.toLowerCase()\n}\n\ninternal fun String.caseInsensitive(): CaseInsensitiveString = CaseInsensitiveString(this)\n\ninternal class CaseInsensitiveString(val content: String) {\n private val hash = content.toLowerCase().hashCode()\n\n override fun equals(other: Any?): Boolean =\n (other as? CaseInsensitiveString)?.content?.equals(content, ignoreCase = true) == true\n\n override fun hashCode(): Int = hash\n\n override fun toString(): String = content\n}\n","package io.ktor.utils.io.core\n\npublic expect interface Closeable {\n public fun close()\n}\n\npublic inline fun <C : Closeable, R> C.use(block: (C) -> R): R {\n var closed = false\n\n return try {\n block(this)\n } catch (first: Throwable) {\n try {\n closed = true\n close()\n } catch (second: Throwable) {\n first.addSuppressedInternal(second)\n }\n\n throw first\n } finally {\n if (!closed) {\n close()\n }\n }\n}\n\n@PublishedApi\ninternal expect fun Throwable.addSuppressedInternal(other: Throwable)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents `Content-Disposition` header value\n */\npublic class ContentDisposition(disposition: String, parameters: List<HeaderValueParam> = emptyList()) :\n HeaderValueWithParameters(disposition, parameters) {\n /**\n * Content disposition value without parameters\n */\n public val disposition: String get() = content\n\n /**\n * Content disposition name (from parameter named `name`)\n */\n public val name: String?\n get() = parameter(Parameters.Name)\n\n /**\n * Creates new with parameter appended\n */\n public fun withParameter(key: String, value: String): ContentDisposition =\n ContentDisposition(disposition, parameters + HeaderValueParam(key, value))\n\n /**\n * Creates new with parameters appended\n */\n public fun withParameters(newParameters: List<HeaderValueParam>): ContentDisposition =\n ContentDisposition(disposition, parameters + newParameters)\n\n override fun equals(other: Any?): Boolean =\n other is ContentDisposition &&\n disposition == other.disposition &&\n parameters == other.parameters\n\n override fun hashCode(): Int = disposition.hashCode() * 31 + parameters.hashCode()\n\n @Suppress(\"unused\", \"PublicApiImplicitType\")\n public companion object {\n /**\n * `Content-Disposition: file`\n */\n public val File: ContentDisposition = ContentDisposition(\"file\")\n\n /**\n * `Content-Disposition: mixed`\n */\n public val Mixed: ContentDisposition = ContentDisposition(\"mixed\")\n\n /**\n * `Content-Disposition: attachment`\n */\n public val Attachment: ContentDisposition = ContentDisposition(\"attachment\")\n\n /**\n * `Content-Disposition: inline`\n */\n public val Inline: ContentDisposition = ContentDisposition(\"inline\")\n\n /**\n * Parse `Content-Disposition` header [value]\n */\n public fun parse(value: String): ContentDisposition = parse(value) { v, p -> ContentDisposition(v, p) }\n }\n\n /**\n * Frequently used content disposition parameter names\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\", \"PublicApiImplicitType\")\n public object Parameters {\n public const val FileName: String = \"filename\"\n public const val FileNameAsterisk: String = \"filename*\"\n public const val Name: String = \"name\"\n public const val CreationDate: String = \"creation-date\"\n public const val ModificationDate: String = \"modification-date\"\n public const val ReadDate: String = \"read-date\"\n public const val Size: String = \"size\"\n public const val Handling: String = \"handling\"\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Set `E-Tag` header\n */\npublic fun HeadersBuilder.etag(entityTag: String): Unit = set(HttpHeaders.ETag, entityTag)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents a value for a `Cache-Control` header\n *\n * @param visibility specifies an optional visibility such as private or public\n */\npublic sealed class CacheControl(public val visibility: Visibility?) {\n\n /**\n * Controls caching by proxies\n */\n public enum class Visibility(internal val headerValue: String) {\n /**\n * Specifies that the response is cacheable by clients and shared (proxy) caches.\n */\n Public(\"public\"),\n\n /**\n * Specifies that the response is cacheable only on the client and not by shared (proxy server) caches.\n */\n Private(\"private\")\n }\n\n /**\n * Represents a no-cache cache control value\n */\n public class NoCache(visibility: Visibility?) : CacheControl(visibility) {\n override fun toString(): String = if (visibility == null) {\n \"no-cache\"\n } else {\n \"no-cache, ${visibility.headerValue}\"\n }\n\n override fun equals(other: Any?): Boolean {\n return other is NoCache && visibility == other.visibility\n }\n\n override fun hashCode(): Int {\n return visibility.hashCode()\n }\n }\n\n /**\n * Represents a no-store cache control value\n */\n public class NoStore(visibility: Visibility?) : CacheControl(visibility) {\n override fun toString(): String = if (visibility == null) {\n \"no-store\"\n } else {\n \"no-store, ${visibility.headerValue}\"\n }\n\n override fun equals(other: Any?): Boolean {\n return other is NoStore && other.visibility == visibility\n }\n\n override fun hashCode(): Int {\n return visibility.hashCode()\n }\n }\n\n /**\n * Represents a cache control value with the specified max ages and re-validation strategies\n * @property maxAgeSeconds max-age in seconds\n * @property proxyMaxAgeSeconds max-age in seconds for caching proxies\n * @property mustRevalidate `true` if a client must validate in spite of age\n * @property proxyRevalidate `true` if a caching proxy must revalidate in spite of age\n */\n public class MaxAge(\n public val maxAgeSeconds: Int,\n public val proxyMaxAgeSeconds: Int? = null,\n public val mustRevalidate: Boolean = false,\n public val proxyRevalidate: Boolean = false,\n visibility: Visibility? = null\n ) : CacheControl(visibility) {\n override fun toString(): String {\n val parts = ArrayList<String>(5)\n parts.add(\"max-age=$maxAgeSeconds\")\n if (proxyMaxAgeSeconds != null) {\n parts.add(\"s-maxage=$proxyMaxAgeSeconds\")\n }\n if (mustRevalidate) {\n parts.add(\"must-revalidate\")\n }\n if (proxyRevalidate) {\n parts.add(\"proxy-revalidate\")\n }\n if (visibility != null) {\n parts.add(visibility.headerValue)\n }\n\n return parts.joinToString(\", \")\n }\n\n override fun equals(other: Any?): Boolean {\n return other === this || (\n other is MaxAge &&\n other.maxAgeSeconds == maxAgeSeconds &&\n other.proxyMaxAgeSeconds == proxyMaxAgeSeconds &&\n other.mustRevalidate == mustRevalidate &&\n other.proxyRevalidate == proxyRevalidate &&\n other.visibility == visibility\n )\n }\n\n override fun hashCode(): Int {\n var result = maxAgeSeconds\n result = 31 * result + (proxyMaxAgeSeconds ?: 0)\n result = 31 * result + mustRevalidate.hashCode()\n result = 31 * result + proxyRevalidate.hashCode()\n result = 31 * result + visibility.hashCode()\n return result\n }\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport kotlin.native.concurrent.*\n\n/** Separator symbols listed in RFC https://tools.ietf.org/html/rfc2616#section-2.2 */\n@SharedImmutable\nprivate val HeaderFieldValueSeparators =\n setOf('(', ')', '<', '>', '@', ',', ';', ':', '\\\\', '\\\"', '/', '[', ']', '?', '=', '{', '}', ' ', '\\t', '\\n', '\\r')\n\n/**\n * Represents a header value that consist of [content] followed by [parameters].\n * Useful for headers such as `Content-Type`, `Content-Disposition` and so on.\n *\n * @property content header's content without parameters\n * @property parameters\n */\npublic abstract class HeaderValueWithParameters(\n protected val content: String,\n public val parameters: List<HeaderValueParam> = emptyList()\n) {\n\n /**\n * The first value for the parameter with [name] comparing case-insensitively or `null` if no such parameters found\n */\n public fun parameter(name: String): String? =\n parameters.firstOrNull { it.name.equals(name, ignoreCase = true) }?.value\n\n override fun toString(): String = when {\n parameters.isEmpty() -> content\n else -> {\n val size = content.length + parameters.sumBy { it.name.length + it.value.length + 3 }\n StringBuilder(size).apply {\n append(content)\n for (index in 0 until parameters.size) {\n val (name, value) = parameters[index]\n append(\"; \")\n append(name)\n append(\"=\")\n value.escapeIfNeededTo(this)\n }\n }.toString()\n }\n }\n\n public companion object {\n /**\n * Parse header with parameter and pass it to [init] function to instantiate particular type\n */\n public inline fun <R> parse(value: String, init: (String, List<HeaderValueParam>) -> R): R {\n val headerValue = parseHeaderValue(value).single()\n return init(headerValue.value, headerValue.params)\n }\n }\n}\n\n/**\n * Append formatted header value to the builder\n */\npublic fun StringValuesBuilder.append(name: String, value: HeaderValueWithParameters) {\n append(name, value.toString())\n}\n\n/**\n * Escape using double quotes if needed or keep as is if no dangerous strings found\n */\n@InternalAPI\npublic fun String.escapeIfNeeded(): String = when {\n checkNeedEscape() -> quote()\n else -> this\n}\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun String.escapeIfNeededTo(out: StringBuilder) {\n when {\n checkNeedEscape() -> out.append(this.quote())\n else -> out.append(this)\n }\n}\n\nprivate fun String.checkNeedEscape(): Boolean {\n if (isEmpty()) return true\n if (isQuoted()) return false\n\n for (index in 0 until length) {\n if (HeaderFieldValueSeparators.contains(this[index])) return true\n }\n\n return false\n}\n\nprivate fun String.isQuoted(): Boolean {\n if (length < 2) {\n return false\n }\n if (first() != '\"' || last() != '\"') {\n return false\n }\n var startIndex = 1\n do {\n val index = indexOf('\"', startIndex)\n if (index == lastIndex) {\n break\n }\n\n var slashesCount = 0\n var slashIndex = index - 1\n while (this[slashIndex] == '\\\\') {\n slashesCount++\n slashIndex--\n }\n if (slashesCount % 2 == 0) {\n return false\n }\n\n startIndex = index + 1\n } while (startIndex < length)\n\n return true\n}\n\n/**\n * Escape string using double quotes\n */\n@InternalAPI\npublic fun String.quote(): String = buildString { this@quote.quoteTo(this) }\n\nprivate fun String.quoteTo(out: StringBuilder) {\n out.append(\"\\\"\")\n for (i in 0 until length) {\n val ch = this[i]\n when (ch) {\n '\\\\' -> out.append(\"\\\\\\\\\")\n '\\n' -> out.append(\"\\\\n\")\n '\\r' -> out.append(\"\\\\r\")\n '\\t' -> out.append(\"\\\\t\")\n '\\\"' -> out.append(\"\\\\\\\"\")\n else -> out.append(ch)\n }\n }\n out.append(\"\\\"\")\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Format `Content-Range` header value\n */\npublic fun contentRangeHeaderValue(\n range: LongRange?,\n fullLength: Long? = null,\n unit: RangeUnits = RangeUnits.Bytes\n): String =\n contentRangeHeaderValue(range, fullLength, unit.unitToken)\n\n/**\n * Format `Content-Range` header value\n */\npublic fun contentRangeHeaderValue(\n range: LongRange?,\n fullLength: Long? = null,\n unit: String = RangeUnits.Bytes.unitToken\n): String = buildString {\n append(unit)\n append(\" \")\n if (range != null) {\n append(range.start)\n append('-')\n append(range.endInclusive)\n } else {\n append('*')\n }\n append('/')\n append(fullLength ?: \"*\")\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.utils.io.charsets.*\n\n/**\n * Represents a value for a `Content-Type` header.\n * @property contentType represents a type part of the media type.\n * @property contentSubtype represents a subtype part of the media type.\n */\npublic class ContentType private constructor(\n public val contentType: String,\n public val contentSubtype: String,\n existingContent: String,\n parameters: List<HeaderValueParam> = emptyList()\n) : HeaderValueWithParameters(existingContent, parameters) {\n\n public constructor(\n contentType: String,\n contentSubtype: String,\n parameters: List<HeaderValueParam> = emptyList()\n ) : this(\n contentType,\n contentSubtype,\n \"$contentType/$contentSubtype\",\n parameters\n )\n\n /**\n * Creates a copy of `this` type with the added parameter with the [name] and [value].\n */\n public fun withParameter(name: String, value: String): ContentType {\n if (hasParameter(name, value)) return this\n\n return ContentType(contentType, contentSubtype, content, parameters + HeaderValueParam(name, value))\n }\n\n private fun hasParameter(name: String, value: String): Boolean = when (parameters.size) {\n 0 -> false\n 1 -> parameters[0].let { it.name.equals(name, ignoreCase = true) && it.value.equals(value, ignoreCase = true) }\n else -> parameters.any { it.name.equals(name, ignoreCase = true) && it.value.equals(value, ignoreCase = true) }\n }\n\n /**\n * Creates a copy of `this` type without any parameters\n */\n public fun withoutParameters(): ContentType = when {\n parameters.isEmpty() -> this\n else -> ContentType(contentType, contentSubtype)\n }\n\n /**\n * Checks if `this` type matches a [pattern] type taking into account placeholder symbols `*` and parameters.\n */\n public fun match(pattern: ContentType): Boolean {\n if (pattern.contentType != \"*\" && !pattern.contentType.equals(contentType, ignoreCase = true)) {\n return false\n }\n\n if (pattern.contentSubtype != \"*\" && !pattern.contentSubtype.equals(contentSubtype, ignoreCase = true)) {\n return false\n }\n\n for ((patternName, patternValue) in pattern.parameters) {\n val matches = when (patternName) {\n \"*\" -> {\n when (patternValue) {\n \"*\" -> true\n else -> parameters.any { p -> p.value.equals(patternValue, ignoreCase = true) }\n }\n }\n else -> {\n val value = parameter(patternName)\n when (patternValue) {\n \"*\" -> value != null\n else -> value.equals(patternValue, ignoreCase = true)\n }\n }\n }\n\n if (!matches) {\n return false\n }\n }\n return true\n }\n\n /**\n * Checks if `this` type matches a [pattern] type taking into account placeholder symbols `*` and parameters.\n */\n public fun match(pattern: String): Boolean = match(parse(pattern))\n\n override fun equals(other: Any?): Boolean =\n other is ContentType &&\n contentType.equals(other.contentType, ignoreCase = true) &&\n contentSubtype.equals(other.contentSubtype, ignoreCase = true) &&\n parameters == other.parameters\n\n override fun hashCode(): Int {\n var result = contentType.toLowerCase().hashCode()\n result += 31 * result + contentSubtype.toLowerCase().hashCode()\n result += 31 * parameters.hashCode()\n return result\n }\n\n public companion object {\n /**\n * Parses a string representing a `Content-Type` header into a [ContentType] instance.\n */\n public fun parse(value: String): ContentType {\n if (value.isBlank()) return Any\n\n return parse(value) { parts, parameters ->\n val slash = parts.indexOf('/')\n\n if (slash == -1) {\n if (parts.trim() == \"*\") {\n return Any\n }\n\n throw BadContentTypeFormatException(value)\n }\n\n val type = parts.substring(0, slash).trim()\n\n if (type.isEmpty()) {\n throw BadContentTypeFormatException(value)\n }\n\n val subtype = parts.substring(slash + 1).trim()\n\n if (subtype.isEmpty() || subtype.contains('/')) {\n throw BadContentTypeFormatException(value)\n }\n\n ContentType(type, subtype, parameters)\n }\n }\n\n /**\n * Represents a pattern `* / *` to match any content type.\n */\n public val Any: ContentType = ContentType(\"*\", \"*\")\n }\n\n /**\n * Provides a list of standard subtypes of an `application` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Application {\n /**\n * Represents a pattern `application / *` to match any application content type.\n */\n public val Any: ContentType = ContentType(\"application\", \"*\")\n public val Atom: ContentType = ContentType(\"application\", \"atom+xml\")\n public val Cbor: ContentType = ContentType(\"application\", \"cbor\")\n public val Json: ContentType = ContentType(\"application\", \"json\")\n public val HalJson: ContentType = ContentType(\"application\", \"hal+json\")\n public val JavaScript: ContentType = ContentType(\"application\", \"javascript\")\n public val OctetStream: ContentType = ContentType(\"application\", \"octet-stream\")\n public val FontWoff: ContentType = ContentType(\"application\", \"font-woff\")\n public val Rss: ContentType = ContentType(\"application\", \"rss+xml\")\n public val Xml: ContentType = ContentType(\"application\", \"xml\")\n public val Xml_Dtd: ContentType = ContentType(\"application\", \"xml-dtd\")\n public val Zip: ContentType = ContentType(\"application\", \"zip\")\n public val GZip: ContentType = ContentType(\"application\", \"gzip\")\n\n public val FormUrlEncoded: ContentType =\n ContentType(\"application\", \"x-www-form-urlencoded\")\n\n public val Pdf: ContentType = ContentType(\"application\", \"pdf\")\n public val ProtoBuf: ContentType = ContentType(\"application\", \"protobuf\")\n public val Wasm: ContentType = ContentType(\"application\", \"wasm\")\n public val ProblemJson: ContentType = ContentType(\"application\", \"problem+json\")\n public val ProblemXml: ContentType = ContentType(\"application\", \"problem+xml\")\n }\n\n /**\n * Provides a list of standard subtypes of an `audio` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Audio {\n public val Any: ContentType = ContentType(\"audio\", \"*\")\n public val MP4: ContentType = ContentType(\"audio\", \"mp4\")\n public val MPEG: ContentType = ContentType(\"audio\", \"mpeg\")\n public val OGG: ContentType = ContentType(\"audio\", \"ogg\")\n }\n\n /**\n * Provides a list of standard subtypes of an `image` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Image {\n public val Any: ContentType = ContentType(\"image\", \"*\")\n public val GIF: ContentType = ContentType(\"image\", \"gif\")\n public val JPEG: ContentType = ContentType(\"image\", \"jpeg\")\n public val PNG: ContentType = ContentType(\"image\", \"png\")\n public val SVG: ContentType = ContentType(\"image\", \"svg+xml\")\n public val XIcon: ContentType = ContentType(\"image\", \"x-icon\")\n }\n\n /**\n * Provides a list of standard subtypes of a `message` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Message {\n public val Any: ContentType = ContentType(\"message\", \"*\")\n public val Http: ContentType = ContentType(\"message\", \"http\")\n }\n\n /**\n * Provides a list of standard subtypes of a `multipart` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object MultiPart {\n public val Any: ContentType = ContentType(\"multipart\", \"*\")\n public val Mixed: ContentType = ContentType(\"multipart\", \"mixed\")\n public val Alternative: ContentType = ContentType(\"multipart\", \"alternative\")\n public val Related: ContentType = ContentType(\"multipart\", \"related\")\n public val FormData: ContentType = ContentType(\"multipart\", \"form-data\")\n public val Signed: ContentType = ContentType(\"multipart\", \"signed\")\n public val Encrypted: ContentType = ContentType(\"multipart\", \"encrypted\")\n public val ByteRanges: ContentType = ContentType(\"multipart\", \"byteranges\")\n }\n\n /**\n * Provides a list of standard subtypes of a `text` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Text {\n public val Any: ContentType = ContentType(\"text\", \"*\")\n public val Plain: ContentType = ContentType(\"text\", \"plain\")\n public val CSS: ContentType = ContentType(\"text\", \"css\")\n public val CSV: ContentType = ContentType(\"text\", \"csv\")\n public val Html: ContentType = ContentType(\"text\", \"html\")\n public val JavaScript: ContentType = ContentType(\"text\", \"javascript\")\n public val VCard: ContentType = ContentType(\"text\", \"vcard\")\n public val Xml: ContentType = ContentType(\"text\", \"xml\")\n public val EventStream: ContentType = ContentType(\"text\", \"event-stream\")\n }\n\n /**\n * Provides a list of standard subtypes of a `video` content type.\n */\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n public object Video {\n public val Any: ContentType = ContentType(\"video\", \"*\")\n public val MPEG: ContentType = ContentType(\"video\", \"mpeg\")\n public val MP4: ContentType = ContentType(\"video\", \"mp4\")\n public val OGG: ContentType = ContentType(\"video\", \"ogg\")\n public val QuickTime: ContentType = ContentType(\"video\", \"quicktime\")\n }\n}\n\n/**\n * Exception thrown when a content type string is malformed.\n */\npublic class BadContentTypeFormatException(value: String) : Exception(\"Bad Content-Type format: $value\")\n\n/**\n * Creates a copy of `this` type with the added charset parameter with [charset] value.\n */\npublic fun ContentType.withCharset(charset: Charset): ContentType = withParameter(\"charset\", charset.name)\n\n/**\n * Extracts a [Charset] value from the given `Content-Type`, `Content-Disposition` or similar header value.\n */\npublic fun HeaderValueWithParameters.charset(): Charset? = parameter(\"charset\")?.let { Charset.forName(it) }\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport kotlin.jvm.*\nimport kotlin.native.concurrent.*\n\n/**\n * Represents a cookie with name, content and a set of settings such as expiration, visibility and security.\n * A cookie with neither [expires] nor [maxAge] is a session cookie.\n *\n * @property name\n * @property value\n * @property encoding - cookie encoding type [CookieEncoding]\n * @property maxAge number of seconds to keep cookie\n * @property expires date when it expires\n * @property domain for which it is set\n * @property path for which it is set\n * @property secure send it via secure connection only\n * @property httpOnly only transfer cookie over HTTP, no access from JavaScript\n * @property extensions additional cookie extensions\n */\npublic data class Cookie(\n val name: String,\n val value: String,\n val encoding: CookieEncoding = CookieEncoding.URI_ENCODING,\n @get:JvmName(\"getMaxAgeInt\")\n val maxAge: Int = 0,\n val expires: GMTDate? = null,\n val domain: String? = null,\n val path: String? = null,\n val secure: Boolean = false,\n val httpOnly: Boolean = false,\n val extensions: Map<String, String?> = emptyMap()\n) {\n @Suppress(\"unused\", \"KDocMissingDocumentation\")\n @Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\n public fun getMaxAge(): Int = maxAge\n}\n\n/**\n * Cooke encoding strategy\n */\npublic enum class CookieEncoding {\n /**\n * No encoding (could be dangerous)\n */\n RAW,\n\n /**\n * Double quotes with slash-escaping\n */\n DQUOTES,\n\n /**\n * URI encoding\n */\n URI_ENCODING,\n\n /**\n * BASE64 encoding\n */\n BASE64_ENCODING\n}\n\n@SharedImmutable\nprivate val loweredPartNames = setOf(\"max-age\", \"expires\", \"domain\", \"path\", \"secure\", \"httponly\", \"\\$x-enc\")\n\n/**\n * Parse server's `Set-Cookie` header value\n */\n@KtorExperimentalAPI\npublic fun parseServerSetCookieHeader(cookiesHeader: String): Cookie {\n val asMap = parseClientCookiesHeader(cookiesHeader, false)\n val first = asMap.entries.first { !it.key.startsWith(\"$\") }\n val encoding = asMap[\"\\$x-enc\"]?.let { CookieEncoding.valueOf(it) } ?: CookieEncoding.RAW\n val loweredMap = asMap.mapKeys { it.key.toLowerCasePreservingASCIIRules() }\n\n return Cookie(\n name = first.key,\n value = decodeCookieValue(first.value, encoding),\n encoding = encoding,\n maxAge = loweredMap[\"max-age\"]?.toIntClamping() ?: 0,\n expires = loweredMap[\"expires\"]?.fromCookieToGmtDate(),\n domain = loweredMap[\"domain\"],\n path = loweredMap[\"path\"],\n secure = \"secure\" in loweredMap,\n httpOnly = \"httponly\" in loweredMap,\n extensions = asMap.filterKeys {\n it.toLowerCasePreservingASCIIRules() !in loweredPartNames && it != first.key\n }\n )\n}\n\n@ThreadLocal\nprivate val clientCookieHeaderPattern = \"\"\"(^|;)\\s*([^()<>@;:/\\\\\"\\[\\]\\?=\\{\\}\\s]+)\\s*(=\\s*(\"[^\"]*\"|[^;]*))?\"\"\".toRegex()\n\n/**\n * Parse client's `Cookie` header value\n */\n@KtorExperimentalAPI\npublic fun parseClientCookiesHeader(cookiesHeader: String, skipEscaped: Boolean = true): Map<String, String> =\n clientCookieHeaderPattern.findAll(cookiesHeader)\n .map { (it.groups[2]?.value ?: \"\") to (it.groups[4]?.value ?: \"\") }\n .filter { !skipEscaped || !it.first.startsWith(\"$\") }\n .map { cookie ->\n if (cookie.second.startsWith(\"\\\"\") && cookie.second.endsWith(\"\\\"\")) {\n cookie.copy(second = cookie.second.removeSurrounding(\"\\\"\"))\n } else {\n cookie\n }\n }\n .toMap()\n\n/**\n * Format `Set-Cookie` header value\n */\n@KtorExperimentalAPI\npublic fun renderSetCookieHeader(cookie: Cookie): String = with(cookie) {\n renderSetCookieHeader(\n name,\n value,\n encoding,\n maxAge,\n expires,\n domain,\n path,\n secure,\n httpOnly,\n extensions\n )\n}\n\n/**\n * Format `Set-Cookie` header value\n */\n@KtorExperimentalAPI\npublic fun renderCookieHeader(cookie: Cookie): String = with(cookie) {\n renderSetCookieHeader(\n name,\n value,\n encoding,\n maxAge,\n expires,\n domain,\n path,\n secure,\n httpOnly,\n extensions,\n includeEncoding = false\n )\n}\n\n/**\n * Format `Set-Cookie` header value\n */\n@KtorExperimentalAPI\npublic fun renderSetCookieHeader(\n name: String,\n value: String,\n encoding: CookieEncoding = CookieEncoding.URI_ENCODING,\n maxAge: Int = 0,\n expires: GMTDate? = null,\n domain: String? = null,\n path: String? = null,\n secure: Boolean = false,\n httpOnly: Boolean = false,\n extensions: Map<String, String?> = emptyMap(),\n includeEncoding: Boolean = true\n): String = (\n listOf(\n cookiePart(name.assertCookieName(), value, encoding),\n cookiePartUnencoded(\"Max-Age\", if (maxAge > 0) maxAge else null),\n cookiePartUnencoded(\"Expires\", expires?.toHttpDate()),\n cookiePart(\"Domain\", domain, CookieEncoding.RAW),\n cookiePart(\"Path\", path, CookieEncoding.RAW),\n\n cookiePartFlag(\"Secure\", secure),\n cookiePartFlag(\"HttpOnly\", httpOnly)\n ) + extensions.map { cookiePartExt(it.key.assertCookieName(), it.value, encoding) } +\n if (includeEncoding) cookiePartExt(\"\\$x-enc\", encoding.name, CookieEncoding.RAW) else \"\"\n ).filter { it.isNotEmpty() }\n .joinToString(\"; \")\n\n/**\n * Encode cookie value using the specified [encoding]\n */\n@KtorExperimentalAPI\npublic fun encodeCookieValue(value: String, encoding: CookieEncoding): String = when (encoding) {\n CookieEncoding.RAW -> when {\n value.any { it.shouldEscapeInCookies() } ->\n throw IllegalArgumentException(\n \"The cookie value contains characters that couldn't be encoded in RAW format. \" +\n \" Consider URL_ENCODING mode\"\n )\n else -> value\n }\n CookieEncoding.DQUOTES -> when {\n value.contains('\"') -> throw IllegalArgumentException(\n \"The cookie value contains characters that couldn't be encoded in DQUOTES format. \" +\n \"Consider URL_ENCODING mode\"\n )\n value.any { it.shouldEscapeInCookies() } -> \"\\\"$value\\\"\"\n else -> value\n }\n CookieEncoding.BASE64_ENCODING -> value.encodeBase64()\n CookieEncoding.URI_ENCODING -> value.encodeURLQueryComponent(encodeFull = true, spaceToPlus = true)\n}\n\n/**\n * Decode cookie value using the specified [encoding]\n */\n@KtorExperimentalAPI\npublic fun decodeCookieValue(encodedValue: String, encoding: CookieEncoding): String = when (encoding) {\n CookieEncoding.RAW, CookieEncoding.DQUOTES -> when {\n encodedValue.trimStart().startsWith(\"\\\"\") && encodedValue.trimEnd().endsWith(\"\\\"\") ->\n encodedValue.trim().removeSurrounding(\"\\\"\")\n else -> encodedValue\n }\n CookieEncoding.URI_ENCODING -> encodedValue.decodeURLQueryComponent(plusIsSpace = true)\n CookieEncoding.BASE64_ENCODING -> encodedValue.decodeBase64String()\n}\n\nprivate fun String.assertCookieName() = when {\n any { it.shouldEscapeInCookies() } -> throw IllegalArgumentException(\"Cookie name is not valid: $this\")\n else -> this\n}\n\n@SharedImmutable\nprivate val cookieCharsShouldBeEscaped = setOf(';', ',', '\"')\n\nprivate fun Char.shouldEscapeInCookies() = isWhitespace() || this < ' ' || this in cookieCharsShouldBeEscaped\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun cookiePart(name: String, value: Any?, encoding: CookieEncoding) =\n if (value != null) \"$name=${encodeCookieValue(value.toString(), encoding)}\" else \"\"\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun cookiePartUnencoded(name: String, value: Any?) =\n if (value != null) \"$name=$value\" else \"\"\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun cookiePartFlag(name: String, value: Boolean) =\n if (value) name else \"\"\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun cookiePartExt(name: String, value: String?, encoding: CookieEncoding) =\n if (value == null) cookiePartFlag(name, true) else cookiePart(name, value, encoding)\n\nprivate fun String.toIntClamping(): Int = toLong().coerceIn(0L, Int.MAX_VALUE.toLong()).toInt()\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Represents HTTP headers as a map from case-insensitive names to collection of [String] values\n */\npublic interface Headers : StringValues {\n public companion object {\n /**\n * Empty [Headers] instance\n */\n @Suppress(\"DEPRECATION_ERROR\")\n public val Empty: Headers = EmptyHeaders\n\n /**\n * Builds a [Headers] instance with the given [builder] function\n * @param builder specifies a function to build a map\n */\n public inline fun build(builder: HeadersBuilder.() -> Unit): Headers = HeadersBuilder().apply(builder).build()\n }\n}\n\n@Suppress(\"KDocMissingDocumentation\")\npublic class HeadersBuilder(size: Int = 8) : StringValuesBuilder(true, size) {\n override fun build(): Headers {\n require(!built) { \"HeadersBuilder can only build a single Headers instance\" }\n built = true\n return HeadersImpl(values)\n }\n\n override fun validateName(name: String) {\n super.validateName(name)\n HttpHeaders.checkHeaderName(name)\n }\n\n override fun validateValue(value: String) {\n super.validateValue(value)\n HttpHeaders.checkHeaderValue(value)\n }\n}\n\n@Suppress(\"KDocMissingDocumentation\")\n@Deprecated(\n \"Empty headers is internal\",\n replaceWith = ReplaceWith(\"Headers.Empty\"),\n level = DeprecationLevel.ERROR\n)\npublic object EmptyHeaders : Headers {\n override val caseInsensitiveName: Boolean get() = true\n override fun getAll(name: String): List<String>? = null\n override fun names(): Set<String> = emptySet()\n override fun entries(): Set<Map.Entry<String, List<String>>> = emptySet()\n override fun isEmpty(): Boolean = true\n override fun toString(): String = \"Headers ${entries()}\"\n}\n\n/**\n * Returns empty headers\n */\npublic fun headersOf(): Headers = Headers.Empty\n\n/**\n * Returns [Headers] instance containing only one header with the specified [name] and [value]\n */\npublic fun headersOf(name: String, value: String): Headers = HeadersSingleImpl(name, listOf(value))\n\n/**\n * Returns [Headers] instance containing only one header with the specified [name] and [values]\n */\npublic fun headersOf(name: String, values: List<String>): Headers = HeadersSingleImpl(name, values)\n\n/**\n * Returns [Headers] instance from [pairs]\n */\npublic fun headersOf(vararg pairs: Pair<String, List<String>>): Headers = HeadersImpl(pairs.asList().toMap())\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic class HeadersImpl(\n values: Map<String, List<String>> = emptyMap()\n) : Headers, StringValuesImpl(true, values) {\n override fun toString(): String = \"Headers ${entries()}\"\n}\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic class HeadersSingleImpl(\n name: String,\n values: List<String>\n) : Headers, StringValuesSingleImpl(true, name, values) {\n override fun toString(): String = \"Headers ${entries()}\"\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Represents a single value parameter\n * @property name of parameter\n * @property value of parameter\n */\npublic data class HeaderValueParam(val name: String, val value: String) {\n override fun equals(other: Any?): Boolean {\n return other is HeaderValueParam &&\n other.name.equals(name, ignoreCase = true) &&\n other.value.equals(value, ignoreCase = true)\n }\n\n override fun hashCode(): Int {\n var result = name.toLowerCase().hashCode()\n result += 31 * result + value.toLowerCase().hashCode()\n return result\n }\n}\n\n/**\n * Represents a header value. Similar to [HeaderValueWithParameters]\n * @property value\n * @property params for this value (could be empty)\n */\npublic data class HeaderValue(val value: String, val params: List<HeaderValueParam> = listOf()) {\n /**\n * Value's quality according to `q` parameter or `1.0` if missing or invalid\n */\n val quality: Double =\n params.firstOrNull { it.name == \"q\" }?.value?.toDoubleOrNull()?.takeIf { it in 0.0..1.0 } ?: 1.0\n}\n\n/**\n * Parse header value and sort multiple values according to qualities\n */\npublic fun parseAndSortHeader(header: String?): List<HeaderValue> =\n parseHeaderValue(header).sortedByDescending { it.quality }\n\n/**\n * Parse `Content-Type` header values and sort them by quality and asterisks quantity\n */\npublic fun parseAndSortContentTypeHeader(header: String?): List<HeaderValue> = parseHeaderValue(header).sortedWith(\n compareByDescending<HeaderValue> { it.quality }.thenBy {\n val contentType = ContentType.parse(it.value)\n var asterisks = 0\n if (contentType.contentType == \"*\") {\n asterisks += 2\n }\n if (contentType.contentSubtype == \"*\") {\n asterisks++\n }\n asterisks\n }.thenByDescending { it.params.size }\n)\n\n/**\n * Parse header value respecting multi-values\n */\npublic fun parseHeaderValue(text: String?): List<HeaderValue> {\n return parseHeaderValue(text, false)\n}\n\n/**\n * Parse header value respecting multi-values\n * @param parametersOnly if no header value itself, only parameters\n */\npublic fun parseHeaderValue(text: String?, parametersOnly: Boolean): List<HeaderValue> {\n if (text == null) {\n return emptyList()\n }\n\n var position = 0\n val items = lazy(LazyThreadSafetyMode.NONE) { arrayListOf<HeaderValue>() }\n while (position <= text.lastIndex) {\n position = parseHeaderValueItem(text, position, items, parametersOnly)\n }\n return items.valueOrEmpty()\n}\n\n/**\n * Construct a list of [HeaderValueParam] from an iterable of pairs\n */\npublic fun Iterable<Pair<String, String>>.toHeaderParamsList(): List<HeaderValueParam> =\n map { HeaderValueParam(it.first, it.second) }\n\nprivate fun <T> Lazy<List<T>>.valueOrEmpty(): List<T> = if (isInitialized()) value else emptyList()\nprivate fun String.subtrim(start: Int, end: Int): String {\n return substring(start, end).trim()\n}\n\nprivate fun parseHeaderValueItem(\n text: String,\n start: Int,\n items: Lazy<ArrayList<HeaderValue>>,\n parametersOnly: Boolean\n): Int {\n var position = start\n val parameters = lazy(LazyThreadSafetyMode.NONE) { arrayListOf<HeaderValueParam>() }\n var valueEnd: Int? = if (parametersOnly) position else null\n\n while (position <= text.lastIndex) {\n when (text[position]) {\n ',' -> {\n items.value.add(HeaderValue(text.subtrim(start, valueEnd ?: position), parameters.valueOrEmpty()))\n return position + 1\n }\n ';' -> {\n if (valueEnd == null) valueEnd = position\n position = parseHeaderValueParameter(text, position + 1, parameters)\n }\n else -> {\n position = if (parametersOnly) {\n parseHeaderValueParameter(text, position, parameters)\n } else {\n position + 1\n }\n }\n }\n }\n\n items.value.add(HeaderValue(text.subtrim(start, valueEnd ?: position), parameters.valueOrEmpty()))\n return position\n}\n\nprivate fun parseHeaderValueParameter(text: String, start: Int, parameters: Lazy<ArrayList<HeaderValueParam>>): Int {\n fun addParam(text: String, start: Int, end: Int, value: String) {\n val name = text.subtrim(start, end)\n if (name.isEmpty()) {\n return\n }\n\n parameters.value.add(HeaderValueParam(name, value))\n }\n\n var position = start\n while (position <= text.lastIndex) {\n when (text[position]) {\n '=' -> {\n val (paramEnd, paramValue) = parseHeaderValueParameterValue(text, position + 1)\n addParam(text, start, position, paramValue)\n return paramEnd\n }\n ';', ',' -> {\n addParam(text, start, position, \"\")\n return position\n }\n else -> position++\n }\n }\n\n addParam(text, start, position, \"\")\n return position\n}\n\nprivate fun parseHeaderValueParameterValue(value: String, start: Int): Pair<Int, String> {\n if (value.length == start) {\n return start to \"\"\n }\n\n var position = start\n if (value[start] == '\"') {\n return parseHeaderValueParameterValueQuoted(value, position + 1)\n }\n\n while (position <= value.lastIndex) {\n when (value[position]) {\n ';', ',' -> return position to value.subtrim(start, position)\n else -> position++\n }\n }\n return position to value.subtrim(start, position)\n}\n\nprivate fun parseHeaderValueParameterValueQuoted(value: String, start: Int): Pair<Int, String> {\n var position = start\n val builder = StringBuilder()\n loop@ while (position <= value.lastIndex) {\n val currentChar = value[position]\n\n when {\n currentChar == '\"' && value.nextIsSemicolonOrEnd(position) -> {\n return position + 1 to builder.toString()\n }\n currentChar == '\\\\' && position < value.lastIndex - 2 -> {\n builder.append(value[position + 1])\n position += 2\n continue@loop\n }\n }\n\n builder.append(currentChar)\n position++\n }\n\n // The value is unquoted here\n return position to '\"' + builder.toString()\n}\n\nprivate fun String.nextIsSemicolonOrEnd(start: Int): Boolean {\n var position = start + 1\n loop@ while (position < length && get(position) == ' ') {\n position += 1\n }\n\n return position == length || get(position) == ';'\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n@Suppress(\"unused\", \"KDocMissingDocumentation\", \"PublicApiImplicitType\", \"MayBeConstant\")\npublic object HttpHeaders {\n // Permanently registered standard HTTP headers\n // The list is taken from http://www.iana.org/assignments/message-headers/message-headers.xml#perm-headers\n\n public val Accept: String = \"Accept\"\n public val AcceptCharset: String = \"Accept-Charset\"\n public val AcceptEncoding: String = \"Accept-Encoding\"\n public val AcceptLanguage: String = \"Accept-Language\"\n public val AcceptRanges: String = \"Accept-Ranges\"\n public val Age: String = \"Age\"\n public val Allow: String = \"Allow\"\n public val ALPN: String = \"ALPN\" // Application-Layer Protocol Negotiation, HTTP/2\n public val AuthenticationInfo: String = \"Authentication-Info\"\n public val Authorization: String = \"Authorization\"\n public val CacheControl: String = \"Cache-Control\"\n public val Connection: String = \"Connection\"\n public val ContentDisposition: String = \"Content-Disposition\"\n public val ContentEncoding: String = \"Content-Encoding\"\n public val ContentLanguage: String = \"Content-Language\"\n public val ContentLength: String = \"Content-Length\"\n public val ContentLocation: String = \"Content-Location\"\n public val ContentRange: String = \"Content-Range\"\n public val ContentType: String = \"Content-Type\"\n public val Cookie: String = \"Cookie\"\n public val DASL: String = \"DASL\" // WebDAV Search\n public val Date: String = \"Date\"\n public val DAV: String = \"DAV\" // WebDAV\n public val Depth: String = \"Depth\" // WebDAV\n public val Destination: String = \"Destination\"\n public val ETag: String = \"ETag\"\n public val Expect: String = \"Expect\"\n public val Expires: String = \"Expires\"\n public val From: String = \"From\"\n public val Forwarded: String = \"Forwarded\"\n public val Host: String = \"Host\"\n public val HTTP2Settings: String = \"HTTP2-Settings\"\n public val If: String = \"If\"\n public val IfMatch: String = \"If-Match\"\n public val IfModifiedSince: String = \"If-Modified-Since\"\n public val IfNoneMatch: String = \"If-None-Match\"\n public val IfRange: String = \"If-Range\"\n public val IfScheduleTagMatch: String = \"If-Schedule-Tag-Match\"\n public val IfUnmodifiedSince: String = \"If-Unmodified-Since\"\n public val LastModified: String = \"Last-Modified\"\n public val Location: String = \"Location\"\n public val LockToken: String = \"Lock-Token\"\n public val Link: String = \"Link\"\n public val MaxForwards: String = \"Max-Forwards\"\n public val MIMEVersion: String = \"MIME-Version\"\n public val OrderingType: String = \"Ordering-Type\"\n public val Origin: String = \"Origin\"\n public val Overwrite: String = \"Overwrite\"\n public val Position: String = \"Position\"\n public val Pragma: String = \"Pragma\"\n public val Prefer: String = \"Prefer\"\n public val PreferenceApplied: String = \"Preference-Applied\"\n public val ProxyAuthenticate: String = \"Proxy-Authenticate\"\n public val ProxyAuthenticationInfo: String = \"Proxy-Authentication-Info\"\n public val ProxyAuthorization: String = \"Proxy-Authorization\"\n public val PublicKeyPins: String = \"Public-Key-Pins\"\n public val PublicKeyPinsReportOnly: String = \"Public-Key-Pins-Report-Only\"\n public val Range: String = \"Range\"\n public val Referrer: String = \"Referer\"\n public val RetryAfter: String = \"Retry-After\"\n public val ScheduleReply: String = \"Schedule-Reply\"\n public val ScheduleTag: String = \"Schedule-Tag\"\n public val SecWebSocketAccept: String = \"Sec-WebSocket-Accept\"\n public val SecWebSocketExtensions: String = \"Sec-WebSocket-Extensions\"\n public val SecWebSocketKey: String = \"Sec-WebSocket-Key\"\n public val SecWebSocketProtocol: String = \"Sec-WebSocket-Protocol\"\n public val SecWebSocketVersion: String = \"Sec-WebSocket-Version\"\n public val Server: String = \"Server\"\n public val SetCookie: String = \"Set-Cookie\"\n public val SLUG: String = \"SLUG\" // Atom Publishing\n public val StrictTransportSecurity: String = \"Strict-Transport-Security\"\n public val TE: String = \"TE\"\n public val Timeout: String = \"Timeout\"\n public val Trailer: String = \"Trailer\"\n public val TransferEncoding: String = \"Transfer-Encoding\"\n public val Upgrade: String = \"Upgrade\"\n public val UserAgent: String = \"User-Agent\"\n public val Vary: String = \"Vary\"\n public val Via: String = \"Via\"\n public val Warning: String = \"Warning\"\n public val WWWAuthenticate: String = \"WWW-Authenticate\"\n\n // CORS\n public val AccessControlAllowOrigin: String = \"Access-Control-Allow-Origin\"\n public val AccessControlAllowMethods: String = \"Access-Control-Allow-Methods\"\n public val AccessControlAllowCredentials: String = \"Access-Control-Allow-Credentials\"\n public val AccessControlAllowHeaders: String = \"Access-Control-Allow-Headers\"\n\n public val AccessControlRequestMethod: String = \"Access-Control-Request-Method\"\n public val AccessControlRequestHeaders: String = \"Access-Control-Request-Headers\"\n public val AccessControlExposeHeaders: String = \"Access-Control-Expose-Headers\"\n public val AccessControlMaxAge: String = \"Access-Control-Max-Age\"\n\n // Unofficial de-facto headers\n public val XHttpMethodOverride: String = \"X-Http-Method-Override\"\n public val XForwardedHost: String = \"X-Forwarded-Host\"\n public val XForwardedServer: String = \"X-Forwarded-Server\"\n public val XForwardedProto: String = \"X-Forwarded-Proto\"\n public val XForwardedFor: String = \"X-Forwarded-For\"\n\n public val XRequestId: String = \"X-Request-ID\"\n public val XCorrelationId: String = \"X-Correlation-ID\"\n public val XTotalCount: String = \"X-Total-Count\"\n\n /**\n * Check if [header] is unsafe. Header is unsafe if listed in [UnsafeHeadersList]\n */\n public fun isUnsafe(header: String): Boolean = UnsafeHeadersArray.any { it.equals(header, ignoreCase = true) }\n\n private val UnsafeHeadersArray: Array<String> = arrayOf(ContentLength, ContentType, TransferEncoding, Upgrade)\n\n @Deprecated(\"Use UnsafeHeadersList instead.\", replaceWith = ReplaceWith(\"HttpHeaders.UnsafeHeadersList\"))\n public val UnsafeHeaders: Array<String>\n get() = UnsafeHeadersArray.copyOf()\n\n /**\n * A list of header names that are not safe to use unless it is low-level engine implementation.\n */\n public val UnsafeHeadersList: List<String> = UnsafeHeadersArray.asList()\n\n /**\n * Validates header [name] throwing [IllegalHeaderNameException] when the name is not valid.\n */\n public fun checkHeaderName(name: String) {\n name.forEachIndexed { index, ch ->\n if (ch <= ' ' || isDelimiter(ch)) {\n throw IllegalHeaderNameException(name, index)\n }\n }\n }\n\n /**\n * Validates header [value] throwing [IllegalHeaderValueException] when the value is not valid.\n */\n public fun checkHeaderValue(value: String) {\n value.forEachIndexed { index, ch ->\n if (ch == ' ' || ch == '\\u0009') return@forEachIndexed\n if (ch < ' ') {\n throw IllegalHeaderValueException(value, index)\n }\n }\n }\n}\n\n/**\n * Thrown when an attempt to set unsafe header detected. A header is unsafe if listed in [HttpHeaders.UnsafeHeadersList].\n */\npublic class UnsafeHeaderException(header: String) : IllegalArgumentException(\n \"Header(s) $header are controlled by the engine and \" +\n \"cannot be set explicitly\"\n)\n\n/**\n * Thrown when an illegal header name was used.\n * A header name should only consist from visible characters\n * without delimiters \"double quote\" and the following characters: `(),/:;<=>?@[\\]{}`.\n * @property headerName that was tried to use\n * @property position at which validation failed\n */\npublic class IllegalHeaderNameException(public val headerName: String, public val position: Int) :\n IllegalArgumentException(\n \"Header name '$headerName' contains illegal character '${headerName[position]}'\" +\n \" (code ${(headerName[position].toInt() and 0xff)})\"\n )\n\n/**\n * Thrown when an illegal header value was used.\n * A header value should only consist from visible characters, spaces and/or HTAB (0x09).\n * @property headerValue that was tried to use\n * @property position at which validation failed\n */\npublic class IllegalHeaderValueException(public val headerValue: String, public val position: Int) :\n IllegalArgumentException(\n \"Header value '$headerValue' contains illegal character '${headerValue[position]}'\" +\n \" (code ${(headerValue[position].toInt() and 0xff)})\"\n )\n\nprivate fun isDelimiter(ch: Char): Boolean = ch in \"\\\"(),/:;<=>?@[\\\\]{}\"\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\n@file:Suppress(\"unused\")\n\npackage io.ktor.http\n\nimport io.ktor.utils.io.charsets.*\n\n/**\n * Set `Content-Type` header.\n */\npublic fun HttpMessageBuilder.contentType(type: ContentType): Unit =\n headers.set(HttpHeaders.ContentType, type.toString())\n\n@Deprecated(\n \"Content-Length is controlled by underlying engine. Don't specify it explicitly.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"KDocMissingDocumentation\", \"unused\", \"PublicApiImplicitType\", \"DeprecatedCallableAddReplaceWith\")\npublic fun HttpMessageBuilder.contentLength(length: Int): Unit =\n headers.set(HttpHeaders.ContentLength, length.toString())\n\n@Deprecated(\"Use content with particular content type and charset instead\", level = DeprecationLevel.ERROR)\n@Suppress(\"KDocMissingDocumentation\", \"unused\", \"PublicApiImplicitType\", \"DeprecatedCallableAddReplaceWith\")\npublic fun HttpMessageBuilder.charset(charset: Charset): Unit? =\n contentType()?.let { contentType(it.withCharset(charset)) }\n\n/**\n * Append `Max-Age` header value.\n */\npublic fun HttpMessageBuilder.maxAge(seconds: Int): Unit = headers.append(HttpHeaders.CacheControl, \"max-age=$seconds\")\n\n/**\n * Set `If-None-Match` header value.\n */\npublic fun HttpMessageBuilder.ifNoneMatch(value: String): Unit = headers.set(HttpHeaders.IfNoneMatch, value)\n\n/**\n * Set `User-Agent` header value.\n */\npublic fun HttpMessageBuilder.userAgent(content: String): Unit = headers.set(HttpHeaders.UserAgent, content)\n\n/**\n * Parse `Content-Type` header value.\n */\npublic fun HttpMessageBuilder.contentType(): ContentType? =\n headers[HttpHeaders.ContentType]?.let { ContentType.parse(it) }\n\n/**\n * Parse charset from `Content-Type` header value.\n */\npublic fun HttpMessageBuilder.charset(): Charset? = contentType()?.charset()\n\n/**\n * Parse `E-Tag` header value.\n */\npublic fun HttpMessageBuilder.etag(): String? = headers[HttpHeaders.ETag]\n\n/**\n * Parse `Vary` header value.\n */\npublic fun HttpMessageBuilder.vary(): List<String>? = headers[HttpHeaders.Vary]?.split(\",\")?.map { it.trim() }\n\n/**\n * Parse `Content-Length` header value.\n */\npublic fun HttpMessageBuilder.contentLength(): Long? = headers[HttpHeaders.ContentLength]?.toLong()\n\n/**\n * Parse `Content-Type` header value.\n */\npublic fun HttpMessage.contentType(): ContentType? = headers[HttpHeaders.ContentType]?.let { ContentType.parse(it) }\n\n/**\n * Parse charset from `Content-Type` header value.\n */\npublic fun HttpMessage.charset(): Charset? = contentType()?.charset()\n\n/**\n * Parse `E-Tag` header value.\n */\npublic fun HttpMessage.etag(): String? = headers[HttpHeaders.ETag]\n\n/**\n * Parse `Vary` header value.\n */\npublic fun HttpMessage.vary(): List<String>? = headers[HttpHeaders.Vary]?.split(\",\")?.map { it.trim() }\n\n/**\n * Parse `Content-Length` header value.\n */\npublic fun HttpMessage.contentLength(): Long? = headers[HttpHeaders.ContentLength]?.toLong()\n\n/**\n * Parse `Set-Cookie` header value.\n */\npublic fun HttpMessage.setCookie(): List<Cookie> = headers.getAll(HttpHeaders.SetCookie)\n ?.flatMap { it.splitSetCookieHeader() }\n ?.map { parseServerSetCookieHeader(it) }\n ?: emptyList()\n\n/**\n * Parse `Set-Cookie` header value.\n */\npublic fun HttpMessageBuilder.cookies(): List<Cookie> =\n headers.getAll(HttpHeaders.SetCookie)?.map { parseServerSetCookieHeader(it) } ?: emptyList()\n\n/**\n * Parse `CacheControl` header.\n */\npublic fun HttpMessage.cacheControl(): List<HeaderValue> = headers[HttpHeaders.CacheControl]?.let {\n parseHeaderValue(it)\n} ?: emptyList()\n\ninternal fun String.splitSetCookieHeader(): List<String> {\n var comma = indexOf(',')\n\n if (comma == -1) {\n return listOf(this)\n }\n\n val result = mutableListOf<String>()\n var current = 0\n\n var equals = indexOf('=', comma)\n var semicolon = indexOf(';', comma)\n while (current < length && comma > 0) {\n if (equals < comma) {\n equals = indexOf('=', comma)\n }\n\n var nextComma = indexOf(',', comma + 1)\n while (nextComma >= 0 && nextComma < equals) {\n comma = nextComma\n nextComma = indexOf(',', nextComma + 1)\n }\n\n if (semicolon < comma) {\n semicolon = indexOf(';', comma)\n }\n\n // No more keys remaining.\n if (equals < 0) {\n result += substring(current)\n return result\n }\n\n // No ';' between ',' and '=' => We're on a header border.\n if (semicolon == -1 || semicolon > equals) {\n result += substring(current, comma)\n current = comma + 1\n // Update comma index at the end of loop.\n }\n\n // ',' in value, skip it and find next.\n comma = nextComma\n }\n\n // Add last chunk if no more ',' available.\n if (current < length) {\n result += substring(current)\n }\n\n return result\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents an HTTP method (verb)\n * @property value contains method name\n */\npublic data class HttpMethod(val value: String) {\n @Suppress(\"KDocMissingDocumentation\", \"PublicApiImplicitType\")\n public companion object {\n public val Get: HttpMethod = HttpMethod(\"GET\")\n public val Post: HttpMethod = HttpMethod(\"POST\")\n public val Put: HttpMethod = HttpMethod(\"PUT\")\n public val Patch: HttpMethod = HttpMethod(\"PATCH\") // https://tools.ietf.org/html/rfc5789\n public val Delete: HttpMethod = HttpMethod(\"DELETE\")\n public val Head: HttpMethod = HttpMethod(\"HEAD\")\n public val Options: HttpMethod = HttpMethod(\"OPTIONS\")\n\n /**\n * Parse HTTP method by [method] string\n */\n public fun parse(method: String): HttpMethod {\n return when (method) {\n Get.value -> Get\n Post.value -> Post\n Put.value -> Put\n Patch.value -> Patch\n Delete.value -> Delete\n Head.value -> Head\n Options.value -> Options\n else -> HttpMethod(method)\n }\n }\n\n /**\n * A list of default HTTP methods\n */\n public val DefaultMethods: List<HttpMethod> = listOf(Get, Post, Put, Patch, Delete, Head, Options)\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents an HTTP protocol version.\n * @property name specifies name of the protocol, e.g. \"HTTP\".\n * @property major specifies protocol major version.\n * @property minor specifies protocol minor version.\n */\npublic data class HttpProtocolVersion(val name: String, val major: Int, val minor: Int) {\n @Suppress(\"PublicApiImplicitType\")\n public companion object {\n /**\n * HTTP/2.0 version.\n */\n public val HTTP_2_0: HttpProtocolVersion = HttpProtocolVersion(\"HTTP\", 2, 0)\n\n /**\n * HTTP/1.1 version.\n */\n public val HTTP_1_1: HttpProtocolVersion = HttpProtocolVersion(\"HTTP\", 1, 1)\n\n /**\n * HTTP/1.0 version.\n */\n public val HTTP_1_0: HttpProtocolVersion = HttpProtocolVersion(\"HTTP\", 1, 0)\n\n /**\n * SPDY/3.0 version.\n */\n public val SPDY_3: HttpProtocolVersion = HttpProtocolVersion(\"SPDY\", 3, 0)\n\n /**\n * QUIC/1.0 version.\n */\n public val QUIC: HttpProtocolVersion = HttpProtocolVersion(\"QUIC\", 1, 0)\n\n /**\n * Creates an instance of [HttpProtocolVersion] from the given parameters.\n */\n public fun fromValue(name: String, major: Int, minor: Int): HttpProtocolVersion = when {\n name == \"HTTP\" && major == 1 && minor == 1 -> HTTP_1_1\n name == \"HTTP\" && major == 2 && minor == 0 -> HTTP_2_0\n else -> HttpProtocolVersion(name, major, minor)\n }\n\n /**\n * Create an instance of [HttpProtocolVersion] from http string representation.\n */\n public fun parse(value: CharSequence): HttpProtocolVersion {\n /**\n * Format: protocol/major.minor\n */\n val (protocol, major, minor) = value.split(\"/\", \".\").also {\n check(it.size == 3) {\n \"Failed to parse HttpProtocolVersion. Expected format: protocol/major.minor, but actual: $value\"\n }\n }\n\n return fromValue(protocol, major.toInt(), minor.toInt())\n }\n }\n\n override fun toString(): String = \"$name/$major.$minor\"\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents an HTTP status code and description.\n * @param value is a numeric code.\n * @param description is free form description of a status.\n */\n@Suppress(\"unused\")\npublic data class HttpStatusCode(val value: Int, val description: String) {\n override fun toString(): String = \"$value $description\"\n\n override fun equals(other: Any?): Boolean = other is HttpStatusCode && other.value == value\n\n override fun hashCode(): Int = value.hashCode()\n\n /**\n * Returns a copy of `this` code with a description changed to [value].\n */\n public fun description(value: String): HttpStatusCode = copy(description = value)\n\n @Suppress(\"KDocMissingDocumentation\", \"PublicApiImplicitType\")\n public companion object {\n // =============================================================================================================\n // Disclaimer\n // Adding a new status code here please remember [allStatusCodes] as well\n //\n\n public val Continue: HttpStatusCode = HttpStatusCode(100, \"Continue\")\n public val SwitchingProtocols: HttpStatusCode = HttpStatusCode(101, \"Switching Protocols\")\n public val Processing: HttpStatusCode = HttpStatusCode(102, \"Processing\")\n\n public val OK: HttpStatusCode = HttpStatusCode(200, \"OK\")\n public val Created: HttpStatusCode = HttpStatusCode(201, \"Created\")\n public val Accepted: HttpStatusCode = HttpStatusCode(202, \"Accepted\")\n\n public val NonAuthoritativeInformation: HttpStatusCode =\n HttpStatusCode(203, \"Non-Authoritative Information\")\n\n public val NoContent: HttpStatusCode = HttpStatusCode(204, \"No Content\")\n public val ResetContent: HttpStatusCode = HttpStatusCode(205, \"Reset Content\")\n public val PartialContent: HttpStatusCode = HttpStatusCode(206, \"Partial Content\")\n public val MultiStatus: HttpStatusCode = HttpStatusCode(207, \"Multi-Status\")\n\n public val MultipleChoices: HttpStatusCode = HttpStatusCode(300, \"Multiple Choices\")\n public val MovedPermanently: HttpStatusCode = HttpStatusCode(301, \"Moved Permanently\")\n public val Found: HttpStatusCode = HttpStatusCode(302, \"Found\")\n public val SeeOther: HttpStatusCode = HttpStatusCode(303, \"See Other\")\n public val NotModified: HttpStatusCode = HttpStatusCode(304, \"Not Modified\")\n public val UseProxy: HttpStatusCode = HttpStatusCode(305, \"Use Proxy\")\n public val SwitchProxy: HttpStatusCode = HttpStatusCode(306, \"Switch Proxy\")\n public val TemporaryRedirect: HttpStatusCode = HttpStatusCode(307, \"Temporary Redirect\")\n public val PermanentRedirect: HttpStatusCode = HttpStatusCode(308, \"Permanent Redirect\")\n\n public val BadRequest: HttpStatusCode = HttpStatusCode(400, \"Bad Request\")\n public val Unauthorized: HttpStatusCode = HttpStatusCode(401, \"Unauthorized\")\n public val PaymentRequired: HttpStatusCode = HttpStatusCode(402, \"Payment Required\")\n public val Forbidden: HttpStatusCode = HttpStatusCode(403, \"Forbidden\")\n public val NotFound: HttpStatusCode = HttpStatusCode(404, \"Not Found\")\n public val MethodNotAllowed: HttpStatusCode = HttpStatusCode(405, \"Method Not Allowed\")\n public val NotAcceptable: HttpStatusCode = HttpStatusCode(406, \"Not Acceptable\")\n\n public val ProxyAuthenticationRequired: HttpStatusCode =\n HttpStatusCode(407, \"Proxy Authentication Required\")\n\n public val RequestTimeout: HttpStatusCode = HttpStatusCode(408, \"Request Timeout\")\n public val Conflict: HttpStatusCode = HttpStatusCode(409, \"Conflict\")\n public val Gone: HttpStatusCode = HttpStatusCode(410, \"Gone\")\n public val LengthRequired: HttpStatusCode = HttpStatusCode(411, \"Length Required\")\n public val PreconditionFailed: HttpStatusCode = HttpStatusCode(412, \"Precondition Failed\")\n public val PayloadTooLarge: HttpStatusCode = HttpStatusCode(413, \"Payload Too Large\")\n public val RequestURITooLong: HttpStatusCode = HttpStatusCode(414, \"Request-URI Too Long\")\n\n public val UnsupportedMediaType: HttpStatusCode = HttpStatusCode(415, \"Unsupported Media Type\")\n\n public val RequestedRangeNotSatisfiable: HttpStatusCode =\n HttpStatusCode(416, \"Requested Range Not Satisfiable\")\n\n public val ExpectationFailed: HttpStatusCode = HttpStatusCode(417, \"Expectation Failed\")\n public val UnprocessableEntity: HttpStatusCode = HttpStatusCode(422, \"Unprocessable Entity\")\n public val Locked: HttpStatusCode = HttpStatusCode(423, \"Locked\")\n public val FailedDependency: HttpStatusCode = HttpStatusCode(424, \"Failed Dependency\")\n public val UpgradeRequired: HttpStatusCode = HttpStatusCode(426, \"Upgrade Required\")\n public val TooManyRequests: HttpStatusCode = HttpStatusCode(429, \"Too Many Requests\")\n\n public val RequestHeaderFieldTooLarge: HttpStatusCode =\n HttpStatusCode(431, \"Request Header Fields Too Large\")\n\n public val InternalServerError: HttpStatusCode = HttpStatusCode(500, \"Internal Server Error\")\n public val NotImplemented: HttpStatusCode = HttpStatusCode(501, \"Not Implemented\")\n public val BadGateway: HttpStatusCode = HttpStatusCode(502, \"Bad Gateway\")\n public val ServiceUnavailable: HttpStatusCode = HttpStatusCode(503, \"Service Unavailable\")\n public val GatewayTimeout: HttpStatusCode = HttpStatusCode(504, \"Gateway Timeout\")\n\n public val VersionNotSupported: HttpStatusCode =\n HttpStatusCode(505, \"HTTP Version Not Supported\")\n\n public val VariantAlsoNegotiates: HttpStatusCode = HttpStatusCode(506, \"Variant Also Negotiates\")\n public val InsufficientStorage: HttpStatusCode = HttpStatusCode(507, \"Insufficient Storage\")\n\n /**\n * All known status codes\n */\n public val allStatusCodes: List<HttpStatusCode> = allStatusCodes()\n\n private val byValue: Array<HttpStatusCode?> = Array(1000) { idx ->\n allStatusCodes.firstOrNull { it.value == idx }\n }\n\n /**\n * Creates an instance of [HttpStatusCode] with the given numeric value.\n */\n public fun fromValue(value: Int): HttpStatusCode {\n val knownStatus = if (value in 1 until 1000) byValue[value] else null\n return knownStatus ?: HttpStatusCode(value, \"Unknown Status Code\")\n }\n }\n}\n\n@Suppress(\"UNUSED\", \"KDocMissingDocumentation\")\n@Deprecated(\n \"Use ExpectationFailed instead\",\n ReplaceWith(\"ExpectationFailed\", \"io.ktor.http.HttpStatusCode.Companion.ExpectationFailed\"),\n level = DeprecationLevel.ERROR\n)\npublic inline val HttpStatusCode.Companion.ExceptionFailed: HttpStatusCode\n get() = ExpectationFailed\n\ninternal fun allStatusCodes(): List<HttpStatusCode> = listOf(\n HttpStatusCode.Continue,\n HttpStatusCode.SwitchingProtocols,\n HttpStatusCode.Processing,\n HttpStatusCode.OK,\n HttpStatusCode.Created,\n HttpStatusCode.Accepted,\n HttpStatusCode.NonAuthoritativeInformation,\n HttpStatusCode.NoContent,\n HttpStatusCode.ResetContent,\n HttpStatusCode.PartialContent,\n HttpStatusCode.MultiStatus,\n HttpStatusCode.MultipleChoices,\n HttpStatusCode.MovedPermanently,\n HttpStatusCode.Found,\n HttpStatusCode.SeeOther,\n HttpStatusCode.NotModified,\n HttpStatusCode.UseProxy,\n HttpStatusCode.SwitchProxy,\n HttpStatusCode.TemporaryRedirect,\n HttpStatusCode.PermanentRedirect,\n HttpStatusCode.BadRequest,\n HttpStatusCode.Unauthorized,\n HttpStatusCode.PaymentRequired,\n HttpStatusCode.Forbidden,\n HttpStatusCode.NotFound,\n HttpStatusCode.MethodNotAllowed,\n HttpStatusCode.NotAcceptable,\n HttpStatusCode.ProxyAuthenticationRequired,\n HttpStatusCode.RequestTimeout,\n HttpStatusCode.Conflict,\n HttpStatusCode.Gone,\n HttpStatusCode.LengthRequired,\n HttpStatusCode.PreconditionFailed,\n HttpStatusCode.PayloadTooLarge,\n HttpStatusCode.RequestURITooLong,\n HttpStatusCode.UnsupportedMediaType,\n HttpStatusCode.RequestedRangeNotSatisfiable,\n HttpStatusCode.ExpectationFailed,\n HttpStatusCode.UnprocessableEntity,\n HttpStatusCode.Locked,\n HttpStatusCode.FailedDependency,\n HttpStatusCode.UpgradeRequired,\n HttpStatusCode.TooManyRequests,\n HttpStatusCode.RequestHeaderFieldTooLarge,\n HttpStatusCode.InternalServerError,\n HttpStatusCode.NotImplemented,\n HttpStatusCode.BadGateway,\n HttpStatusCode.ServiceUnavailable,\n HttpStatusCode.GatewayTimeout,\n HttpStatusCode.VersionNotSupported,\n HttpStatusCode.VariantAlsoNegotiates,\n HttpStatusCode.InsufficientStorage\n)\n\n/**\n * Checks if a given status code is a success code according to HTTP standards.\n *\n * Codes from 200 to 299 are considered to be successful.\n */\npublic fun HttpStatusCode.isSuccess(): Boolean = value in (200 until 300)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.utils.io.charsets.*\n\n/**\n * Parse URL query parameters. Shouldn't be used for urlencoded forms because of `+` character.\n */\npublic fun String.parseUrlEncodedParameters(defaultEncoding: Charset = Charsets.UTF_8, limit: Int = 1000): Parameters {\n val parameters: List<Pair<String, String>> =\n split(\"&\", limit = limit).map { it.substringBefore(\"=\") to it.substringAfter(\"=\", \"\") }\n val encoding: String =\n parameters.firstOrNull { it.first == \"_charset_\" }?.second ?: defaultEncoding.name\n\n val charset = Charset.forName(encoding)\n return Parameters.build {\n parameters.forEach { (key, value) ->\n append(\n key.decodeURLQueryComponent(charset = charset),\n value.decodeURLQueryComponent(charset = charset)\n )\n }\n }\n}\n\n/**\n * Encode form parameters from a list of pairs\n */\npublic fun List<Pair<String, String?>>.formUrlEncode(): String = StringBuilder().apply {\n formUrlEncodeTo(this)\n}.toString()\n\n/**\n * Encode form parameters from a list of pairs to the specified [out] appendable\n */\npublic fun List<Pair<String, String?>>.formUrlEncodeTo(out: Appendable) {\n joinTo(out, \"&\") {\n val key = it.first.encodeURLParameter(spaceToPlus = true)\n if (it.second == null) {\n key\n } else {\n val value = it.second.toString().encodeURLParameterValue()\n \"$key=$value\"\n }\n }\n}\n\n/**\n * Encode form parameters\n */\npublic fun Parameters.formUrlEncode(): String = entries()\n .flatMap { e -> e.value.map { e.key to it } }\n .formUrlEncode()\n\n/**\n * Encode form parameters to the specified [out] appendable\n */\npublic fun Parameters.formUrlEncodeTo(out: Appendable) {\n entries().formUrlEncodeTo(out)\n}\n\ninternal fun ParametersBuilder.formUrlEncodeTo(out: Appendable) {\n entries().formUrlEncodeTo(out)\n}\n\ninternal fun Set<Map.Entry<String, List<String>>>.formUrlEncodeTo(out: Appendable) {\n flatMap { (key, value) ->\n if (value.isEmpty()) listOf(key to null) else value.map { key to it }\n }.formUrlEncodeTo(out)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Represents HTTP parameters as a map from case-insensitive names to collection of [String] values\n */\npublic interface Parameters : StringValues {\n public companion object {\n /**\n * Empty [Parameters] instance\n */\n @Suppress(\"DEPRECATION_ERROR\")\n public val Empty: Parameters = EmptyParameters\n\n /**\n * Builds a [Parameters] instance with the given [builder] function\n * @param builder specifies a function to build a map\n */\n public inline fun build(builder: ParametersBuilder.() -> Unit): Parameters =\n ParametersBuilder().apply(builder).build()\n }\n}\n\n@Suppress(\"KDocMissingDocumentation\")\npublic class ParametersBuilder(size: Int = 8) : StringValuesBuilder(true, size) {\n override fun build(): Parameters {\n require(!built) { \"ParametersBuilder can only build a single Parameters instance\" }\n built = true\n return ParametersImpl(values)\n }\n}\n\n@Suppress(\"KDocMissingDocumentation\")\n@Deprecated(\n \"Empty parameters is internal\",\n replaceWith = ReplaceWith(\"Parameters.Empty\"),\n level = DeprecationLevel.ERROR\n)\npublic object EmptyParameters : Parameters {\n override val caseInsensitiveName: Boolean get() = true\n override fun getAll(name: String): List<String>? = null\n override fun names(): Set<String> = emptySet()\n override fun entries(): Set<Map.Entry<String, List<String>>> = emptySet()\n override fun isEmpty(): Boolean = true\n override fun toString(): String = \"Parameters ${entries()}\"\n\n override fun equals(other: Any?): Boolean = other is Parameters && other.isEmpty()\n}\n\n/**\n * Returns an empty parameters instance\n */\npublic fun parametersOf(): Parameters = Parameters.Empty\n\n/**\n * Creates a parameters instance containing only single pair\n */\npublic fun parametersOf(name: String, value: String): Parameters = ParametersSingleImpl(name, listOf(value))\n\n/**\n * Creates a parameters instance containing only single pair of [name] with multiple [values]\n */\npublic fun parametersOf(name: String, values: List<String>): Parameters = ParametersSingleImpl(name, values)\n\n/**\n * Creates a parameters instance from the specified [pairs]\n */\npublic fun parametersOf(vararg pairs: Pair<String, List<String>>): Parameters = ParametersImpl(pairs.asList().toMap())\n\n@Suppress(\"KDocMissingDocumentation\")\n@InternalAPI\npublic class ParametersImpl(values: Map<String, List<String>> = emptyMap()) : Parameters,\n StringValuesImpl(true, values) {\n override fun toString(): String = \"Parameters ${entries()}\"\n}\n\n@Suppress(\"KDocMissingDocumentation\")\n@InternalAPI\npublic class ParametersSingleImpl(name: String, values: List<String>) : Parameters,\n StringValuesSingleImpl(true, name, values) {\n override fun toString(): String = \"Parameters ${entries()}\"\n}\n\n/**\n * Plus operator function that creates a new parameters instance from the original one concatenating with [other]\n */\npublic operator fun Parameters.plus(other: Parameters): Parameters = when {\n caseInsensitiveName == other.caseInsensitiveName -> when {\n this.isEmpty() -> other\n other.isEmpty() -> this\n else -> Parameters.build { appendAll(this@plus); appendAll(other) }\n }\n else -> {\n throw IllegalArgumentException(\n \"Cannot concatenate Parameters with case-sensitive and case-insensitive names\"\n )\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Represents a `Link` header value as per RFC 5988\n */\npublic class LinkHeader(\n uri: String,\n params: List<HeaderValueParam>\n) : HeaderValueWithParameters(\"<$uri>\", params) {\n\n @Suppress(\"unused\")\n public constructor(uri: String, rel: String) : this(uri, listOf(HeaderValueParam(Parameters.Rel, rel)))\n\n public constructor(uri: String, vararg rel: String) : this(\n uri,\n listOf(HeaderValueParam(Parameters.Rel, rel.joinToString(\" \")))\n )\n\n @Suppress(\"unused\")\n public constructor(\n uri: String,\n rel: List<String>,\n type: ContentType\n ) : this(\n uri,\n listOf(\n HeaderValueParam(Parameters.Rel, rel.joinToString(\" \")),\n HeaderValueParam(Parameters.Type, type.toString())\n )\n )\n\n /**\n * Link URI part\n */\n public val uri: String\n get() = content.removePrefix(\"<\").removeSuffix(\">\")\n\n /**\n * Known Link header parameters\n */\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"PublicApiImplicitType\")\n public object Parameters {\n public const val Rel: String = \"rel\"\n public const val Anchor: String = \"anchor\"\n public const val Rev: String = \"Rev\"\n public const val HrefLang: String = \"hreflang\"\n public const val Media: String = \"media\"\n public const val Title: String = \"title\"\n public const val Type: String = \"type\"\n }\n\n /**\n * Known rel parameter values\n */\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"PublicApiImplicitType\")\n public object Rel {\n public const val Stylesheet: String = \"stylesheet\"\n\n public const val Prefetch: String = \"prefetch\"\n public const val DnsPrefetch: String = \"dns-prefetch\"\n public const val PreConnect: String = \"preconnect\"\n public const val PreLoad: String = \"preload\"\n public const val PreRender: String = \"prerender\"\n public const val Next: String = \"next\"\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Parse query string withing starting at the specified [startIndex] but up to [limit] pairs\n */\npublic fun parseQueryString(query: String, startIndex: Int = 0, limit: Int = 1000): Parameters {\n return if (startIndex > query.lastIndex) {\n Parameters.Empty\n } else {\n Parameters.build { parse(query, startIndex, limit) }\n }\n}\n\nprivate fun ParametersBuilder.parse(query: String, startIndex: Int, limit: Int) {\n var count = 0\n var nameIndex = startIndex\n var equalIndex = -1\n for (index in startIndex..query.lastIndex) {\n if (count == limit) {\n return\n }\n when (query[index]) {\n '&' -> {\n appendParam(query, nameIndex, equalIndex, index)\n nameIndex = index + 1\n equalIndex = -1\n count++\n }\n '=' -> {\n if (equalIndex == -1) {\n equalIndex = index\n }\n }\n }\n }\n if (count == limit) {\n return\n }\n appendParam(query, nameIndex, equalIndex, query.length)\n}\n\nprivate fun ParametersBuilder.appendParam(query: String, nameIndex: Int, equalIndex: Int, endIndex: Int) {\n if (equalIndex == -1) {\n val spaceNameIndex = trimStart(nameIndex, endIndex, query)\n val spaceEndIndex = trimEnd(spaceNameIndex, endIndex, query)\n\n if (spaceEndIndex > spaceNameIndex) {\n val name = query.decodeURLQueryComponent(spaceNameIndex, spaceEndIndex)\n appendAll(name, emptyList())\n }\n } else {\n val spaceNameIndex = trimStart(nameIndex, equalIndex, query)\n val spaceEqualIndex = trimEnd(spaceNameIndex, equalIndex, query)\n if (spaceEqualIndex > spaceNameIndex) {\n val name = query.decodeURLQueryComponent(spaceNameIndex, spaceEqualIndex)\n\n val spaceValueIndex = trimStart(equalIndex + 1, endIndex, query)\n val spaceEndIndex = trimEnd(spaceValueIndex, endIndex, query)\n val value = query.decodeURLQueryComponent(spaceValueIndex, spaceEndIndex, plusIsSpace = true)\n append(name, value)\n }\n }\n}\n\nprivate fun trimEnd(start: Int, end: Int, text: CharSequence): Int {\n var spaceIndex = end\n while (spaceIndex > start && text[spaceIndex - 1].isWhitespace()) spaceIndex--\n return spaceIndex\n}\n\nprivate fun trimStart(start: Int, end: Int, query: CharSequence): Int {\n var spaceIndex = start\n while (spaceIndex < end && query[spaceIndex].isWhitespace()) spaceIndex++\n return spaceIndex\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport kotlin.math.*\n\n/**\n * Possible content range units: bytes and none\n * @property unitToken Lower-case unit name\n */\npublic enum class RangeUnits(public val unitToken: String) {\n /**\n * Range unit `bytes`\n */\n Bytes(\"bytes\"),\n\n /**\n * Range unit `none`\n */\n None(\"none\");\n}\n\n/**\n * Represents a `Range` header's particular range\n */\npublic sealed class ContentRange {\n /**\n * Represents a `Content-Range` bounded from both sides\n * @property from index from which the content should begin\n * @property to the last index the content should end at (inclusive)\n */\n public data class Bounded(val from: Long, val to: Long) : ContentRange() {\n override fun toString(): String = \"$from-$to\"\n }\n\n /**\n * Represents a `Content-Range` bounded at the beginning (skip first bytes, show tail)\n * @property from index from which the content should begin\n */\n public data class TailFrom(val from: Long) : ContentRange() {\n override fun toString(): String = \"$from-\"\n }\n\n /**\n * Represents a `Content-Range` bounded by tail size\n * @property lastCount number of tail bytes\n */\n public data class Suffix(val lastCount: Long) : ContentRange() {\n override fun toString(): String = \"-$lastCount\"\n }\n}\n\n/**\n * Parse `Range` header value\n */\npublic fun parseRangesSpecifier(rangeSpec: String): RangesSpecifier? {\n try {\n val (unit, allRangesString) = rangeSpec.chomp(\"=\") { return null }\n val allRanges = allRangesString.split(',').map {\n if (it.startsWith(\"-\")) {\n ContentRange.Suffix(it.removePrefix(\"-\").toLong())\n } else {\n val (from, to) = it.chomp(\"-\") { \"\" to \"\" }\n when {\n to.isNotEmpty() -> ContentRange.Bounded(from.toLong(), to.toLong())\n else -> ContentRange.TailFrom(from.toLong())\n }\n }\n }\n\n if (allRanges.isEmpty() || unit.isEmpty()) {\n return null\n }\n\n val spec = RangesSpecifier(unit, allRanges)\n return if (spec.isValid()) spec else null\n } catch (e: Throwable) {\n return null // according to the specification we should ignore syntactically incorrect headers\n }\n}\n\ninternal fun List<ContentRange>.toLongRanges(contentLength: Long) = map {\n when (it) {\n is ContentRange.Bounded -> it.from..it.to.coerceAtMost(contentLength - 1)\n is ContentRange.TailFrom -> it.from until contentLength\n is ContentRange.Suffix -> (contentLength - it.lastCount).coerceAtLeast(0L) until contentLength\n }\n}.filterNot { it.isEmpty() }\n\n// O (N^2 + N ln (N) + N)\ninternal fun List<LongRange>.mergeRangesKeepOrder(): List<LongRange> {\n val sortedMerged = sortedBy { it.start }.fold(ArrayList<LongRange>(size)) { acc, range ->\n when {\n acc.isEmpty() -> acc.add(range)\n acc.last().endInclusive < range.start - 1 -> acc.add(range)\n else -> {\n val last = acc.last()\n acc[acc.lastIndex] = last.start..max(last.endInclusive, range.endInclusive)\n }\n }\n acc\n }\n val result = arrayOfNulls<LongRange>(size)\n\n for (range in sortedMerged) {\n for (i in indices) {\n if (this[i] in range) {\n result[i] = range\n break\n }\n }\n }\n\n return result.filterNotNull()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\n/**\n * Select default port value from protocol.\n */\npublic const val DEFAULT_PORT: Int = 0\n\n/**\n * A URL builder with all mutable components\n *\n * @property protocol URL protocol (scheme)\n * @property host name without port (domain)\n * @property port port number\n * @property user username part (optional)\n * @property password password part (optional)\n * @property encodedPath encoded URL path without query\n * @property parameters URL query parameters\n * @property fragment URL fragment (anchor name)\n * @property trailingQuery keep a trailing question character even if there are no query parameters\n */\npublic class URLBuilder(\n public var protocol: URLProtocol = URLProtocol.HTTP,\n public var host: String = \"localhost\",\n public var port: Int = DEFAULT_PORT,\n public var user: String? = null,\n public var password: String? = null,\n public var encodedPath: String = \"/\",\n public val parameters: ParametersBuilder = ParametersBuilder(),\n public var fragment: String = \"\",\n public var trailingQuery: Boolean = false\n) {\n init {\n originHost?.let { takeFrom(it) }\n\n if (encodedPath.isEmpty()) {\n encodedPath = \"/\"\n }\n }\n\n /**\n * Encode [components] to [encodedPath]\n */\n public fun path(vararg components: String): URLBuilder {\n path(components.asList())\n\n return this\n }\n\n /**\n * Encode [components] to [encodedPath]\n */\n public fun path(components: List<String>): URLBuilder {\n encodedPath = components.joinToString(\"/\", prefix = \"/\") { it.encodeURLPath() }\n\n return this\n }\n\n private fun <A : Appendable> appendTo(out: A): A {\n out.append(protocol.name)\n\n when (protocol.name) {\n \"file\" -> {\n out.appendFile(host, encodedPath)\n return out\n }\n \"mailto\" -> {\n out.appendMailto(userAndPassword, encodedPath)\n return out\n }\n }\n\n out.append(\"://\")\n out.append(authority)\n\n out.appendUrlFullPath(encodedPath, parameters, trailingQuery)\n\n if (fragment.isNotEmpty()) {\n out.append('#')\n out.append(fragment.encodeURLQueryComponent())\n }\n\n return out\n }\n\n /**\n * Build a URL string\n */\n // note: 256 should fit 99.5% of all urls according to http://www.supermind.org/blog/740/average-length-of-a-url-part-2\n public fun buildString(): String = appendTo(StringBuilder(256)).toString()\n\n /**\n * Build a [Url] instance (everything is copied to a new instance)\n */\n public fun build(): Url = Url(\n protocol, host, port, encodedPath, parameters.build(), fragment, user, password, trailingQuery\n )\n\n // Required to write external extension function\n public companion object\n}\n\n/**\n * Hostname of current origin.\n *\n * It uses \"localhost\" for all platforms except js.\n */\ninternal expect val URLBuilder.Companion.originHost: String?\n\n/**\n * Create a copy of this builder. Modifications in a copy is not reflected in the original instance and vise-versa.\n */\npublic fun URLBuilder.clone(): URLBuilder = URLBuilder().takeFrom(this)\n\n/**\n * Represents an immutable URL\n *\n * @property protocol\n * @property host name without port (domain)\n * @property port the specified port or protocol default port\n * @property specifiedPort port number that was specified to override protocol's default\n * @property encodedPath encoded path without query string\n * @property parameters URL query parameters\n * @property fragment URL fragment (anchor name)\n * @property user username part of URL\n * @property password password part of URL\n * @property trailingQuery keep trailing question character even if there are no query parameters\n */\npublic data class Url(\n val protocol: URLProtocol,\n val host: String,\n val specifiedPort: Int,\n val encodedPath: String,\n val parameters: Parameters,\n val fragment: String,\n val user: String?,\n val password: String?,\n val trailingQuery: Boolean\n) {\n init {\n require(\n specifiedPort in 1..65536 ||\n specifiedPort == DEFAULT_PORT\n ) { \"port must be between 1 and 65536, or $DEFAULT_PORT if not set\" }\n }\n\n val port: Int get() = specifiedPort.takeUnless { it == DEFAULT_PORT } ?: protocol.defaultPort\n\n override fun toString(): String = buildString {\n append(protocol.name)\n\n when (protocol.name) {\n \"file\" -> {\n appendFile(host, encodedPath)\n return@buildString\n }\n \"mailto\" -> {\n val userValue = user ?: error(\"User can't be empty.\")\n appendMailto(userValue, host)\n return@buildString\n }\n }\n\n append(\"://\")\n append(authority)\n append(fullPath)\n\n if (fragment.isNotEmpty()) {\n append('#')\n append(fragment)\n }\n }\n\n public companion object\n}\n\nprivate fun Appendable.appendMailto(user: String, host: String) {\n append(\":\")\n append(user.encodeURLParameter())\n append('@')\n append(host)\n}\n\nprivate fun Appendable.appendFile(host: String, encodedPath: String) {\n append(\"://\")\n append(host)\n append(encodedPath)\n}\n\ninternal val Url.userAndPassword: String\n get() = buildString {\n appendUserAndPassword(user, password)\n }\n\ninternal val URLBuilder.userAndPassword: String\n get() = buildString {\n appendUserAndPassword(user, password)\n }\n\nprivate fun StringBuilder.appendUserAndPassword(user: String?, password: String?) {\n user ?: return\n append(user.encodeURLParameter())\n\n if (password != null) {\n append(':')\n append(password.encodeURLParameter())\n }\n\n append(\"@\")\n}\n\n/**\n * [Url] authority.\n */\npublic val Url.authority: String\n get() = buildString {\n append(userAndPassword)\n\n if (specifiedPort == DEFAULT_PORT) {\n append(host)\n } else {\n append(hostWithPort)\n }\n }\n\n/**\n * [URLBuilder] authority.\n */\npublic val URLBuilder.authority: String\n get() = buildString {\n append(userAndPassword)\n append(host)\n\n if (port != DEFAULT_PORT && port != protocol.defaultPort) {\n append(\":\")\n append(port.toString())\n }\n }\n\n/**\n * Adds [components] to current [encodedPath]\n */\npublic fun URLBuilder.pathComponents(components: List<String>): URLBuilder {\n var paths = components\n .map { part -> part.dropWhile { it == '/' }.dropLastWhile { it == '/' }.encodeURLQueryComponent() }\n .filter { it.isNotEmpty() }\n .joinToString(\"/\")\n\n // make sure that there's a slash separator at the end of current path\n if (!encodedPath.endsWith('/')) {\n paths = \"/$paths\"\n }\n encodedPath += paths\n\n return this\n}\n\n/**\n * Adds [components] to current [encodedPath]\n */\npublic fun URLBuilder.pathComponents(vararg components: String): URLBuilder {\n return pathComponents(components.toList())\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Take url parts from [urlString]\n * throws [URLParserException]\n */\npublic fun URLBuilder.takeFrom(urlString: String): URLBuilder {\n return try {\n takeFromUnsafe(urlString)\n } catch (cause: Throwable) {\n throw URLParserException(urlString, cause)\n }\n}\n\n/**\n * Thrown when failed to parse URL\n */\npublic class URLParserException(urlString: String, cause: Throwable) : IllegalStateException(\n \"Fail to parse url: $urlString\",\n cause\n)\n\ninternal fun URLBuilder.takeFromUnsafe(urlString: String): URLBuilder {\n var startIndex = urlString.indexOfFirst { !it.isWhitespace() }\n val endIndex = urlString.indexOfLast { !it.isWhitespace() } + 1\n\n val schemeLength = findScheme(urlString, startIndex, endIndex)\n if (schemeLength > 0) {\n val scheme = urlString.substring(startIndex, startIndex + schemeLength)\n\n protocol = URLProtocol.createOrDefault(scheme)\n startIndex += schemeLength + 1\n }\n\n // Auth & Host\n val slashCount = count(urlString, startIndex, endIndex, '/')\n startIndex += slashCount\n\n if (protocol.name == \"file\") {\n parseFile(urlString, startIndex, endIndex, slashCount)\n return this\n }\n\n if (protocol.name == \"mailto\") {\n require(slashCount == 0)\n parseMailto(urlString, startIndex, endIndex)\n return this\n }\n\n if (slashCount >= 2) {\n loop@ while (true) {\n val delimiter = urlString.indexOfAny(\"@/\\\\?#\".toCharArray(), startIndex).takeIf { it > 0 } ?: endIndex\n\n if (delimiter < endIndex && urlString[delimiter] == '@') {\n // user and password check\n val passwordIndex = urlString.indexOfColonInHostPort(startIndex, delimiter)\n if (passwordIndex != -1) {\n user = urlString.substring(startIndex, passwordIndex).decodeURLPart()\n password = urlString.substring(passwordIndex + 1, delimiter).decodeURLPart()\n } else {\n user = urlString.substring(startIndex, delimiter).decodeURLPart()\n }\n startIndex = delimiter + 1\n } else {\n fillHost(urlString, startIndex, delimiter)\n startIndex = delimiter\n break@loop\n }\n }\n }\n\n // Path\n if (startIndex >= endIndex) {\n encodedPath = if (urlString[endIndex - 1] == '/') \"/\" else \"\"\n return this\n }\n\n encodedPath = if (slashCount == 0) {\n // Relative path\n val lastSlashIndex = encodedPath.lastIndexOf('/')\n\n if (lastSlashIndex != encodedPath.length - 1) {\n // Current path does not end in slash, get rid of last path segment.\n if (lastSlashIndex != -1) {\n encodedPath.substring(0, lastSlashIndex + 1)\n } else {\n \"/\"\n }\n } else {\n // keep the whole path\n encodedPath\n }\n } else {\n // overwrite the path\n \"\"\n }\n\n val pathEnd = urlString.indexOfAny(\"?#\".toCharArray(), startIndex).takeIf { it > 0 } ?: endIndex\n val rawPath = urlString.substring(startIndex, pathEnd)\n\n encodedPath += rawPath.encodeURLPath()\n startIndex = pathEnd\n\n // Query\n if (startIndex < endIndex && urlString[startIndex] == '?') {\n startIndex = parseQuery(urlString, startIndex, endIndex)\n }\n\n // Fragment\n parseFragment(urlString, startIndex, endIndex)\n return this\n}\n\nprivate fun URLBuilder.parseFile(urlString: String, startIndex: Int, endIndex: Int, slashCount: Int) {\n when (slashCount) {\n 2 -> {\n val nextSlash = urlString.indexOf('/', startIndex)\n if (nextSlash == -1 || nextSlash == endIndex) {\n host = urlString.substring(startIndex, endIndex)\n return\n }\n\n host = urlString.substring(startIndex, nextSlash)\n encodedPath = urlString.substring(nextSlash, endIndex)\n }\n 3 -> {\n host = \"\"\n encodedPath = \"/\" + urlString.substring(startIndex, endIndex)\n }\n else -> throw IllegalArgumentException(\"Invalid file url: $urlString\")\n }\n}\n\nprivate fun URLBuilder.parseMailto(urlString: String, startIndex: Int, endIndex: Int) {\n val delimiter = urlString.indexOf(\"@\", startIndex)\n if (delimiter == -1) {\n throw IllegalArgumentException(\"Invalid mailto url: $urlString, it should contain '@'.\")\n }\n\n user = urlString.substring(startIndex, delimiter).decodeURLPart()\n host = urlString.substring(delimiter + 1, endIndex)\n}\n\nprivate fun URLBuilder.parseQuery(urlString: String, startIndex: Int, endIndex: Int): Int {\n if (startIndex + 1 == endIndex) {\n trailingQuery = true\n return endIndex\n }\n\n val fragmentStart = urlString.indexOf('#', startIndex + 1).takeIf { it > 0 } ?: endIndex\n\n val rawParameters = parseQueryString(urlString.substring(startIndex + 1, fragmentStart))\n rawParameters.forEach { key, values ->\n parameters.appendAll(key, values)\n }\n\n return fragmentStart\n}\n\nprivate fun URLBuilder.parseFragment(urlString: String, startIndex: Int, endIndex: Int) {\n if (startIndex < endIndex && urlString[startIndex] == '#') {\n fragment = urlString.substring(startIndex + 1, endIndex)\n }\n}\n\nprivate fun URLBuilder.fillHost(urlString: String, startIndex: Int, endIndex: Int) {\n val colonIndex = urlString.indexOfColonInHostPort(startIndex, endIndex).takeIf { it > 0 } ?: endIndex\n\n host = urlString.substring(startIndex, colonIndex)\n\n if (colonIndex + 1 < endIndex) {\n port = urlString.substring(colonIndex + 1, endIndex).toInt()\n } else {\n port = DEFAULT_PORT\n }\n}\n\n/**\n * Finds scheme in the given [urlString]. If there is no scheme found the function returns -1. If the scheme contains\n * illegal characters an [IllegalArgumentException] will be thrown. If the scheme is present and it doesn't contain\n * illegal characters the function returns the length of the scheme.\n */\nprivate fun findScheme(urlString: String, startIndex: Int, endIndex: Int): Int {\n var current = startIndex\n\n // Incorrect scheme position is used to identify the first position at which the character is not allowed in the\n // scheme or the part of the scheme. This number is reported in the exception message.\n var incorrectSchemePosition = -1\n val firstChar = urlString[current]\n if (firstChar !in 'a'..'z' && firstChar !in 'A'..'Z') {\n incorrectSchemePosition = current\n }\n\n while (current < endIndex) {\n val char = urlString[current]\n\n // Character ':' means the end of the scheme and at this point the length of the scheme should be returned or\n // the exception should be thrown in case the scheme contains illegal characters.\n if (char == ':') {\n if (incorrectSchemePosition != -1) {\n throw IllegalArgumentException(\"Illegal character in scheme at position $incorrectSchemePosition\")\n }\n\n return current - startIndex\n }\n\n // If character '/' or '?' or '#' found this is not a scheme.\n if (char == '/' || char == '?' || char == '#') return -1\n\n // Update incorrect scheme position is current char is illegal.\n if (incorrectSchemePosition == -1 &&\n char !in 'a'..'z' &&\n char !in 'A'..'Z' &&\n char !in '0'..'9' &&\n char != '.' &&\n char != '+' &&\n char != '-'\n ) {\n incorrectSchemePosition = current\n }\n\n ++current\n }\n\n return -1\n}\n\nprivate fun count(urlString: String, startIndex: Int, endIndex: Int, char: Char): Int {\n var result = 0\n while (startIndex + result < endIndex) {\n if (urlString[startIndex + result] != char) break\n result++\n }\n\n return result\n}\n\nprivate fun String.indexOfColonInHostPort(startIndex: Int, endIndex: Int): Int {\n var skip = false\n for (index in startIndex until endIndex) {\n when (this[index]) {\n '[' -> skip = true\n ']' -> skip = false\n ':' -> if (!skip) return index\n }\n }\n\n return -1\n}\n\nprivate fun Char.isLetter(): Boolean = toLowerCase() in 'a'..'z'\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Represents URL protocol\n * @property name of protocol (schema)\n * @property defaultPort default port for protocol or `-1` if not known\n */\npublic data class URLProtocol(val name: String, val defaultPort: Int) {\n init {\n require(name.all { it.isLowerCase() }) { \"All characters should be lower case\" }\n }\n\n @Suppress(\"PublicApiImplicitType\")\n public companion object {\n /**\n * HTTP with port 80\n */\n public val HTTP: URLProtocol = URLProtocol(\"http\", 80)\n\n /**\n * secure HTTPS with port 443\n */\n public val HTTPS: URLProtocol = URLProtocol(\"https\", 443)\n\n /**\n * Web socket over HTTP on port 80\n */\n public val WS: URLProtocol = URLProtocol(\"ws\", 80)\n\n /**\n * Web socket over secure HTTPS on port 443\n */\n public val WSS: URLProtocol = URLProtocol(\"wss\", 443)\n\n /**\n * Socks proxy url protocol.\n */\n public val SOCKS: URLProtocol = URLProtocol(\"socks\", 1080)\n\n /**\n * Protocols by names map\n */\n public val byName: Map<String, URLProtocol> = listOf(HTTP, HTTPS, WS, WSS, SOCKS).associateBy { it.name }\n\n /**\n * Create an instance by [name] or use already existing instance\n */\n public fun createOrDefault(name: String): URLProtocol = name.toLowerCasePreservingASCIIRules().let {\n byName[it] ?: URLProtocol(it, DEFAULT_PORT)\n }\n }\n}\n\n/**\n * Check if the protocol is websocket\n */\npublic fun URLProtocol.isWebsocket(): Boolean = name == \"ws\" || name == \"wss\"\n\n/**\n * Check if the protocol is secure\n */\npublic fun URLProtocol.isSecure(): Boolean = name == \"https\" || name == \"wss\"\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\n\n/**\n * Construct [Url] from [urlString].\n */\n@Suppress(\"FunctionName\")\npublic fun Url(urlString: String): Url = URLBuilder(urlString).build()\n\n/**\n * Construct [Url] from [builder] without building origin.\n */\n@Suppress(\"FunctionName\")\npublic fun Url(builder: URLBuilder): Url = URLBuilder().takeFrom(builder).build()\n\n/**\n * Construct [URLBuilder] from [urlString].\n */\n@Suppress(\"FunctionName\")\npublic fun URLBuilder(urlString: String): URLBuilder = URLBuilder().takeFrom(urlString)\n\n/**\n * Construct [URLBuilder] from [url].\n */\n@Suppress(\"FunctionName\")\npublic fun URLBuilder(url: Url): URLBuilder = URLBuilder().takeFrom(url)\n\n/**\n * Construct [URLBuilder] from [builder].\n */\n@Suppress(\"FunctionName\")\npublic fun URLBuilder(builder: URLBuilder): URLBuilder = URLBuilder().takeFrom(builder)\n\n/**\n * Take components from another [url] builder\n */\npublic fun URLBuilder.takeFrom(url: URLBuilder): URLBuilder {\n protocol = url.protocol\n host = url.host\n port = url.port\n encodedPath = url.encodedPath\n user = url.user\n password = url.password\n parameters.appendAll(url.parameters)\n fragment = url.fragment\n trailingQuery = url.trailingQuery\n\n return this\n}\n\n/**\n * Take components from another [url]\n */\npublic fun URLBuilder.takeFrom(url: Url): URLBuilder {\n protocol = url.protocol\n host = url.host\n port = url.specifiedPort\n encodedPath = url.encodedPath\n user = url.user\n password = url.password\n parameters.appendAll(url.parameters)\n fragment = url.fragment\n trailingQuery = url.trailingQuery\n\n return this\n}\n\n/**\n * Full encoded path with query string but without domain, port and schema\n */\npublic val Url.fullPath: String\n get() = buildString { appendUrlFullPath(encodedPath, parameters, trailingQuery) }\n\n/**\n * Host:port pair, not normalized so port is always specified even if the port is schema's default\n */\npublic val Url.hostWithPort: String get() = \"$host:$port\"\n\ninternal fun Appendable.appendUrlFullPath(\n encodedPath: String,\n queryParameters: Parameters,\n trailingQuery: Boolean\n) {\n if (encodedPath.isNotBlank() && !encodedPath.startsWith(\"/\")) {\n append('/')\n }\n\n append(encodedPath)\n\n if (!queryParameters.isEmpty() || trailingQuery) {\n append(\"?\")\n }\n\n queryParameters.formUrlEncodeTo(this)\n}\n\ninternal fun Appendable.appendUrlFullPath(\n encodedPath: String,\n queryParameters: ParametersBuilder,\n trailingQuery: Boolean\n) {\n if (encodedPath.isNotBlank() && !encodedPath.startsWith(\"/\")) {\n append('/')\n }\n\n append(encodedPath)\n\n if (!queryParameters.isEmpty() || trailingQuery) {\n append(\"?\")\n }\n\n queryParameters.formUrlEncodeTo(this)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.auth\n\n/**\n * Describes how a header should be encoded.\n */\npublic enum class HeaderValueEncoding {\n /**\n * The header will be quoted only when required.\n */\n QUOTED_WHEN_REQUIRED,\n\n /**\n * The header will be quoted always.\n */\n QUOTED_ALWAYS,\n\n /**\n * The header will be URI-encoded as described in the RFC-3986:\n *\n * see https://tools.ietf.org/html/rfc3986#page-12\n */\n URI_ENCODE\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.auth\n\nimport io.ktor.http.*\nimport io.ktor.http.parsing.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport kotlin.native.concurrent.*\n\nprivate const val valuePatternPart = \"\"\"(\"((\\\\.)|[^\\\\\"])*\")|[^\\s,]*\"\"\"\n\n@ThreadLocal\nprivate val token68Pattern = \"[a-zA-Z0-9\\\\-._~+/]+=*\".toRegex()\n\n@ThreadLocal\nprivate val authSchemePattern = \"\\\\S+\".toRegex()\n\n@ThreadLocal\nprivate val parameterPattern = \"\\\\s*,?\\\\s*($token68Pattern)\\\\s*=\\\\s*($valuePatternPart)\\\\s*,?\\\\s*\".toRegex()\n\n@ThreadLocal\nprivate val escapeRegex: Regex = \"\\\\\\\\.\".toRegex()\n\n/**\n * Parses an authorization header [headerValue] into a [HttpAuthHeader].\n * @return [HttpAuthHeader] or `null` if argument string is blank.\n * @throws [ParseException] on invalid header\n */\npublic fun parseAuthorizationHeader(headerValue: String): HttpAuthHeader? {\n val schemeRegion = authSchemePattern.find(headerValue) ?: return null\n val authScheme = schemeRegion.value\n val remaining = headerValue.substringAfterMatch(schemeRegion).trimStart()\n\n val token68 = token68Pattern.find(remaining)\n if (token68 != null && remaining.substringAfterMatch(token68).isBlank()) {\n return HttpAuthHeader.Single(authScheme, token68.value)\n }\n\n val parameters = parameterPattern.findAll(remaining).associateBy(\n { it.groups[1]!!.value },\n { it.groups[2]!!.value.unescapedIfQuoted() }\n )\n\n return HttpAuthHeader.Parameterized(authScheme, parameters)\n}\n\n/**\n * Describes an authentication header with a mandatory [authScheme] that usually is a standard [AuthScheme].\n *\n * This can be of type [HttpAuthHeader.Single] or [HttpAuthHeader.Parameterized].\n *\n * @property authScheme auth scheme, usually one of [AuthScheme]\n */\npublic sealed class HttpAuthHeader(public val authScheme: String) {\n init {\n if (!authScheme.matches(token68Pattern)) {\n throw ParseException(\"invalid authScheme value: it should be token but it is $authScheme\")\n }\n }\n\n /**\n * Describes an authentication header that is represented by a single [blob].\n * @property blob contains single token 68, should consist from digits, letters and one of the following: `-._~+/`\n */\n public class Single(authScheme: String, public val blob: String) : HttpAuthHeader(authScheme) {\n init {\n if (!blob.matches(token68Pattern)) {\n throw ParseException(\"invalid blob value: it should be token68 but it is $blob\")\n }\n }\n\n override fun render(): String = \"$authScheme $blob\"\n override fun render(encoding: HeaderValueEncoding): String = render()\n\n override fun equals(other: Any?): Boolean {\n if (other !is Single) return false\n return other.authScheme.equals(authScheme, ignoreCase = true) &&\n other.blob.equals(blob, ignoreCase = true)\n }\n\n override fun hashCode(): Int {\n return Hash.combine(authScheme.toLowerCase(), blob.toLowerCase())\n }\n }\n\n /**\n * Describes a parameterized authentication header that is represented by a set of [parameters] encoded with [encoding].\n * @property parameters a list of auth parameters\n * @property encoding parameters encoding method, one of [HeaderValueEncoding]\n */\n public class Parameterized(\n authScheme: String,\n public val parameters: List<HeaderValueParam>,\n public val encoding: HeaderValueEncoding = HeaderValueEncoding.QUOTED_WHEN_REQUIRED\n ) : HttpAuthHeader(authScheme) {\n public constructor(\n authScheme: String,\n parameters: Map<String, String>,\n encoding: HeaderValueEncoding = HeaderValueEncoding.QUOTED_WHEN_REQUIRED\n ) : this(authScheme, parameters.entries.map { HeaderValueParam(it.key, it.value) }, encoding)\n\n init {\n parameters.forEach {\n if (!it.name.matches(token68Pattern)) {\n throw ParseException(\"parameter name should be a token but it is ${it.name}\")\n }\n }\n }\n\n /**\n * Copies this [Parameterized] appending a new parameter [name] [value].\n */\n public fun withParameter(name: String, value: String): Parameterized =\n Parameterized(authScheme, this.parameters + HeaderValueParam(name, value), encoding)\n\n /**\n * Copies this [Parameterized] replacing parameters with [name] assigning new [value]\n * or appending if no such parameters found.\n * If there were several pairs they will be reduced into a single pair\n * at position of first occurrence discarding following pairs with this [name].\n */\n public fun withReplacedParameter(name: String, value: String): Parameterized {\n val firstIndex = parameters.indexOfFirst { it.name == name }\n if (firstIndex == -1) return withParameter(name, value)\n\n var replaced = false\n val newParameters = parameters.mapNotNull {\n when {\n it.name != name -> it\n !replaced -> {\n replaced = true\n HeaderValueParam(name, value)\n }\n else -> null\n }\n }\n\n return Parameterized(authScheme, newParameters, encoding)\n }\n\n override fun render(encoding: HeaderValueEncoding): String =\n parameters.joinToString(\", \", prefix = \"$authScheme \") { \"${it.name}=${it.value.encode(encoding)}\" }\n\n /**\n * Tries to extract the first value of a parameter [name]. Returns null when not found.\n */\n public fun parameter(name: String): String? = parameters.firstOrNull { it.name == name }?.value\n\n private fun String.encode(encoding: HeaderValueEncoding) = when (encoding) {\n HeaderValueEncoding.QUOTED_WHEN_REQUIRED -> escapeIfNeeded()\n HeaderValueEncoding.QUOTED_ALWAYS -> quote()\n HeaderValueEncoding.URI_ENCODE -> encodeURLParameter()\n }\n\n override fun render(): String = render(encoding)\n\n override fun equals(other: Any?): Boolean {\n if (other !is Parameterized) return false\n return other.authScheme.equals(authScheme, ignoreCase = true) &&\n other.parameters == parameters\n }\n\n override fun hashCode(): Int {\n return Hash.combine(authScheme.toLowerCase(), parameters)\n }\n }\n\n /**\n * Encodes the header with a specified [encoding].\n */\n public abstract fun render(encoding: HeaderValueEncoding): String\n\n /**\n * Encodes the header with the default [HeaderValueEncoding] for this header.\n */\n public abstract fun render(): String\n\n /**\n * Encodes the header with the default [HeaderValueEncoding] for this header.\n */\n override fun toString(): String {\n return render()\n }\n\n public companion object {\n /**\n * Generates an [AuthScheme.Basic] challenge as a [HttpAuthHeader].\n */\n public fun basicAuthChallenge(realm: String, charset: Charset?): Parameterized = Parameterized(\n AuthScheme.Basic,\n LinkedHashMap<String, String>().apply {\n put(Parameters.Realm, realm)\n if (charset != null) {\n put(Parameters.Charset, charset.name)\n }\n }\n )\n\n /**\n * Generates an [AuthScheme.Digest] challenge as a [HttpAuthHeader].\n */\n public fun digestAuthChallenge(\n realm: String,\n nonce: String = generateNonce(),\n domain: List<String> = emptyList(),\n opaque: String? = null,\n stale: Boolean? = null,\n algorithm: String = \"MD5\"\n ): Parameterized = Parameterized(\n AuthScheme.Digest,\n linkedMapOf<String, String>().apply {\n put(\"realm\", realm)\n put(\"nonce\", nonce)\n if (domain.isNotEmpty()) {\n put(\"domain\", domain.joinToString(\" \"))\n }\n if (opaque != null) {\n put(\"opaque\", opaque)\n }\n if (stale != null) {\n put(\"stale\", stale.toString())\n }\n put(\"algorithm\", algorithm)\n },\n HeaderValueEncoding.QUOTED_ALWAYS\n )\n }\n\n /**\n * Standard parameters for [Parameterized] [HttpAuthHeader].\n */\n @Suppress(\"KDocMissingDocumentation\", \"PublicApiImplicitType\")\n public object Parameters {\n public const val Realm: String = \"realm\"\n public const val Charset: String = \"charset\"\n\n public const val OAuthCallback: String = \"oauth_callback\"\n public const val OAuthConsumerKey: String = \"oauth_consumer_key\"\n public const val OAuthNonce: String = \"oauth_nonce\"\n public const val OAuthToken: String = \"oauth_token\"\n public const val OAuthTokenSecret: String = \"oauth_token_secret\"\n public const val OAuthVerifier: String = \"oauth_verifier\"\n public const val OAuthSignatureMethod: String = \"oauth_signature_method\"\n public const val OAuthTimestamp: String = \"oauth_timestamp\"\n public const val OAuthVersion: String = \"oauth_version\"\n public const val OAuthSignature: String = \"oauth_signature\"\n public const val OAuthCallbackConfirmed: String = \"oauth_callback_confirmed\"\n }\n}\n\nprivate fun String.substringAfterMatch(result: MatchResult): String = drop(\n result.range.last + if (result.range.isEmpty()) 0 else 1\n)\n\nprivate fun String.unescapedIfQuoted() = when {\n startsWith('\"') && endsWith('\"') -> {\n removeSurrounding(\"\\\"\").replace(escapeRegex) { it.value.takeLast(1) }\n }\n else -> this\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.auth\n\n/**\n * Contains the standard auth schemes.\n */\npublic object AuthScheme {\n /**\n * Basic Authentication described in the RFC-7617\n *\n * ```\n * response = base64(\"$user:$password\")\n * ```\n *\n * see https://tools.ietf.org/html/rfc7617)\n */\n public const val Basic: String = \"Basic\"\n\n /**\n * Digest Authentication described in the RFC-2069:\n *\n * ```\n * HA1 = MD5(\"$username:$realm:$password\") // What's usually stored\n * HA2 = MD5(\"$method:$digestURI\")\n * response = MD5(\"$HA1:$nonce:$HA2\") // The client and the server sends and checks this.\n * ```\n *\n * see https://tools.ietf.org/html/rfc2069\n */\n public const val Digest: String = \"Digest\"\n\n /**\n * Described in the RFC-4599:\n *\n * see https://www.ietf.org/rfc/rfc4559.txt\n */\n public const val Negotiate: String = \"Negotiate\"\n\n /**\n * OAuth Authentication described in the RFC-6749:\n *\n * see https://tools.ietf.org/html/rfc6749\n */\n public const val OAuth: String = \"OAuth\"\n\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getBasic(): String = Basic\n\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getDigest(): String = Digest\n\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getNegotiate(): String = Negotiate\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.content\n\nimport io.ktor.http.*\n\n/**\n * Implementation of the [OutgoingContent.ByteArrayContent] for sending array of bytes\n */\npublic class ByteArrayContent(\n private val bytes: ByteArray,\n override val contentType: ContentType? = null,\n override val status: HttpStatusCode? = null\n) : OutgoingContent.ByteArrayContent() {\n override val contentLength: Long get() = bytes.size.toLong()\n\n override fun bytes(): ByteArray = bytes\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.content\n\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\n\n/**\n * Specifies caching properties for an [OutgoingContent] such as Cache-Control or Expires\n * @property cacheControl header\n * @property expires header\n */\npublic data class CachingOptions(val cacheControl: CacheControl? = null, val expires: GMTDate? = null)\n\n/**\n * Specifies a key for CacheControl extension property for [OutgoingContent]\n */\npublic val CachingProperty: AttributeKey<CachingOptions> = AttributeKey<CachingOptions>(\"Caching\")\n\n/**\n * Gets or sets [CacheControl] instance as an extension property on this content\n */\npublic var OutgoingContent.caching: CachingOptions?\n get() = getProperty(CachingProperty)\n set(value) = setProperty(CachingProperty, value)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.content\n\nimport io.ktor.http.*\nimport io.ktor.http.content.PartData.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Represents a multipart/form-data entry. Could be a [FormItem] or [FileItem]\n * @property dispose to be invoked when this part is no longed needed\n * @property headers of this part, could be inaccurate on some engines\n */\npublic sealed class PartData(public val dispose: () -> Unit, public val headers: Headers) {\n /**\n * Represents a multipart form item\n * @property value of this field\n */\n public class FormItem(public val value: String, dispose: () -> Unit, partHeaders: Headers) :\n PartData(dispose, partHeaders)\n\n /**\n * Represents a file item\n * @property provider of content bytes\n */\n public class FileItem(\n public val provider: () -> Input,\n dispose: () -> Unit,\n partHeaders: Headers\n ) : PartData(dispose, partHeaders) {\n /**\n * Original file name if present\n */\n public val originalFileName: String? = contentDisposition?.parameter(ContentDisposition.Parameters.FileName)\n }\n\n /**\n * Represents a binary item\n * @property provider of content bytes\n */\n public class BinaryItem(\n public val provider: () -> Input,\n dispose: () -> Unit,\n partHeaders: Headers\n ) : PartData(dispose, partHeaders)\n\n /**\n * Parsed `Content-Disposition` header or `null` if missing\n */\n public val contentDisposition: ContentDisposition? by lazy(LazyThreadSafetyMode.NONE) {\n headers[HttpHeaders.ContentDisposition]?.let { ContentDisposition.parse(it) }\n }\n\n /**\n * Parsed `Content-Type` header or `null` if missing\n */\n public val contentType: ContentType? by lazy(LazyThreadSafetyMode.NONE) {\n headers[HttpHeaders.ContentType]?.let {\n ContentType.parse(\n it\n )\n }\n }\n\n /**\n * Optional part name based on `Content-Disposition` header\n */\n public val name: String? get() = contentDisposition?.name\n\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n @Deprecated(\n \"Use name property instead\",\n ReplaceWith(\"name\"),\n level = DeprecationLevel.ERROR\n )\n public val partName: String?\n get() = name\n\n @Suppress(\"KDocMissingDocumentation\", \"unused\")\n @Deprecated(\n \"Use headers property instead\",\n ReplaceWith(\"headers\"),\n level = DeprecationLevel.ERROR\n )\n public val partHeaders: Headers\n get() = headers\n}\n\n/**\n * Represents a multipart data stream that could be received from a call\n */\npublic interface MultiPartData {\n /**\n * Reads next part data or `null` if end of multipart stream encountered\n */\n public suspend fun readPart(): PartData?\n\n /**\n * An empty multipart data stream\n */\n public object Empty : MultiPartData {\n override suspend fun readPart(): PartData? {\n return null\n }\n }\n}\n\n/**\n * Parse multipart data stream and invoke [partHandler] for each [PartData] encountered\n * @param partHandler to be invoked for every part item\n */\npublic suspend fun MultiPartData.forEachPart(partHandler: suspend (PartData) -> Unit) {\n while (true) {\n val part = readPart() ?: break\n partHandler(part)\n }\n}\n\n/**\n * Parse multipart data stream and put all parts into a list\n * @return a list of part data\n */\npublic suspend fun MultiPartData.readAllParts(): List<PartData> {\n var part = readPart() ?: return emptyList()\n val parts = ArrayList<PartData>()\n parts.add(part)\n\n do {\n part = readPart() ?: break\n parts.add(part)\n } while (true)\n\n return parts\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.content\n\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Information about the content to be sent to the peer, recognized by a client or server engine\n */\npublic sealed class OutgoingContent {\n /**\n * Specifies [ContentType] for this resource.\n */\n public open val contentType: ContentType? get() = null\n\n /**\n * Specifies content length in bytes for this resource.\n *\n * If null, the resources will be sent as `Transfer-Encoding: chunked`\n */\n public open val contentLength: Long? get() = null\n\n /**\n * Status code to set when sending this content\n */\n public open val status: HttpStatusCode?\n get() = null\n\n /**\n * Headers to set when sending this content\n */\n public open val headers: Headers\n get() = Headers.Empty\n\n private var extensionProperties: Attributes? = null\n\n /**\n * Gets an extension property for this content\n */\n public open fun <T : Any> getProperty(key: AttributeKey<T>): T? = extensionProperties?.getOrNull(key)\n\n /**\n * Sets an extension property for this content\n */\n public open fun <T : Any> setProperty(key: AttributeKey<T>, value: T?) {\n when {\n value == null && extensionProperties == null -> return\n value == null -> extensionProperties?.remove(key)\n else -> (extensionProperties ?: Attributes()).also { extensionProperties = it }.put(key, value)\n }\n }\n\n /**\n * Variant of a [OutgoingContent] without a payload\n */\n public abstract class NoContent : OutgoingContent()\n\n /**\n * Variant of a [OutgoingContent] with payload read from [ByteReadChannel]\n *\n */\n public abstract class ReadChannelContent : OutgoingContent() {\n /**\n * Provides [ByteReadChannel] for the content\n */\n public abstract fun readFrom(): ByteReadChannel\n\n /**\n * Provides [ByteReadChannel] for the given range of the content\n */\n public open fun readFrom(range: LongRange): ByteReadChannel = if (range.isEmpty()) {\n ByteReadChannel.Empty\n } else {\n GlobalScope.writer(Dispatchers.Unconfined, autoFlush = true) {\n val source = readFrom()\n source.discard(range.start)\n val limit = range.endInclusive - range.start + 1\n source.copyTo(channel, limit)\n }.channel\n }\n }\n\n /**\n * Variant of a [OutgoingContent] with payload written to [ByteWriteChannel]\n */\n public abstract class WriteChannelContent : OutgoingContent() {\n /**\n * Receives [channel] provided by the engine and writes all data to it\n */\n public abstract suspend fun writeTo(channel: ByteWriteChannel)\n }\n\n /**\n * Variant of a [OutgoingContent] with payload represented as [ByteArray]\n */\n public abstract class ByteArrayContent : OutgoingContent() {\n /**\n * Provides [ByteArray] which engine will send to peer\n */\n public abstract fun bytes(): ByteArray\n }\n\n /**\n * Variant of a [OutgoingContent] for upgrading an HTTP connection\n */\n public abstract class ProtocolUpgrade : OutgoingContent() {\n final override val status: HttpStatusCode?\n get() = HttpStatusCode.SwitchingProtocols\n\n /**\n * Upgrades an HTTP connection\n * @param input is a [ByteReadChannel] for an upgraded connection\n * @param output is a [ByteWriteChannel] for an upgraded connection\n * @param engineContext is a [CoroutineContext] to execute non-blocking code, such as parsing or processing\n * @param userContext is a [CoroutineContext] to execute user-provided callbacks or code potentially blocking\n */\n public abstract suspend fun upgrade(\n input: ByteReadChannel,\n output: ByteWriteChannel,\n engineContext: CoroutineContext,\n userContext: CoroutineContext\n ): Job\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.parsing\n\ninternal fun Grammar.printDebug(offset: Int = 0): Unit = when (this) {\n is StringGrammar -> printlnWithOffset(offset, \"STRING[${Regex.escape(value)}]\")\n is RawGrammar -> printlnWithOffset(offset, \"STRING[$value]\")\n is NamedGrammar -> {\n printlnWithOffset(offset, \"NAMED[$name]\")\n grammar.printDebug(offset + 2)\n }\n is SequenceGrammar -> {\n printlnWithOffset(offset, \"SEQUENCE\")\n grammars.forEach { it.printDebug(offset + 2) }\n }\n is OrGrammar -> {\n printlnWithOffset(offset, \"OR\")\n grammars.forEach { it.printDebug(offset + 2) }\n }\n is MaybeGrammar -> {\n printlnWithOffset(offset, \"MAYBE\")\n grammar.printDebug(offset + 2)\n }\n is ManyGrammar -> {\n printlnWithOffset(offset, \"MANY\")\n grammar.printDebug(offset + 2)\n }\n is AtLeastOne -> {\n printlnWithOffset(offset, \"MANY_NOT_EMPTY\")\n grammar.printDebug(offset + 2)\n }\n is AnyOfGrammar -> printlnWithOffset(offset, \"ANY_OF[${Regex.escape(value)}]\")\n is RangeGrammar -> printlnWithOffset(offset, \"RANGE[$from-$to]\")\n}\n\nprivate fun printlnWithOffset(offset: Int, node: Any) {\n println(\"${\" \".repeat(offset)}${offset / 2}: $node\")\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.parsing\n\ninternal class GrammarBuilder {\n private val grammars = mutableListOf<Grammar>()\n\n infix fun then(grammar: Grammar): GrammarBuilder {\n grammars += grammar\n return this\n }\n\n infix fun then(value: String): GrammarBuilder {\n grammars += StringGrammar(value)\n return this\n }\n\n operator fun (() -> Grammar).unaryPlus() {\n grammars += this()\n }\n\n operator fun Grammar.unaryPlus() {\n grammars += this\n }\n\n operator fun String.unaryPlus() {\n grammars += StringGrammar(this)\n }\n\n public fun build(): Grammar = if (grammars.size == 1) grammars.first() else SequenceGrammar(grammars)\n}\n\ninternal fun grammar(block: GrammarBuilder.() -> Unit): Grammar = GrammarBuilder().apply(block).build()\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.parsing\n\ninternal sealed class Grammar\n\ninternal interface ComplexGrammar {\n val grammars: List<Grammar>\n}\n\ninternal interface SimpleGrammar {\n val grammar: Grammar\n}\n\ninternal class StringGrammar(val value: String) : Grammar()\ninternal class AnyOfGrammar(val value: String) : Grammar()\ninternal class RangeGrammar(val from: Char, val to: Char) : Grammar()\ninternal class RawGrammar(val value: String) : Grammar()\n\ninternal class NamedGrammar(val name: String, val grammar: Grammar) : Grammar()\n\ninternal class MaybeGrammar(override val grammar: Grammar) : Grammar(), SimpleGrammar\ninternal class ManyGrammar(override val grammar: Grammar) : Grammar(), SimpleGrammar\ninternal class AtLeastOne(override val grammar: Grammar) : Grammar(), SimpleGrammar\n\ninternal class SequenceGrammar(sourceGrammars: List<Grammar>) : Grammar(), ComplexGrammar {\n override val grammars: List<Grammar> = sourceGrammars.flatten<SequenceGrammar>()\n}\n\ninternal class OrGrammar(sourceGrammars: List<Grammar>) : Grammar(), ComplexGrammar {\n override val grammars: List<Grammar> = sourceGrammars.flatten<OrGrammar>()\n}\n\ninternal fun maybe(grammar: Grammar): Grammar = MaybeGrammar(grammar)\ninternal fun maybe(value: String): Grammar = MaybeGrammar(StringGrammar(value))\ninternal fun maybe(block: GrammarBuilder.() -> Unit): () -> Grammar = { maybe(GrammarBuilder().apply(block).build()) }\n\ninternal infix fun String.then(grammar: Grammar): Grammar = StringGrammar(this) then grammar\ninternal infix fun Grammar.then(grammar: Grammar): Grammar = SequenceGrammar(listOf(this, grammar))\ninternal infix fun Grammar.then(value: String): Grammar = this then StringGrammar(value)\n\ninternal infix fun Grammar.or(grammar: Grammar): Grammar = OrGrammar(listOf(this, grammar))\ninternal infix fun Grammar.or(value: String): Grammar = this or StringGrammar(value)\ninternal infix fun String.or(grammar: Grammar): Grammar = StringGrammar(this) or grammar\n\ninternal fun many(grammar: Grammar): Grammar = ManyGrammar(grammar)\ninternal fun atLeastOne(grammar: Grammar): Grammar = AtLeastOne(grammar)\n\ninternal fun Grammar.named(name: String): Grammar = NamedGrammar(name, this)\n\ninternal fun anyOf(value: String): Grammar = AnyOfGrammar(value)\ninternal infix fun Char.to(other: Char): Grammar = RangeGrammar(this, other)\n\ninternal inline fun <reified T : ComplexGrammar> List<Grammar>.flatten(): List<Grammar> {\n val result = mutableListOf<Grammar>()\n forEach {\n if (it is T) result += it.grammars else result += it\n }\n return result\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.parsing.regex\n\nimport io.ktor.http.parsing.*\n\ninternal fun Grammar.buildRegexParser(): Parser {\n val groups = mutableMapOf<String, MutableList<Int>>()\n val expression = toRegex(groups).regex\n\n return RegexParser(Regex(expression), groups)\n}\n\nprivate class GrammarRegex(\n regexRaw: String,\n groupsCountRaw: Int = 0,\n group: Boolean = false\n) {\n val regex = if (group) \"($regexRaw)\" else regexRaw\n val groupsCount = if (group) groupsCountRaw + 1 else groupsCountRaw\n}\n\nprivate fun Grammar.toRegex(\n groups: MutableMap<String, MutableList<Int>>,\n offset: Int = 1,\n shouldGroup: Boolean = false\n): GrammarRegex = when (this) {\n is StringGrammar -> GrammarRegex(Regex.escape(value))\n is RawGrammar -> GrammarRegex(value)\n is NamedGrammar -> {\n val nested = grammar.toRegex(groups, offset + 1)\n groups.add(name, offset)\n GrammarRegex(nested.regex, nested.groupsCount, group = true)\n }\n is ComplexGrammar -> {\n val expression = StringBuilder()\n\n var currentOffset = if (shouldGroup) offset + 1 else offset\n grammars.forEachIndexed { index, grammar ->\n val current = grammar.toRegex(groups, currentOffset, shouldGroup = true)\n\n if (index != 0 && this is OrGrammar) expression.append(\"|\")\n expression.append(current.regex)\n currentOffset += current.groupsCount\n }\n\n val groupsCount = if (shouldGroup) currentOffset - offset - 1 else currentOffset - offset\n GrammarRegex(expression.toString(), groupsCount, shouldGroup)\n }\n is SimpleGrammar -> {\n val operator = when (this) {\n is MaybeGrammar -> '?'\n is ManyGrammar -> '*'\n is AtLeastOne -> '+'\n else -> error(\"Unsupported simple grammar element: $this\")\n }\n\n val nested = grammar.toRegex(groups, offset, shouldGroup = true)\n GrammarRegex(\"${nested.regex}$operator\", nested.groupsCount)\n }\n is AnyOfGrammar -> GrammarRegex(\"[${Regex.escape(value)}]\")\n is RangeGrammar -> GrammarRegex(\"[$from-$to]\")\n else -> error(\"Unsupported grammar element: $this\")\n}\n\nprivate fun MutableMap<String, MutableList<Int>>.add(key: String, value: Int) {\n if (!contains(key)) this[key] = mutableListOf()\n this[key]!! += value\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.websocket\n\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\n\nprivate const val WEBSOCKET_SERVER_ACCEPT_TAIL = \"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\"\n\n/**\n * Calculates `Sec-WebSocket-Accept` header value\n */\npublic fun websocketServerAccept(nonce: String): String =\n sha1(\"${nonce.trim()}$WEBSOCKET_SERVER_ACCEPT_TAIL\".toByteArray(Charset.forName(\"ISO_8859_1\"))).encodeBase64()\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport kotlin.browser.*\n\n/**\n * Hostname of current origin.\n *\n * It uses \"localhost\" for all platforms except js.\n */\ninternal actual val URLBuilder.Companion.originHost: String?\n get() = if (PlatformUtils.IS_BROWSER) {\n window.location.origin\n } else null\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.content\n\nimport io.ktor.http.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Represents a text content that could be sent\n * @property text to be sent\n */\npublic class TextContent(\n public val text: String,\n override val contentType: ContentType,\n override val status: HttpStatusCode? = null\n) : OutgoingContent.ByteArrayContent() {\n private val bytes = text.toByteArray(contentType.charset() ?: Charsets.UTF_8)\n\n override val contentLength: Long\n get() = bytes.size.toLong()\n\n override fun bytes(): ByteArray = bytes\n\n override fun toString(): String = \"TextContent[$contentType] \\\"${text.take(30)}\\\"\"\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport kotlin.native.concurrent.*\n\n/**\n * Default [ContentType] for [extension]\n */\npublic fun ContentType.Companion.defaultForFileExtension(extension: String): ContentType =\n ContentType.fromFileExtension(extension).selectDefault()\n\n/**\n * Default [ContentType] for file [path]\n */\npublic fun ContentType.Companion.defaultForFilePath(path: String): ContentType =\n ContentType.fromFilePath(path).selectDefault()\n\n/**\n * Recommended content types by file [path]\n */\npublic fun ContentType.Companion.fromFilePath(path: String): List<ContentType> {\n val slashIndex = path.lastIndexOfAny(\"/\\\\\".toCharArray())\n val index = path.indexOf('.', startIndex = slashIndex + 1)\n if (index == -1) {\n return emptyList()\n }\n return fromFileExtension(path.substring(index + 1))\n}\n\n/**\n * Recommended content type by file name extension\n */\npublic fun ContentType.Companion.fromFileExtension(ext: String): List<ContentType> {\n var current = ext.removePrefix(\".\").toLowerCasePreservingASCIIRules()\n while (current.isNotEmpty()) {\n val type = contentTypesByExtensions[current]\n if (type != null) {\n return type\n }\n current = current.substringAfter(\".\", \"\")\n }\n\n return emptyList()\n}\n\n/**\n * Recommended file name extensions for this content type\n */\npublic fun ContentType.fileExtensions(): List<String> = extensionsByContentType[this]\n ?: extensionsByContentType[this.withoutParameters()]\n ?: emptyList()\n\n@ThreadLocal\nprivate val contentTypesByExtensions: Map<String, List<ContentType>> by lazy {\n caseInsensitiveMap<List<ContentType>>().apply { putAll(mimes.asSequence().groupByPairs()) }\n}\n\n@ThreadLocal\nprivate val extensionsByContentType: Map<ContentType, List<String>> by lazy {\n mimes.asSequence().map { (first, second) -> second to first }.groupByPairs()\n}\n\ninternal fun List<ContentType>.selectDefault(): ContentType {\n val contentType = firstOrNull() ?: ContentType.Application.OctetStream\n return when {\n contentType.contentType == \"text\" && contentType.charset() == null -> contentType.withCharset(Charsets.UTF_8)\n else -> contentType\n }\n}\n\ninternal fun <A, B> Sequence<Pair<A, B>>.groupByPairs() = groupBy { it.first }\n .mapValues { e -> e.value.map { it.second } }\n\ninternal fun String.toContentType() = try {\n ContentType.parse(this)\n} catch (e: Throwable) {\n throw IllegalArgumentException(\"Failed to parse $this\", e)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\nprivate val HTTP_DATE_FORMATS = listOf(\n \"***, dd MMM YYYY hh:mm:ss zzz\",\n \"****, dd-MMM-YYYY hh:mm:ss zzz\",\n \"*** MMM d hh:mm:ss YYYY\",\n \"***, dd-MMM-YYYY hh:mm:ss zzz\",\n \"***, dd-MMM-YYYY hh-mm-ss zzz\",\n \"***, dd MMM YYYY hh:mm:ss zzz\",\n \"*** dd-MMM-YYYY hh:mm:ss zzz\",\n \"*** dd MMM YYYY hh:mm:ss zzz\",\n \"*** dd-MMM-YYYY hh-mm-ss zzz\",\n \"***,dd-MMM-YYYY hh:mm:ss zzz\",\n \"*** MMM d YYYY hh:mm:ss zzz\"\n)\n\n/**\n * Convert valid http date [String] to [GMTDate] trying various http date formats from [HTTP_DATE_FORMATS]\n *\n * Note that only GMT(UTC) date is valid http date.\n */\npublic fun String.fromHttpToGmtDate(): GMTDate = with(trim()) {\n for (format in HTTP_DATE_FORMATS) {\n try {\n val parser = GMTDateParser(format)\n return parser.parse(this@fromHttpToGmtDate)\n } catch (_: InvalidDateStringException) {\n }\n }\n\n error(\"Failed to parse date: $this\")\n}\n\n/**\n * Convert valid cookie date [String] to [GMTDate] trying first the RFC6265 standard, falling back on [fromHttpToGmtDate]\n *\n * @see [fromHttpToGmtDate]\n */\npublic fun String.fromCookieToGmtDate(): GMTDate = with(trim()) {\n try {\n val parser = CookieDateParser()\n return parser.parse(this@with)\n } catch (_: InvalidCookieDateException) {\n }\n\n return fromHttpToGmtDate()\n}\n\n/**\n * Convert [GMTDate] to valid http date [String]\n */\npublic fun GMTDate.toHttpDate(): String = buildString {\n append(\"${dayOfWeek.value}, \")\n append(\"${dayOfMonth.padZero(2)} \")\n append(\"${month.value} \")\n append(year.padZero(4))\n append(\" ${hours.padZero(2)}:${minutes.padZero(2)}:${seconds.padZero(2)} \")\n append(\"GMT\")\n}\n\nprivate fun Int.padZero(length: Int): String = toString().padStart(length, '0')\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http\n\nimport io.ktor.http.parsing.*\nimport io.ktor.http.parsing.regex.*\nimport kotlin.native.concurrent.*\n\n/**\n * Check if [host] is IPv4 or IPv6 address.\n */\npublic fun hostIsIp(host: String): Boolean = IP_PARSER.match(host)\n\n@SharedImmutable\nprivate val IPv4address = digits then \".\" then digits then \".\" then digits then \".\" then digits\n\n@SharedImmutable\nprivate val IPv6address = \"[\" then atLeastOne(hex or \":\") then \"]\"\n\n@SharedImmutable\nprivate val IP_PARSER = (IPv4address or IPv6address).buildRegexParser()\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","(function (root, factory) {\n if (typeof define === 'function' && define.amd)\n define(['exports', 'kotlin'], factory);\n else if (typeof exports === 'object')\n factory(module.exports, require('kotlin'));\n else {\n if (typeof kotlin === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-extensions-jsLegacy'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'kotlin-wrappers-kotlin-extensions-jsLegacy'.\");\n }root['kotlin-wrappers-kotlin-extensions-jsLegacy'] = factory(typeof this['kotlin-wrappers-kotlin-extensions-jsLegacy'] === 'undefined' ? {} : this['kotlin-wrappers-kotlin-extensions-jsLegacy'], kotlin);\n }\n}(this, function (_, Kotlin) {\n 'use strict';\n var getCallableRef = Kotlin.getCallableRef;\n var defineInlineFunction = Kotlin.defineInlineFunction;\n var wrapFunction = Kotlin.wrapFunction;\n function clone(obj) {\n return Object.assign({}, obj);\n }\n function getOwnPropertyNames($receiver) {\n return Object.getOwnPropertyNames($receiver);\n }\n function invoke_3($receiver, strings, values) {\n var tmp$;\n return (tmp$ = $receiver).call.apply(tmp$, [null, strings].concat(values));\n }\n function invoke_4($receiver, string, values) {\n return invoke_3($receiver, [string], values.slice());\n }\n function invoke_5($receiver, values) {\n return invoke_3($receiver, [], values.slice());\n }\n var package$kotlinext = _.kotlinext || (_.kotlinext = {});\n var package$js = package$kotlinext.js || (package$kotlinext.js = {});\n package$js.clone_issdgt$ = clone;\n package$js.getOwnPropertyNames_s8jyvk$ = getOwnPropertyNames;\n package$js.invoke_z5wujd$ = invoke_3;\n package$js.invoke_dgimx$ = invoke_4;\n package$js.invoke_9p99ed$ = invoke_5;\n return _;\n}));\n\n//# sourceMappingURL=kotlin-wrappers-kotlin-extensions-jsLegacy.js.map\n","package com.arkivanov.mvikotlin.core.store\n\nimport com.arkivanov.mvikotlin.utils.internal.atomic\nimport com.arkivanov.mvikotlin.utils.internal.initialize\nimport com.arkivanov.mvikotlin.utils.internal.requireValue\n\n/**\n * Simple implementation of the [Bootstrapper].\n * Accepts an array of the `Actions` and dispatches them one by one.\n *\n * @param actions an array of the `Actions` to be dispatched\n */\nclass SimpleBootstrapper<out Action : Any>(\n private vararg val actions: Action\n) : Bootstrapper<Action> {\n\n private val actionConsumer = atomic<(Action) -> Unit>()\n\n override fun init(actionConsumer: (Action) -> Unit) {\n this.actionConsumer.initialize(actionConsumer)\n }\n\n override fun dispose() {\n // no-op\n }\n\n override fun invoke() {\n actions.forEach(actionConsumer.requireValue()::invoke)\n }\n}\n","package com.arkivanov.mvikotlin.core.store\n\nenum class StoreEventType {\n\n INTENT, ACTION, RESULT, STATE, LABEL;\n\n val title: String = name.toLowerCase().capitalize()\n\n companion object {\n val VALUES: Set<StoreEventType> = values().toSet()\n }\n}\n","package com.arkivanov.mvikotlin.core.store\n\nimport com.arkivanov.mvikotlin.core.annotations.MainThread\nimport kotlin.js.JsName\n\n/**\n * Creates instances of [Store]s using the provided components.\n * You can create different [Store] wrappers and combine them depending on circumstances.\n */\ninterface StoreFactory {\n\n @JsName(\"create\")\n @MainThread\n fun <Intent : Any, Action : Any, Result : Any, State : Any, Label : Any> create(\n name: String? = null,\n initialState: State,\n bootstrapper: Bootstrapper<Action>? = null,\n executorFactory: () -> Executor<Intent, Action, State, Result, Label>,\n @Suppress(\"UNCHECKED_CAST\")\n reducer: Reducer<State, Result> = bypassReducer as Reducer<State, Any>\n ): Store<Intent, State, Label>\n\n private companion object {\n private val bypassReducer: Reducer<Any, Any> =\n object : Reducer<Any, Any> {\n override fun Any.reduce(result: Any): Any = this\n }\n }\n}\n","package com.arkivanov.mvikotlin.core.utils\n\nimport com.arkivanov.mvikotlin.core.annotations.MainThread\n\nvar isAssertOnMainThreadEnabled: Boolean\n get() = com.arkivanov.mvikotlin.utils.internal.isAssertOnMainThreadEnabled\n set(value) {\n com.arkivanov.mvikotlin.utils.internal.isAssertOnMainThreadEnabled = value\n }\n\n@MainThread\nfun assertOnMainThread() {\n com.arkivanov.mvikotlin.utils.internal.assertOnMainThread()\n}\n","package com.arkivanov.mvikotlin.utils.internal\n\nimport kotlin.reflect.KProperty\n\nfun <T : Any> AtomicRef<T?>.initialize(value: T) {\n if (!compareAndSet(null, value)) {\n throw IllegalStateException(\"Value is already initialized: $this\")\n }\n}\n\nfun <T : Any> AtomicRef<T?>.requireValue(): T = requireNotNull(value) { \"Value was not initialized\" }\n\noperator fun AtomicBoolean.getValue(thisRef: Any?, property: KProperty<*>): Boolean = value\n\noperator fun AtomicBoolean.setValue(thisRef: Any?, property: KProperty<*>, value: Boolean) {\n this.value = value\n}\n\noperator fun AtomicInt.getValue(thisRef: Any?, property: KProperty<*>): Int = value\n\noperator fun AtomicInt.setValue(thisRef: Any?, property: KProperty<*>, value: Int) {\n this.value = value\n}\n\noperator fun <T> AtomicRef<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value\n\noperator fun <T> AtomicRef<T>.setValue(thisRef: Any?, property: KProperty<*>, value: T) {\n this.value = value\n}\n\nfun <T> AtomicRef<T>.getAndUpdate(block: (T) -> T): T {\n var oldValue: T\n do {\n oldValue = value\n } while (!compareAndSet(oldValue, block(oldValue)))\n\n return oldValue\n}\n","package com.arkivanov.mvikotlin.utils.internal\n\ninternal const val LOG_TAG = \"MVIKotlin\"\n\nexpect fun logV(text: String)\n\nexpect fun logE(text: String)\n\ninternal fun String.withLogTag(): String = \"[$LOG_TAG]: $this\"\n","package com.arkivanov.mvikotlin.utils.internal\n\nvar isAssertOnMainThreadEnabled: Boolean by atomic(true)\n\nprivate val mainThreadIdRef = atomic<MainThreadIdHolder?>(null)\n\nfun assertOnMainThread() {\n if (isAssertOnMainThreadEnabled) {\n require(isMainThread()) {\n \"Not on Main thread, current thread is: ${getCurrentThreadDescription()}\"\n }\n }\n}\n\ninternal expect fun getMainThreadId(): MainThreadId?\n\ninternal expect fun isMainThread(mainThreadId: MainThreadId): Boolean\n\ninternal expect fun getCurrentThreadDescription(): String\n\nprivate fun isMainThread(): Boolean {\n val mainThreadId =\n mainThreadIdRef.initAndGet {\n val id: MainThreadId? = getMainThreadId()\n if (id == null) {\n logE(\"Main thread id is undefined, main thread assert is disabled\")\n }\n MainThreadIdHolder(id)\n }\n\n return mainThreadId.id?.let(::isMainThread) ?: true\n}\n\nprivate inline fun <T : Any> AtomicRef<T?>.initAndGet(init: () -> T): T {\n while (true) {\n var v: T? = value\n if (v != null) {\n return v\n }\n\n v = init()\n if (compareAndSet(null, v)) {\n return v\n }\n }\n}\n\ninternal expect class MainThreadId\n\nprivate class MainThreadIdHolder(val id: MainThreadId?)\n","package com.arkivanov.mvikotlin.utils.internal\n\nactual fun <T> atomic(value: T): AtomicRef<T> = AtomicRefImpl(value)\n\nprivate class AtomicRefImpl<T>(\n override var value: T\n) : AtomicRef<T> {\n override fun compareAndSet(expected: T, new: T): Boolean =\n if (this.value === expected) {\n this.value = new\n true\n } else {\n false\n }\n}\n\nactual fun atomic(value: Boolean): AtomicBoolean = AtomicBooleanImpl(value)\n\nprivate class AtomicBooleanImpl(\n override var value: Boolean\n) : AtomicBoolean\n\nactual fun atomic(value: Int): AtomicInt = AtomicIntImpl(value)\n\nprivate class AtomicIntImpl(\n override var value: Int\n) : AtomicInt\n","package com.arkivanov.mvikotlin.utils.internal\n\nactual fun logV(text: String) {\n console.log(text.withLogTag())\n}\n\nactual fun logE(text: String) {\n console.error(text.withLogTag())\n}\n","package com.arkivanov.mvikotlin.utils.internal\n\ninternal actual fun getMainThreadId(): MainThreadId? = MainThreadId()\n\ninternal actual fun isMainThread(mainThreadId: MainThreadId): Boolean = true\n\ninternal actual fun getCurrentThreadDescription(): String = \"Main thread\"\n\ninternal actual class MainThreadId\n","@file:JvmName(\"AtomicJvm\")\n\npackage com.arkivanov.mvikotlin.utils.internal\n\nimport kotlin.jvm.JvmName\n\ninterface AtomicRef<T> {\n\n var value: T\n\n fun compareAndSet(expected: T, new: T): Boolean\n}\n\ninterface AtomicBoolean {\n\n var value: Boolean\n}\n\ninterface AtomicInt {\n\n var value: Int\n}\n\nexpect fun <T> atomic(value: T): AtomicRef<T>\n\nexpect fun atomic(value: Boolean): AtomicBoolean\n\nexpect fun atomic(value: Int): AtomicInt\n\nfun <T: Any> atomic(): AtomicRef<T?> = atomic(null)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\nprivate const val CHUNK_BUFFER_SIZE = 4096L\n\n/**\n * Split source [ByteReadChannel] into 2 new one.\n * Cancel of one channel in split(input or both outputs) cancels other channels.\n */\npublic fun ByteReadChannel.split(coroutineScope: CoroutineScope): Pair<ByteReadChannel, ByteReadChannel> {\n val first = ByteChannel(autoFlush = true)\n val second = ByteChannel(autoFlush = true)\n\n coroutineScope.launch {\n try {\n while (!isClosedForRead) {\n this@split.readRemaining(CHUNK_BUFFER_SIZE).use { chunk ->\n listOf(\n async { first.writePacket(chunk.copy()) },\n async { second.writePacket(chunk.copy()) }\n ).awaitAll()\n }\n }\n\n if (this is ByteChannel) {\n closedCause?.let { throw it }\n }\n } catch (cause: Throwable) {\n this@split.cancel(cause)\n first.cancel(cause)\n second.cancel(cause)\n } finally {\n first.close()\n second.close()\n }\n }.invokeOnCompletion {\n it ?: return@invokeOnCompletion\n first.cancel(it)\n second.cancel(it)\n }\n\n return first to second\n}\n\n/**\n * Copy source channel to both output channels chunk by chunk.\n */\n@InternalAPI\npublic fun ByteReadChannel.copyToBoth(first: ByteWriteChannel, second: ByteWriteChannel) {\n GlobalScope.launch(Dispatchers.Unconfined) {\n try {\n while (!isClosedForRead && (!first.isClosedForWrite || !second.isClosedForWrite)) {\n readRemaining(CHUNK_BUFFER_SIZE).use {\n try {\n first.writePacket(it.copy())\n second.writePacket(it.copy())\n } catch (cause: Throwable) {\n this@copyToBoth.cancel(cause)\n first.close(cause)\n second.close(cause)\n }\n }\n }\n\n if (this is ByteChannel) {\n closedCause?.let { throw it }\n }\n } catch (cause: Throwable) {\n first.close(cause)\n second.close(cause)\n } finally {\n first.close()\n second.close()\n }\n }.invokeOnCompletion {\n it ?: return@invokeOnCompletion\n first.close(it)\n second.close(it)\n }\n}\n\n/**\n * Read channel to byte array.\n */\npublic suspend fun ByteReadChannel.toByteArray(): ByteArray = readRemaining().readBytes()\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Print [Job] children tree.\n */\n@InternalAPI\npublic fun Job.printDebugTree(offset: Int = 0) {\n println(\" \".repeat(offset) + this)\n\n children.forEach {\n it.printDebugTree(offset + 2)\n }\n\n if (offset == 0) println()\n}\n\n@InternalAPI\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal expect inline fun <R, A> (suspend R.(A) -> Unit).startCoroutineUninterceptedOrReturn3(\n receiver: R,\n arg: A,\n continuation: Continuation<Unit>\n): Any?\n\n/**\n * Supervisor with empty coroutine exception handler ignoring all exceptions.\n */\n@InternalAPI\npublic fun SilentSupervisor(parent: Job? = null): CoroutineContext =\n SupervisorJob(parent) + CoroutineExceptionHandler { _, _ -> }\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Length of this [LongRange]\n */\n@Deprecated(\"Not supported anymore.\", level = DeprecationLevel.ERROR)\npublic val LongRange.length: Long\n get() = (endInclusive - start + 1).coerceAtLeast(0L)\n\n/**\n * Returns `true` if [other] range is fully contained inside [this] range\n */\n@InternalAPI\npublic operator fun LongRange.contains(other: LongRange): Boolean =\n other.start >= start && other.endInclusive <= endInclusive\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlin.experimental.*\nimport kotlin.native.concurrent.*\n\nprivate const val BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"\nprivate const val BASE64_MASK: Byte = 0x3f\nprivate const val BASE64_PAD = '='\n\n@SharedImmutable\nprivate val BASE64_INVERSE_ALPHABET = IntArray(256) {\n BASE64_ALPHABET.indexOf(it.toChar())\n}\n\n/**\n * Encode [String] in base64 format and UTF-8 character encoding.\n */\n@InternalAPI\npublic fun String.encodeBase64(): String = buildPacket {\n writeText(this@encodeBase64)\n}.encodeBase64()\n\n/**\n * Encode [ByteArray] in base64 format\n */\n@InternalAPI\npublic fun ByteArray.encodeBase64(): String = buildPacket {\n writeFully(this@encodeBase64)\n}.encodeBase64()\n\n/**\n * Encode [ByteReadPacket] in base64 format\n */\n@InternalAPI\npublic fun ByteReadPacket.encodeBase64(): String = buildString {\n val data = ByteArray(3)\n while (remaining > 0) {\n val read = readAvailable(data)\n data.clearFrom(read)\n\n val padSize = (data.size - read) * 8 / 6\n val chunk = ((data[0].toInt() and 0xFF) shl 16) or\n ((data[1].toInt() and 0xFF) shl 8) or\n (data[2].toInt() and 0xFF)\n\n for (index in data.size downTo padSize) {\n val char = (chunk shr (6 * index)) and BASE64_MASK.toInt()\n append(char.toBase64())\n }\n\n repeat(padSize) { append(BASE64_PAD) }\n }\n}\n\n/**\n * Decode [String] from base64 format encoded in UTF-8.\n */\n@InternalAPI\npublic fun String.decodeBase64String(): String = String(decodeBase64Bytes(), charset = Charsets.UTF_8)\n\n/**\n * Decode [String] from base64 format\n */\n@InternalAPI\npublic fun String.decodeBase64Bytes(): ByteArray = buildPacket {\n writeText(dropLastWhile { it == BASE64_PAD })\n}.decodeBase64Bytes().readBytes()\n\n/**\n * Decode [ByteReadPacket] from base64 format\n */\n@InternalAPI\npublic fun ByteReadPacket.decodeBase64Bytes(): Input = buildPacket {\n val data = ByteArray(4)\n\n while (remaining > 0) {\n val read = readAvailable(data)\n\n val chunk = data.foldIndexed(0) { index, result, current ->\n result or (current.fromBase64().toInt() shl ((3 - index) * 6))\n }\n\n for (index in data.size - 2 downTo (data.size - read)) {\n val origin = (chunk shr (8 * index)) and 0xff\n writeByte(origin.toByte())\n }\n }\n}\n\n@Suppress(\"unused\", \"KDocMissingDocumentation\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun String.decodeBase64(): String = decodeBase64String()\n\n@Suppress(\"unused\", \"KDocMissingDocumentation\")\n@Deprecated(\"Binary compatibility.\", level = DeprecationLevel.HIDDEN)\npublic fun ByteReadPacket.decodeBase64(): String = decodeBase64Bytes().readText()\n\ninternal fun ByteArray.clearFrom(from: Int) {\n (from until size).forEach { this[it] = 0 }\n}\n\ninternal fun Int.toBase64(): Char = BASE64_ALPHABET[this]\ninternal fun Byte.fromBase64(): Byte = BASE64_INVERSE_ALPHABET[toInt() and 0xff].toByte() and BASE64_MASK\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * A map with case insensitive [String] keys\n */\n@InternalAPI\npublic class CaseInsensitiveMap<Value> : MutableMap<String, Value> {\n private val delegate = mutableMapOf<CaseInsensitiveString, Value>()\n\n override val size: Int get() = delegate.size\n\n override fun containsKey(key: String): Boolean = delegate.containsKey(CaseInsensitiveString(key))\n\n override fun containsValue(value: Value): Boolean = delegate.containsValue(value)\n\n override fun get(key: String): Value? = delegate[key.caseInsensitive()]\n\n override fun isEmpty(): Boolean = delegate.isEmpty()\n\n override fun clear() {\n delegate.clear()\n }\n\n override fun put(key: String, value: Value): Value? = delegate.put(key.caseInsensitive(), value)\n\n override fun putAll(from: Map<out String, Value>) {\n from.forEach { (key, value) -> put(key, value) }\n }\n\n override fun remove(key: String): Value? = delegate.remove(key.caseInsensitive())\n\n override val keys: MutableSet<String>\n get() = DelegatingMutableSet(\n delegate.keys,\n { content },\n { caseInsensitive() }\n )\n\n override val entries: MutableSet<MutableMap.MutableEntry<String, Value>>\n get() = DelegatingMutableSet(\n delegate.entries,\n { Entry(key.content, value) },\n { Entry(key.caseInsensitive(), value) }\n )\n\n override val values: MutableCollection<Value> get() = delegate.values\n\n override fun equals(other: Any?): Boolean {\n if (other == null || other !is CaseInsensitiveMap<*>) return false\n return other.delegate == delegate\n }\n\n override fun hashCode(): Int = delegate.hashCode()\n}\n\nprivate class Entry<Key, Value>(\n override val key: Key,\n override var value: Value\n) : MutableMap.MutableEntry<Key, Value> {\n\n override fun setValue(newValue: Value): Value {\n value = newValue\n return value\n }\n\n override fun hashCode(): Int = 17 * 31 + key!!.hashCode() + value!!.hashCode()\n\n override fun equals(other: Any?): Boolean {\n if (other == null || other !is Map.Entry<*, *>) return false\n return other.key == key && other.value == value\n }\n\n override fun toString(): String = \"$key=$value\"\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\npackage io.ktor.util\n\n@InternalAPI\npublic class CaseInsensitiveSet() : MutableSet<String> {\n private val backingMap = CaseInsensitiveMap<Boolean>()\n\n public constructor(initial: Iterable<String>) : this() {\n addAll(initial)\n }\n\n override fun add(element: String): Boolean {\n if (element in backingMap) {\n return false\n }\n backingMap[element] = true\n return true\n }\n\n override val size: Int\n get() = backingMap.size\n\n override fun remove(element: String): Boolean {\n return backingMap.remove(element) == true\n }\n\n override fun addAll(elements: Collection<String>): Boolean {\n var added = false\n for (element in elements) {\n if (add(element)) {\n added = true\n }\n }\n return added\n }\n\n override fun clear() {\n backingMap.clear()\n }\n\n override fun removeAll(elements: Collection<String>): Boolean {\n return backingMap.keys.removeAll(elements)\n }\n\n override fun retainAll(elements: Collection<String>): Boolean {\n return backingMap.keys.retainAll(elements)\n }\n\n override fun contains(element: String): Boolean {\n return backingMap.contains(element)\n }\n\n override fun containsAll(elements: Collection<String>): Boolean {\n return backingMap.keys.containsAll(elements)\n }\n\n override fun isEmpty(): Boolean {\n return backingMap.isEmpty()\n }\n\n override fun iterator(): MutableIterator<String> = backingMap.keys.iterator()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Check if [Char] is in lower case\n */\n@InternalAPI\npublic fun Char.isLowerCase(): Boolean = toLowerCase() == this\n\n/**\n * Convert [String] to [CharArray]\n */\n@InternalAPI\npublic fun String.toCharArray(): CharArray = CharArray(length) { get(it) }\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\ninternal open class DelegatingMutableSet<From, To>(\n private val delegate: MutableSet<From>,\n private val convertTo: From.() -> To,\n private val convert: To.() -> From\n) : MutableSet<To> {\n\n public open fun Collection<To>.convert(): Collection<From> = map { it.convert() }\n public open fun Collection<From>.convertTo(): Collection<To> = map { it.convertTo() }\n\n override val size: Int = delegate.size\n\n override fun add(element: To): Boolean = delegate.add(element.convert())\n\n override fun addAll(elements: Collection<To>): Boolean = delegate.addAll(elements.convert())\n\n override fun clear() {\n delegate.clear()\n }\n\n override fun remove(element: To): Boolean = delegate.remove(element.convert())\n\n override fun removeAll(elements: Collection<To>): Boolean = delegate.removeAll(elements.convert())\n\n override fun retainAll(elements: Collection<To>): Boolean = delegate.retainAll(elements.convert())\n\n override fun contains(element: To): Boolean = delegate.contains(element.convert())\n\n override fun containsAll(elements: Collection<To>): Boolean = delegate.containsAll(elements.convert())\n\n override fun isEmpty(): Boolean = delegate.isEmpty()\n\n override fun iterator(): MutableIterator<To> = object : MutableIterator<To> {\n val delegateIterator = delegate.iterator()\n\n override fun hasNext(): Boolean = delegateIterator.hasNext()\n\n override fun next(): To = delegateIterator.next().convertTo()\n\n override fun remove() = delegateIterator.remove()\n }\n\n override fun hashCode(): Int = delegate.hashCode()\n\n override fun equals(other: Any?): Boolean {\n if (other == null || other !is Set<*>) return false\n\n val elements = delegate.convertTo()\n return other.containsAll(elements) && elements.containsAll(other)\n }\n\n override fun toString(): String = delegate.convertTo().toString()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * API marked with this annotation is ktor internal and it is not intended to be used outside.\n * It could be modified or removed without any notice. Using it outside of ktor could cause undefined behaviour and/or\n * any strange effects.\n *\n * We are strongly recommend to not use such API.\n */\n@Suppress(\"DEPRECATION\")\n@RequiresOptIn(\n level = RequiresOptIn.Level.ERROR,\n message = \"This API is internal in ktor and should not be used. It could be removed or changed without notice.\"\n)\n@Experimental(level = Experimental.Level.ERROR)\n@Target(\n AnnotationTarget.CLASS,\n AnnotationTarget.TYPEALIAS,\n AnnotationTarget.FUNCTION,\n AnnotationTarget.PROPERTY,\n AnnotationTarget.FIELD,\n AnnotationTarget.CONSTRUCTOR,\n AnnotationTarget.PROPERTY_SETTER\n)\npublic annotation class InternalAPI\n\n/**\n * API marked with this annotation is experimental and is not guaranteed to be stable.\n */\n@Suppress(\"DEPRECATION\")\n@RequiresOptIn(\n level = RequiresOptIn.Level.WARNING,\n message = \"This API is experimental. \" +\n \"It could be removed or changed in future releases, or its behaviour may be different.\"\n)\n@Experimental(level = Experimental.Level.WARNING)\n@Target(\n AnnotationTarget.CLASS,\n AnnotationTarget.TYPEALIAS,\n AnnotationTarget.FUNCTION,\n AnnotationTarget.PROPERTY,\n AnnotationTarget.FIELD,\n AnnotationTarget.CONSTRUCTOR\n)\npublic annotation class KtorExperimentalAPI\n\n/**\n * API marked with this annotation is intended to become public in the future [version].\n * Usually it means that the API can't be public at the moment of development due to\n * compatibility guarantees restrictions.\n *\n * Marking a public declaration with this annotation makes no sense\n * except for the case when it is also marked with [InternalAPI].\n *\n * Please note that the specified [version] and the fact of making something a candidate is not a guarantee,\n * so the target version could be changed without any notice or even the promotion could be cancelled at all.\n *\n * @property version in which the API is planned to be promoted\n */\n@InternalAPI\n@Retention(AnnotationRetention.SOURCE)\n@Target(\n AnnotationTarget.CLASS,\n AnnotationTarget.ANNOTATION_CLASS,\n AnnotationTarget.CONSTRUCTOR,\n AnnotationTarget.FUNCTION,\n AnnotationTarget.PROPERTY,\n AnnotationTarget.PROPERTY_SETTER,\n AnnotationTarget.TYPEALIAS\n)\npublic annotation class PublicAPICandidate(val version: String)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Specifies a key for an attribute in [Attributes]\n * @param T is type of the value stored in the attribute\n * @param name is a name of the attribute for diagnostic purposes\n */\npublic class AttributeKey<T>(public val name: String) {\n override fun toString(): String = if (name.isEmpty()) super.toString() else \"AttributeKey: $name\"\n}\n\n/**\n * Create attributes instance suitable for the particular platform\n */\npublic expect fun Attributes(concurrent: Boolean = false): Attributes\n\n/**\n * Map of attributes accessible by [AttributeKey] in a typed manner\n */\npublic interface Attributes {\n /**\n * Gets a value of the attribute for the specified [key], or throws an exception if an attribute doesn't exist\n */\n public operator fun <T : Any> get(key: AttributeKey<T>): T =\n getOrNull(key) ?: throw IllegalStateException(\"No instance for key $key\")\n\n /**\n * Gets a value of the attribute for the specified [key], or return `null` if an attribute doesn't exist\n */\n public fun <T : Any> getOrNull(key: AttributeKey<T>): T?\n\n /**\n * Checks if an attribute with the specified [key] exists\n */\n public operator fun contains(key: AttributeKey<*>): Boolean\n\n /**\n * Creates or changes an attribute with the specified [key] using [value]\n */\n public fun <T : Any> put(key: AttributeKey<T>, value: T)\n\n /**\n * Removes an attribute with the specified [key]\n */\n public fun <T : Any> remove(key: AttributeKey<T>)\n\n /**\n * Removes an attribute with the specified [key] and returns its current value, throws an exception if an attribute doesn't exist\n */\n public fun <T : Any> take(key: AttributeKey<T>): T = get(key).also { remove(key) }\n\n /**\n * Removes an attribute with the specified [key] and returns its current value, returns `null` if an attribute doesn't exist\n */\n public fun <T : Any> takeOrNull(key: AttributeKey<T>): T? = getOrNull(key).also { remove(key) }\n\n /**\n * Gets a value of the attribute for the specified [key], or calls supplied [block] to compute its value\n */\n public fun <T : Any> computeIfAbsent(key: AttributeKey<T>, block: () -> T): T\n\n /**\n * Returns [List] of all [AttributeKey] instances in this map\n */\n public val allKeys: List<AttributeKey<*>>\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Read [Short] in network order(BE) with specified [offset] from [ByteArray].\n */\n@InternalAPI\npublic fun ByteArray.readShort(offset: Int): Short {\n val result = ((this[offset].toInt() and 0xFF) shl 8) or (this[offset + 1].toInt() and 0xFF)\n return result.toShort()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CryptoKt\")\n\npackage io.ktor.util\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\nprivate val digits = \"0123456789abcdef\".toCharArray()\n\n/**\n * Encode [bytes] as a HEX string with no spaces, newlines and `0x` prefixes.\n */\npublic fun hex(bytes: ByteArray): String {\n val result = CharArray(bytes.size * 2)\n var resultIndex = 0\n val digits = digits\n\n for (index in 0 until bytes.size) {\n val b = bytes[index].toInt() and 0xff\n result[resultIndex++] = digits[b shr 4]\n result[resultIndex++] = digits[b and 0x0f]\n }\n\n return result.concatToString()\n}\n\n/**\n * Decode bytes from HEX string. It should be no spaces and `0x` prefixes.\n */\npublic fun hex(s: String): ByteArray {\n val result = ByteArray(s.length / 2)\n for (idx in 0 until result.size) {\n val srcIdx = idx * 2\n val high = s[srcIdx].toString().toInt(16) shl 4\n val low = s[srcIdx + 1].toString().toInt(16)\n result[idx] = (high or low).toByte()\n }\n\n return result\n}\n\n/**\n * Generates a nonce string. Could block if the system's entropy source is empty\n */\n@InternalAPI\npublic expect fun generateNonce(): String\n\n/**\n * Generates a nonce bytes of [size]. Could block if the system's entropy source is empty\n */\n@InternalAPI\npublic fun generateNonce(size: Int): ByteArray = buildPacket {\n while (this.size < size) {\n writeText(generateNonce())\n }\n}.readBytes(size)\n\n/**\n * Compute SHA-1 hash for the specified [bytes]\n */\npublic expect fun sha1(bytes: ByteArray): ByteArray\n\n/**\n * Create [Digest] from specified hash [name].\n */\n@Suppress(\"FunctionName\")\n@InternalAPI\npublic expect fun Digest(name: String): Digest\n\n/**\n * Stateful digest class specified to calculate digest.\n */\n@InternalAPI\npublic interface Digest {\n /**\n * Add [bytes] to digest value.\n */\n public operator fun plusAssign(bytes: ByteArray)\n\n /**\n * Reset [Digest] state.\n */\n public fun reset()\n\n /**\n * Calculate digest bytes.\n */\n public suspend fun build(): ByteArray\n}\n\n/**\n * Calculate digest from current state and specified [bytes].\n */\n@InternalAPI\npublic suspend fun Digest.build(bytes: ByteArray): ByteArray {\n this += bytes\n return build()\n}\n\n/**\n * Calculate digest from current state and specified [string].\n */\n@InternalAPI\npublic suspend fun Digest.build(string: String, charset: Charset = Charsets.UTF_8): ByteArray {\n this += string.toByteArray(charset)\n return build()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\n\n/**\n * Empty [Encoder] that doesn't do any changes.\n */\npublic object Identity : Encoder {\n override fun CoroutineScope.encode(source: ByteReadChannel): ByteReadChannel = source\n\n override fun CoroutineScope.decode(source: ByteReadChannel): ByteReadChannel = source\n}\n\n/**\n * Content encoder.\n */\npublic interface Encoder {\n /**\n * Launch coroutine to encode [source] bytes.\n */\n public fun CoroutineScope.encode(source: ByteReadChannel): ByteReadChannel\n\n /**\n * Launch coroutine to decode [source] bytes.\n */\n public fun CoroutineScope.decode(source: ByteReadChannel): ByteReadChannel\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Represents a nonce manager. It's responsibility is to produce nonce values\n * and verify nonce values from untrusted sources that they are provided by this manager.\n * This is usually required in web environment to mitigate CSRF attacks.\n * Depending on it's underlying implementation it could be stateful or stateless.\n * Note that there is usually some timeout for nonce values to reduce memory usage and to avoid replay attacks.\n * Nonce length is unspecified.\n */\npublic interface NonceManager {\n /**\n * Generate new nonce instance\n */\n public suspend fun newNonce(): String\n\n /**\n * Verify [nonce] value\n * @return `true` if [nonce] is valid\n */\n public suspend fun verifyNonce(nonce: String): Boolean\n}\n\n/**\n * This implementation does only generate nonce values but doesn't validate them. This is recommended for testing only.\n */\npublic object GenerateOnlyNonceManager : NonceManager {\n override suspend fun newNonce(): String {\n return generateNonce()\n }\n\n override suspend fun verifyNonce(nonce: String): Boolean {\n return true\n }\n}\n\n/**\n * Stub implementation that always fails.\n * Will be removed so no public signatures should rely on it\n */\n@Deprecated(\"This should be removed with OAuth2StateProvider\", level = DeprecationLevel.ERROR)\n@InternalAPI\npublic object AlwaysFailNonceManager : NonceManager {\n override suspend fun newNonce(): String {\n throw UnsupportedOperationException(\"This manager should never be used\")\n }\n\n override suspend fun verifyNonce(nonce: String): Boolean {\n throw UnsupportedOperationException(\"This manager should never be used\")\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Provides data structure for associating a [String] with a [List] of Strings\n */\npublic interface StringValues {\n public companion object {\n /**\n * Empty [StringValues] instance\n */\n public val Empty: StringValues = StringValuesImpl()\n\n /**\n * Builds a [StringValues] instance with the given [builder] function\n * @param caseInsensitiveName specifies if map should have case-sensitive or case-insensitive names\n * @param builder specifies a function to build a map\n */\n public inline fun build(\n caseInsensitiveName: Boolean = false,\n builder: StringValuesBuilder.() -> Unit\n ): StringValues = StringValuesBuilder(caseInsensitiveName).apply(builder).build()\n }\n\n /**\n * Specifies if map has case-sensitive or case-insensitive names\n */\n public val caseInsensitiveName: Boolean\n\n /**\n * Gets first value from the list of values associated with a [name], or null if the name is not present\n */\n public operator fun get(name: String): String? = getAll(name)?.firstOrNull()\n\n /**\n * Gets all values associated with the [name], or null if the name is not present\n */\n public fun getAll(name: String): List<String>?\n\n /**\n * Gets all names from the map\n */\n public fun names(): Set<String>\n\n /**\n * Gets all entries from the map\n */\n public fun entries(): Set<Map.Entry<String, List<String>>>\n\n /**\n * Checks if the given [name] exists in the map\n */\n public operator fun contains(name: String): Boolean = getAll(name) != null\n\n /**\n * Checks if the given [name] and [value] pair exists in the map\n */\n public fun contains(name: String, value: String): Boolean = getAll(name)?.contains(value) ?: false\n\n /**\n * Iterates over all entries in this map and calls [body] for each pair\n *\n * Can be optimized in implementations\n */\n public fun forEach(body: (String, List<String>) -> Unit): Unit = entries().forEach { (k, v) -> body(k, v) }\n\n /**\n * Checks if this map is empty\n */\n public fun isEmpty(): Boolean\n}\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic open class StringValuesSingleImpl(\n override val caseInsensitiveName: Boolean,\n public val name: String,\n public val values: List<String>\n) : StringValues {\n\n override fun getAll(name: String): List<String>? = if (this.name.equals(name, caseInsensitiveName)) values else null\n\n override fun entries(): Set<Map.Entry<String, List<String>>> = setOf(\n object : Map.Entry<String, List<String>> {\n override val key: String = name\n override val value: List<String> = values\n override fun toString() = \"$key=$value\"\n }\n )\n\n override fun isEmpty(): Boolean = false\n\n override fun names(): Set<String> = setOf(name)\n\n override fun toString(): String = \"StringValues(case=${!caseInsensitiveName}) ${entries()}\"\n\n override fun hashCode(): Int = entriesHashCode(entries(), 31 * caseInsensitiveName.hashCode())\n\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (other !is StringValues) return false\n if (caseInsensitiveName != other.caseInsensitiveName) return false\n return entriesEquals(entries(), other.entries())\n }\n\n override fun forEach(body: (String, List<String>) -> Unit): Unit = body(name, values)\n\n override fun get(name: String): String? =\n if (name.equals(this.name, caseInsensitiveName)) values.firstOrNull() else null\n\n override fun contains(name: String): Boolean = name.equals(this.name, caseInsensitiveName)\n\n override fun contains(name: String, value: String): Boolean =\n name.equals(this.name, caseInsensitiveName) && values.contains(value)\n}\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic open class StringValuesImpl(\n override val caseInsensitiveName: Boolean = false,\n values: Map<String, List<String>> = emptyMap()\n) : StringValues {\n\n protected val values: Map<String, List<String>> by lazy {\n if (caseInsensitiveName) caseInsensitiveMap<List<String>>().apply { putAll(values) } else values.toMap()\n }\n\n override operator fun get(name: String): String? = listForKey(name)?.firstOrNull()\n\n override fun getAll(name: String): List<String>? = listForKey(name)\n\n override operator fun contains(name: String): Boolean = listForKey(name) != null\n\n override fun contains(name: String, value: String): Boolean = listForKey(name)?.contains(value) ?: false\n\n override fun names(): Set<String> = values.keys.unmodifiable()\n\n override fun isEmpty(): Boolean = values.isEmpty()\n\n override fun entries(): Set<Map.Entry<String, List<String>>> = values.entries.unmodifiable()\n\n override fun forEach(body: (String, List<String>) -> Unit) {\n for ((key, value) in values) body(key, value)\n }\n\n private fun listForKey(name: String): List<String>? = values[name]\n\n override fun toString(): String = \"StringValues(case=${!caseInsensitiveName}) ${entries()}\"\n\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (other !is StringValues) return false\n if (caseInsensitiveName != other.caseInsensitiveName) return false\n return entriesEquals(entries(), other.entries())\n }\n\n override fun hashCode(): Int = entriesHashCode(entries(), 31 * caseInsensitiveName.hashCode())\n}\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic open class StringValuesBuilder(public val caseInsensitiveName: Boolean = false, size: Int = 8) {\n protected val values: MutableMap<String, MutableList<String>> =\n if (caseInsensitiveName) caseInsensitiveMap() else LinkedHashMap(size)\n\n protected var built: Boolean = false\n\n public fun getAll(name: String): List<String>? = values[name]\n\n public operator fun contains(name: String): Boolean = name in values\n\n public fun contains(name: String, value: String): Boolean = values[name]?.contains(value) ?: false\n\n public fun names(): Set<String> = values.keys\n\n public fun isEmpty(): Boolean = values.isEmpty()\n\n public fun entries(): Set<Map.Entry<String, List<String>>> = values.entries.unmodifiable()\n\n public operator fun set(name: String, value: String) {\n validateValue(value)\n val list = ensureListForKey(name, 1)\n list.clear()\n list.add(value)\n }\n\n public operator fun get(name: String): String? = getAll(name)?.firstOrNull()\n\n public fun append(name: String, value: String) {\n validateValue(value)\n ensureListForKey(name, 1).add(value)\n }\n\n public fun appendAll(stringValues: StringValues) {\n stringValues.forEach { name, values ->\n appendAll(name, values)\n }\n }\n\n public fun appendMissing(stringValues: StringValues) {\n stringValues.forEach { name, values ->\n appendMissing(name, values)\n }\n }\n\n public fun appendAll(name: String, values: Iterable<String>) {\n ensureListForKey(name, (values as? Collection)?.size ?: 2).let { list ->\n values.forEach { value ->\n validateValue(value)\n list.add(value)\n }\n }\n }\n\n public fun appendMissing(name: String, values: Iterable<String>) {\n val existing = this.values[name]?.toSet() ?: emptySet()\n\n appendAll(name, values.filter { it !in existing })\n }\n\n public fun remove(name: String) {\n values.remove(name)\n }\n\n public fun removeKeysWithNoEntries() {\n for ((k, _) in values.filter { it.value.isEmpty() }) {\n remove(k)\n }\n }\n\n public fun remove(name: String, value: String): Boolean = values[name]?.remove(value) ?: false\n\n public fun clear() {\n values.clear()\n }\n\n public open fun build(): StringValues {\n require(!built) { \"ValueMapBuilder can only build a single ValueMap\" }\n built = true\n return StringValuesImpl(caseInsensitiveName, values)\n }\n\n protected open fun validateName(name: String) {\n }\n\n protected open fun validateValue(value: String) {\n }\n\n private fun ensureListForKey(name: String, size: Int): MutableList<String> {\n if (built) {\n throw IllegalStateException(\"Cannot modify a builder when final structure has already been built\")\n }\n\n return values[name] ?: ArrayList<String>(size).also { validateName(name); values[name] = it }\n }\n}\n\n/**\n * Build an instance of [StringValues] from a vararg list of pairs\n */\npublic fun valuesOf(vararg pairs: Pair<String, List<String>>, caseInsensitiveKey: Boolean = false): StringValues {\n return StringValuesImpl(caseInsensitiveKey, pairs.asList().toMap())\n}\n\n/**\n * Build an instance of [StringValues] from a single pair\n */\npublic fun valuesOf(name: String, value: String, caseInsensitiveKey: Boolean = false): StringValues {\n return StringValuesSingleImpl(caseInsensitiveKey, name, listOf(value))\n}\n\n/**\n * Build an instance of [StringValues] with a single [name] and multiple [values]\n */\npublic fun valuesOf(name: String, values: List<String>, caseInsensitiveKey: Boolean = false): StringValues {\n return StringValuesSingleImpl(caseInsensitiveKey, name, values)\n}\n\n/**\n * Build an empty [StringValues] instance.\n */\npublic fun valuesOf(): StringValues = StringValues.Empty\n\n/**\n * Build an instance of [StringValues] from the specified [map]\n */\npublic fun valuesOf(map: Map<String, Iterable<String>>, caseInsensitiveKey: Boolean = false): StringValues {\n val size = map.size\n if (size == 1) {\n val entry = map.entries.single()\n return StringValuesSingleImpl(caseInsensitiveKey, entry.key, entry.value.toList())\n }\n val values: MutableMap<String, List<String>> =\n if (caseInsensitiveKey) caseInsensitiveMap() else LinkedHashMap(size)\n map.entries.forEach { values.put(it.key, it.value.toList()) }\n return StringValuesImpl(caseInsensitiveKey, values)\n}\n\n/**\n * Copy values to a new independent map\n */\npublic fun StringValues.toMap(): Map<String, List<String>> =\n entries().associateByTo(LinkedHashMap(), { it.key }, { it.value.toList() })\n\n/**\n * Copy values to a list of pairs\n */\npublic fun StringValues.flattenEntries(): List<Pair<String, String>> = entries().flatMap { e ->\n e.value.map { e.key to it }\n}\n\n/**\n * Invoke [block] function for every value pair\n */\npublic fun StringValues.flattenForEach(block: (String, String) -> Unit): Unit = forEach { name, items ->\n items.forEach { block(name, it) }\n}\n\n/**\n * Create a new instance of [StringValues] filtered by the specified [predicate]\n * @param keepEmpty when `true` will keep empty lists otherwise keys with no values will be discarded\n */\npublic fun StringValues.filter(keepEmpty: Boolean = false, predicate: (String, String) -> Boolean): StringValues {\n val entries = entries()\n val values: MutableMap<String, MutableList<String>> =\n if (caseInsensitiveName) caseInsensitiveMap() else LinkedHashMap(entries.size)\n\n entries.forEach { entry ->\n val list = entry.value.filterTo(ArrayList(entry.value.size)) { predicate(entry.key, it) }\n if (keepEmpty || list.isNotEmpty()) {\n values.put(entry.key, list)\n }\n }\n\n return StringValuesImpl(caseInsensitiveName, values)\n}\n\n/**\n * Append values from [source] filtering values by the specified [predicate]\n * @param keepEmpty when `true` will keep empty lists otherwise keys with no values will be discarded\n */\npublic fun StringValuesBuilder.appendFiltered(\n source: StringValues,\n keepEmpty: Boolean = false,\n predicate: (String, String) -> Boolean\n) {\n source.forEach { name, value ->\n val list = value.filterTo(ArrayList(value.size)) { predicate(name, it) }\n if (keepEmpty || list.isNotEmpty()) {\n appendAll(name, list)\n }\n }\n}\n\n/**\n * Append all values from the specified [builder]\n */\npublic fun StringValuesBuilder.appendAll(builder: StringValuesBuilder): StringValuesBuilder = apply {\n builder.entries().forEach { (name, values) ->\n appendAll(name, values)\n }\n}\n\nprivate fun entriesEquals(a: Set<Map.Entry<String, List<String>>>, b: Set<Map.Entry<String, List<String>>>): Boolean {\n return a == b\n}\n\nprivate fun entriesHashCode(entries: Set<Map.Entry<String, List<String>>>, seed: Int): Int {\n return seed * 31 + entries.hashCode()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.cio\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlin.contracts.*\n\n/**\n * Convert [ByteReadChannel] to [ByteArray]\n */\npublic suspend fun ByteReadChannel.toByteArray(limit: Int = Int.MAX_VALUE): ByteArray =\n readRemaining(limit.toLong()).readBytes()\n\n/**\n * Executes [block] on [ByteWriteChannel] and close it down correctly whether an exception\n */\npublic inline fun ByteWriteChannel.use(block: ByteWriteChannel.() -> Unit) {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n\n try {\n block()\n } catch (cause: Throwable) {\n close(cause)\n throw cause\n } finally {\n close()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\n@file:Suppress(\"KDocMissingDocumentation\")\n\npackage io.ktor.util\n\n@InternalAPI\npublic expect class Lock() {\n public fun lock()\n public fun unlock()\n\n public fun close()\n}\n\n@InternalAPI\npublic inline fun <R> Lock.withLock(crossinline block: () -> R): R {\n try {\n lock()\n return block()\n } finally {\n unlock()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections\n\nimport io.ktor.util.*\n\n@InternalAPI\npublic open class ConcurrentCollection<E>(\n private val delegate: MutableCollection<E>,\n private val lock: Lock\n) : MutableCollection<E> {\n\n override val size: Int get() = lock.withLock {\n delegate.size\n }\n\n override fun contains(element: E): Boolean = lock.withLock {\n delegate.contains(element)\n }\n\n override fun containsAll(elements: Collection<E>): Boolean = lock.withLock {\n delegate.containsAll(elements)\n }\n\n override fun isEmpty(): Boolean = lock.withLock {\n delegate.isEmpty()\n }\n\n override fun add(element: E): Boolean = lock.withLock {\n delegate.add(element)\n }\n\n override fun addAll(elements: Collection<E>): Boolean = lock.withLock {\n delegate.addAll(elements)\n }\n\n override fun clear(): Unit = lock.withLock {\n delegate.clear()\n }\n\n override fun iterator(): MutableIterator<E> = delegate.iterator()\n\n override fun remove(element: E): Boolean = lock.withLock {\n delegate.remove(element)\n }\n\n override fun removeAll(elements: Collection<E>): Boolean = lock.withLock {\n delegate.removeAll(elements)\n }\n\n override fun retainAll(elements: Collection<E>): Boolean = lock.withLock {\n delegate.retainAll(elements)\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections\n\nimport io.ktor.util.*\nimport io.ktor.util.collections.internal.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.atomicfu.locks.*\n\nprivate const val INITIAL_CAPACITY = 32\n\n@KtorExperimentalAPI\npublic class ConcurrentList<T> : MutableList<T> {\n private var data by shared(SharedList<T>(INITIAL_CAPACITY))\n\n override var size: Int by shared(0)\n private set\n\n private val lock = SynchronizedObject()\n\n init {\n makeShared()\n }\n\n override fun hashCode(): Int = synchronized(lock) {\n return@synchronized fold(7) { state, current -> Hash.combine(state, current.hashCode()) }\n }\n\n override fun equals(other: Any?): Boolean = synchronized(lock) {\n if (other == null || other !is List<*> || other.size != size) {\n return@synchronized false\n }\n\n forEachIndexed { index, item ->\n if (other[index] != item) return@synchronized false\n }\n\n return@synchronized true\n }\n\n override fun toString(): String = synchronized(lock) {\n return@synchronized buildString {\n append('[')\n this@ConcurrentList.forEachIndexed { index, item ->\n append(\"$item\")\n\n if (index + 1 < size) {\n append(\", \")\n }\n }\n\n append(']')\n }\n }\n\n override fun contains(element: T): Boolean = indexOf(element) >= 0\n\n override fun containsAll(elements: Collection<T>): Boolean = elements.all { contains(it) }\n\n override fun get(index: Int): T = synchronized(lock) {\n if (index >= size) {\n throw NoSuchElementException()\n }\n\n return data[index]!!\n }\n\n override fun indexOf(element: T): Int = synchronized(lock) {\n for (index in 0 until size) {\n if (data[index] == element) {\n return index\n }\n }\n\n return -1\n }\n\n override fun isEmpty(): Boolean = size == 0\n\n override fun lastIndexOf(element: T): Int = synchronized(lock) {\n for (index in size - 1 downTo 0) {\n if (data[index] == element) {\n return index\n }\n }\n\n return -1\n }\n\n override fun add(element: T): Boolean = synchronized(lock) {\n if (size >= data.size) {\n increaseCapacity()\n }\n\n data[size] = element\n size += 1\n return true\n }\n\n override fun add(index: Int, element: T) {\n reserve(index, 1)\n data[index] = element\n }\n\n override fun addAll(index: Int, elements: Collection<T>): Boolean {\n reserve(index, elements.size)\n\n var current = index\n for (item in elements) {\n data[current] = item\n current += 1\n }\n\n return elements.isNotEmpty()\n }\n\n override fun addAll(elements: Collection<T>): Boolean {\n elements.all { add(it) }\n return elements.isNotEmpty()\n }\n\n override fun clear(): Unit = synchronized(lock) {\n data = SharedList(INITIAL_CAPACITY)\n size = 0\n }\n\n override fun iterator(): MutableIterator<T> = listIterator()\n\n override fun listIterator(): MutableListIterator<T> = listIterator(0)\n\n override fun listIterator(index: Int): MutableListIterator<T> = object : MutableListIterator<T> {\n var current by shared(index)\n\n override fun hasNext(): Boolean = current < this@ConcurrentList.size\n\n override fun next(): T = this@ConcurrentList[current++]\n\n override fun remove() {\n removeAt(current - 1)\n current--\n }\n\n override fun hasPrevious(): Boolean = current > 0\n\n override fun nextIndex(): Int = current + 1\n\n override fun previous(): T = this@ConcurrentList[current--]\n\n override fun previousIndex(): Int = current - 1\n\n override fun add(element: T) {\n add(current, element)\n }\n\n override fun set(element: T) {\n this@ConcurrentList[current - 1] = element\n }\n }\n\n override fun subList(fromIndex: Int, toIndex: Int): MutableList<T> =\n ConcurrentListSlice(this, fromIndex, toIndex)\n\n override fun remove(element: T): Boolean = synchronized(lock) {\n val index = indexOf(element)\n if (index < 0) {\n return false\n }\n\n removeAt(index)\n return true\n }\n\n override fun removeAll(elements: Collection<T>): Boolean {\n var result = false\n elements.forEach { result = remove(it) || result }\n return result\n }\n\n override fun removeAt(index: Int): T = synchronized(lock) {\n checkIndex(index)\n\n val old = data[index]\n data[index] = null\n\n sweep(index)\n return old!!\n }\n\n override fun retainAll(elements: Collection<T>): Boolean = synchronized(lock) {\n var changed = false\n var firstNull = -1\n for (index in 0 until size) {\n val item = data[index]!!\n\n if (item !in elements) {\n changed = true\n data[index] = null\n\n if (firstNull < 0) {\n firstNull = index\n }\n }\n }\n\n if (changed) {\n sweep(firstNull)\n }\n\n return changed\n }\n\n override fun set(index: Int, element: T): T = synchronized(lock) {\n checkIndex(index)\n val old = data[index]\n data[index] = element\n\n return old ?: element\n }\n\n private fun checkIndex(index: Int) {\n if (index >= size || index < 0) throw IndexOutOfBoundsException()\n }\n\n private fun increaseCapacity(targetCapacity: Int = data.size * 2) {\n val newData = SharedList<T>(targetCapacity)\n for (index in 0 until data.size) {\n newData[index] = data[index]\n }\n\n data = newData\n }\n\n private fun sweep(firstNull: Int) {\n var writePosition = firstNull\n\n for (index in writePosition + 1 until size) {\n if (data[index] == null) {\n continue\n }\n\n data[writePosition] = data[index]\n writePosition += 1\n }\n\n for (index in writePosition until size) {\n data[index] = null\n }\n\n size = writePosition\n }\n\n private fun reserve(index: Int, gapSize: Int) {\n val targetSize = gapSize + size\n while (data.size < targetSize) {\n increaseCapacity()\n }\n\n var readPosition = size - 1\n while (readPosition >= index) {\n data[readPosition + gapSize] = data[readPosition]\n readPosition -= 1\n }\n\n for (current in index until index + gapSize) {\n data[current] = null\n }\n\n size += gapSize\n }\n}\n",null,"/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections\n\nimport io.ktor.util.*\nimport io.ktor.util.collections.internal.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.atomicfu.*\n\nprivate const val INITIAL_CAPACITY = 32\nprivate const val MAX_LOAD_FACTOR = 0.5\nprivate const val UPSIZE_RATIO = 2\n\n/**\n * Ktor concurrent map implementation. Please do not use it.\n */\n@InternalAPI\npublic class ConcurrentMap<Key : Any, Value : Any>(\n private val lock: Lock = Lock(),\n initialCapacity: Int = INITIAL_CAPACITY\n) : MutableMap<Key, Value> {\n private var table by shared(SharedList<SharedForwardList<MapNode<Key, Value>>>(initialCapacity))\n private var insertionOrder by shared(SharedForwardList<MapNode<Key, Value>>())\n\n private val _size = atomic(0)\n private val loadFactor: Float get() = _size.value.toFloat() / table.size\n\n public constructor(lock: Lock, map: Map<Key, Value>) : this(lock, map.size) {\n putAll(map)\n }\n\n init {\n makeShared()\n }\n\n override val size: Int\n get() = _size.value\n\n override fun containsKey(key: Key): Boolean = get(key) != null\n\n override fun containsValue(value: Value): Boolean = locked {\n for (bucket in table) {\n bucket ?: continue\n\n for (item in bucket) {\n if (item.value == value) {\n return@locked true\n }\n }\n }\n\n return@locked false\n }\n\n override fun get(key: Key): Value? = locked {\n val bucket = findBucket(key) ?: return@locked null\n val item = bucket.find { it.key == key }\n\n return@locked item?.value\n }\n\n override fun isEmpty(): Boolean = size == 0\n\n override fun clear(): Unit = locked {\n table = SharedList(INITIAL_CAPACITY)\n insertionOrder = SharedForwardList()\n }\n\n override fun put(key: Key, value: Value): Value? = locked {\n if (loadFactor > MAX_LOAD_FACTOR) {\n upsize()\n }\n\n val bucket = findOrCreateBucket(key)\n val item = bucket.find { it.key == key }\n\n if (item != null) {\n val oldValue = item.value\n item.value = value\n return@locked oldValue\n }\n\n val mapNode = MapNode(key, value)\n val node = insertionOrder.appendLast(mapNode)\n\n mapNode.backReference = node\n bucket.appendFirst(mapNode)\n\n _size.incrementAndGet()\n return@locked null\n }\n\n override fun putAll(from: Map<out Key, Value>) {\n for ((key, value) in from) {\n put(key, value)\n }\n }\n\n override fun remove(key: Key): Value? = locked {\n val bucket = findBucket(key) ?: return@locked null\n\n with(bucket.iterator()) {\n while (hasNext()) {\n val item = next()\n\n if (item.key == key) {\n val result = item.value\n _size.decrementAndGet()\n\n item.remove()\n remove()\n\n return@locked result\n }\n }\n }\n\n return@locked null\n }\n\n override val entries: MutableSet<MutableMap.MutableEntry<Key, Value>>\n get() = MutableMapEntries(this)\n\n override val keys: MutableSet<Key>\n get() = ConcurrentMapKeys(this)\n\n override val values: MutableCollection<Value>\n get() = ConcurrentMapValues(this)\n\n override fun equals(other: Any?): Boolean = locked {\n if (other == null || other !is Map<*, *> || other.size != size) {\n return@locked false\n }\n\n for ((key, value) in other.entries) {\n if (get(key) != value) {\n return@locked false\n }\n }\n\n return@locked true\n }\n\n override fun hashCode(): Int = locked {\n var current = 7\n for ((key, value) in entries) {\n current = Hash.combine(key.hashCode(), value.hashCode(), current)\n }\n\n return@locked current\n }\n\n override fun toString(): String = locked {\n return@locked buildString {\n append(\"{\")\n this@ConcurrentMap.entries.forEachIndexed { index, (key, value) ->\n append(\"$key=$value\")\n\n if (index != size - 1) {\n append(\", \")\n }\n }\n\n append(\"}\")\n }\n }\n\n internal fun iterator(): MutableIterator<MutableMap.MutableEntry<Key, Value>> =\n object : MutableIterator<MutableMap.MutableEntry<Key, Value>> {\n private var current: ForwardListNode<MapNode<Key, Value>>? by shared(insertionOrder.first())\n private val previous: ForwardListNode<MapNode<Key, Value>>? get() = current?.previous\n\n init {\n makeShared()\n }\n\n override fun hasNext(): Boolean = current != null\n\n override fun next(): MutableMap.MutableEntry<Key, Value> {\n val result = current!!.item!!\n current = current?.next\n return result\n }\n\n override fun remove() {\n val item = previous!!.item!!\n remove(item.key)\n }\n }\n\n /**\n * Perform concurrent insert.\n */\n @Deprecated(\n \"This is accidentally does insert instead of get. Use computeIfAbsent or getOrElse instead.\",\n level = DeprecationLevel.ERROR\n )\n public fun getOrDefault(key: Key, block: () -> Value): Value = lock.withLock {\n return@withLock computeIfAbsent(key, block)\n }\n\n /**\n * Computes [block] and inserts result in map. The [block] will be evaluated at most once.\n */\n public fun computeIfAbsent(key: Key, block: () -> Value): Value = locked {\n val value = get(key)\n if (value != null) {\n return@locked value\n }\n val newValue = block()\n put(key, newValue)\n\n return@locked newValue\n }\n\n private fun findBucket(key: Key): SharedForwardList<MapNode<Key, Value>>? {\n val bucketId = key.hashCode() and (table.size - 1)\n return table[bucketId]\n }\n\n private fun findOrCreateBucket(key: Key): SharedForwardList<MapNode<Key, Value>> {\n val bucketId = key.hashCode() and (table.size - 1)\n val result = table[bucketId]\n\n if (result == null) {\n val bucket = SharedForwardList<MapNode<Key, Value>>()\n table[bucketId] = bucket\n return bucket\n }\n\n return result\n }\n\n private fun upsize() {\n val newTable = ConcurrentMap<Key, Value>(initialCapacity = table.size * UPSIZE_RATIO)\n newTable.putAll(this)\n\n table = newTable.table\n }\n\n private fun <T> locked(block: () -> T): T = lock.withLock { block() }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport kotlin.math.*\n\ninternal class ConcurrentListSlice<T>(\n private val origin: MutableList<T>,\n private val fromIndex: Int,\n private val toIndex: Int\n) : AbstractMutableList<T>() {\n override val size: Int\n get() = min(origin.size, toIndex - fromIndex)\n\n override fun get(index: Int): T {\n return origin[fromIndex + index]\n }\n\n override fun add(index: Int, element: T) {\n error(\"Unsupported append in ConcurrentList slice\")\n }\n\n override fun removeAt(index: Int): T {\n error(\"Unsupported remove in ConcurrentList slice\")\n }\n\n override fun set(index: Int, element: T): T = origin.set(fromIndex + index, element)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.util.collections.*\nimport io.ktor.utils.io.*\n\ninternal class ConcurrentMapKeys<Key : Any, Value : Any>(\n private val delegate: ConcurrentMap<Key, Value>\n) : MutableSet<Key> {\n\n init {\n makeShared()\n }\n\n override fun add(element: Key): Boolean = throw UnsupportedOperationException()\n\n override fun addAll(elements: Collection<Key>): Boolean {\n throw UnsupportedOperationException()\n }\n\n override fun clear() {\n delegate.clear()\n }\n\n override fun iterator(): MutableIterator<Key> = object : MutableIterator<Key> {\n private val delegateIterator: MutableIterator<MutableMap.MutableEntry<Key, Value>> = delegate.iterator()\n\n init {\n makeShared()\n }\n\n override fun hasNext(): Boolean = delegateIterator.hasNext()\n\n override fun next(): Key = delegateIterator.next().key\n\n override fun remove() {\n delegateIterator.remove()\n }\n }\n\n override fun remove(element: Key): Boolean = delegate.remove(element) != null\n\n override fun removeAll(elements: Collection<Key>): Boolean {\n var modified = false\n elements.forEach {\n modified = remove(it) || modified\n }\n\n return modified\n }\n\n override fun retainAll(elements: Collection<Key>): Boolean {\n var modified = false\n\n with(iterator()) {\n while (hasNext()) {\n if (next() in elements) {\n continue\n }\n\n modified = true\n remove()\n }\n }\n\n return modified\n }\n\n override val size: Int\n get() = delegate.size\n\n override fun contains(element: Key): Boolean = delegate.contains(element)\n\n override fun containsAll(elements: Collection<Key>): Boolean = elements.all { contains(it) }\n\n override fun isEmpty(): Boolean = size == 0\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.util.collections.*\nimport io.ktor.utils.io.*\n\ninternal class ConcurrentMapValues<Key : Any, Value : Any>(\n private val delegate: ConcurrentMap<Key, Value>\n) : MutableCollection<Value> {\n\n init {\n makeShared()\n }\n\n override val size: Int\n get() = delegate.size\n\n override fun contains(element: Value): Boolean = delegate.containsValue(element)\n\n override fun containsAll(elements: Collection<Value>): Boolean = elements.all { contains(it) }\n\n override fun isEmpty(): Boolean = delegate.size == 0\n\n override fun add(element: Value): Boolean {\n throw UnsupportedOperationException()\n }\n\n override fun addAll(elements: Collection<Value>): Boolean {\n throw UnsupportedOperationException()\n }\n\n override fun clear() {\n delegate.clear()\n }\n\n override fun iterator(): MutableIterator<Value> = object : MutableIterator<Value> {\n val delegateIterator = delegate.iterator()\n\n init {\n makeShared()\n }\n\n override fun hasNext(): Boolean = delegateIterator.hasNext()\n\n override fun next(): Value = delegateIterator.next().value\n\n override fun remove() {\n delegateIterator.remove()\n }\n }\n\n override fun remove(element: Value): Boolean {\n var modified = false\n\n with(iterator()) {\n while (hasNext()) {\n if (next() == element) {\n continue\n }\n\n modified = true\n remove()\n }\n }\n\n return modified\n }\n\n override fun removeAll(elements: Collection<Value>): Boolean {\n var modified = false\n\n with(iterator()) {\n while (hasNext()) {\n if (next() !in elements) {\n continue\n }\n\n modified = true\n remove()\n }\n }\n\n return modified\n }\n\n override fun retainAll(elements: Collection<Value>): Boolean {\n error(\"Common concurrent map doesn't support this operation yet.\")\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.utils.io.concurrent.*\n\ninternal class ForwardListIterator<T : Any>(head: ForwardListNode<T>) : MutableIterator<T> {\n var previous by shared<ForwardListNode<T>?>(head)\n val current: ForwardListNode<T>? get() = previous?.next\n\n override fun hasNext(): Boolean = current?.item != null\n\n override fun next(): T {\n previous = current\n return previous?.item ?: throw NoSuchElementException()\n }\n\n override fun remove() {\n previous?.remove() ?: error(\"Fail to remove element before iteration\")\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\n\ninternal class ForwardListNode<T : Any>(\n private val list: SharedForwardList<T>,\n next: ForwardListNode<T>?,\n val item: T?,\n previous: ForwardListNode<T>?\n) {\n var next by shared(next)\n var previous: ForwardListNode<T>? by shared(previous)\n\n init {\n makeShared()\n }\n\n fun insertAfter(value: T): ForwardListNode<T> {\n val result = ForwardListNode(list, next, value, this)\n next = result\n return result\n }\n\n fun removeNext() {\n if (next == list.tail) {\n list.tail = this\n }\n\n next = next?.next\n next?.previous = this\n }\n\n fun remove() {\n previous!!.removeNext()\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\n\ninternal class MapNode<Key, Value>(override val key: Key, value: Value) : MutableMap.MutableEntry<Key, Value> {\n internal var backReference: ForwardListNode<MapNode<Key, Value>>? by shared(null)\n override var value: Value by shared(value)\n\n val hash: Int = key.hashCode()\n\n init {\n makeShared()\n }\n\n override fun setValue(newValue: Value): Value {\n val result = value\n value = newValue\n return result\n }\n\n internal fun remove() {\n backReference!!.remove()\n backReference = null\n }\n\n override fun toString(): String = \"MapItem[$key, $value]\"\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.util.collections.*\nimport io.ktor.utils.io.*\n\ninternal class MutableMapEntries<Key : Any, Value : Any>(\n private val delegate: ConcurrentMap<Key, Value>\n) : MutableSet<MutableMap.MutableEntry<Key, Value>> {\n\n init {\n makeShared()\n }\n\n override fun add(element: MutableMap.MutableEntry<Key, Value>): Boolean =\n delegate.put(element.key, element.value) != element.value\n\n override fun addAll(elements: Collection<MutableMap.MutableEntry<Key, Value>>): Boolean {\n var result = false\n\n elements.forEach {\n result = add(it) || result\n }\n\n return result\n }\n\n override fun clear() {\n delegate.clear()\n }\n\n override fun iterator(): MutableIterator<MutableMap.MutableEntry<Key, Value>> =\n object : MutableIterator<MutableMap.MutableEntry<Key, Value>> {\n private val origin = delegate.iterator()\n override fun hasNext(): Boolean = origin.hasNext()\n\n override fun next(): MutableMap.MutableEntry<Key, Value> = origin.next()\n\n override fun remove(): Unit = origin.remove()\n }\n\n override fun remove(element: MutableMap.MutableEntry<Key, Value>): Boolean =\n delegate.remove(element.key) != null\n\n override fun removeAll(elements: Collection<MutableMap.MutableEntry<Key, Value>>): Boolean {\n var modified = false\n elements.forEach {\n modified = remove(it) || modified\n }\n\n return modified\n }\n\n override fun retainAll(elements: Collection<MutableMap.MutableEntry<Key, Value>>): Boolean {\n var modified = false\n with(iterator()) {\n while (hasNext()) {\n if (next() in elements) {\n continue\n }\n\n modified = true\n remove()\n }\n }\n\n return modified\n }\n\n override val size: Int\n get() = delegate.size\n\n override fun contains(element: MutableMap.MutableEntry<Key, Value>): Boolean =\n delegate[element.key] == element.value\n\n override fun containsAll(elements: Collection<MutableMap.MutableEntry<Key, Value>>): Boolean =\n elements.all { contains(it) }\n\n override fun isEmpty(): Boolean = delegate.isEmpty()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\n\ninternal class SharedForwardList<T : Any> : MutableIterable<T> {\n internal var head: ForwardListNode<T>? by shared(null)\n internal var tail by shared(head)\n\n init {\n makeShared()\n\n head = ForwardListNode(this, null, null, null)\n tail = head\n }\n\n fun first(): ForwardListNode<T>? {\n return head!!.next\n }\n\n fun last(): ForwardListNode<T>? {\n if (head == tail) {\n return null\n }\n\n return tail\n }\n\n fun appendFirst(value: T): ForwardListNode<T> {\n val newValue = head!!.insertAfter(value)\n if (head == tail) {\n tail = newValue\n }\n\n return newValue\n }\n\n fun appendLast(value: T): ForwardListNode<T> {\n tail = tail!!.insertAfter(value)\n return tail!!\n }\n\n override fun iterator(): MutableIterator<T> =\n ForwardListIterator(head!!)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.date\n\nimport kotlin.time.*\n\n/**\n * According to:\n * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html\n */\n\n/**\n * Day of week\n * [value] is 3 letter shortcut\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic enum class WeekDay(public val value: String) {\n MONDAY(\"Mon\"),\n TUESDAY(\"Tue\"),\n WEDNESDAY(\"Wed\"),\n THURSDAY(\"Thu\"),\n FRIDAY(\"Fri\"),\n SATURDAY(\"Sat\"),\n SUNDAY(\"Sun\");\n\n public companion object {\n /**\n * Lookup an instance by [ordinal]\n */\n public fun from(ordinal: Int): WeekDay = values()[ordinal]\n\n /**\n * Lookup an instance by short week day name [WeekDay.value]\n */\n public fun from(value: String): WeekDay = values().find { it.value == value }\n ?: error(\"Invalid day of week: $value\")\n }\n}\n\n/**\n * Month\n * [value] is 3 letter shortcut\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic enum class Month(public val value: String) {\n JANUARY(\"Jan\"),\n FEBRUARY(\"Feb\"),\n MARCH(\"Mar\"),\n APRIL(\"Apr\"),\n MAY(\"May\"),\n JUNE(\"Jun\"),\n JULY(\"Jul\"),\n AUGUST(\"Aug\"),\n SEPTEMBER(\"Sep\"),\n OCTOBER(\"Oct\"),\n NOVEMBER(\"Nov\"),\n DECEMBER(\"Dec\");\n\n public companion object {\n /**\n * Lookup an instance by [ordinal]\n */\n public fun from(ordinal: Int): Month = values()[ordinal]\n /**\n * Lookup an instance by short month name [Month.value]\n */\n public fun from(value: String): Month = values().find { it.value == value }\n ?: error(\"Invalid month: $value\")\n }\n}\n\n/**\n * Date in GMT timezone\n *\n * @property seconds: seconds from 0 to 60(last is for leap second)\n * @property minutes: minutes from 0 to 59\n * @property hours: hours from 0 to 23\n * @property dayOfWeek an instance of the corresponding day of week\n * @property dayOfMonth: day of month from 1 to 31\n * @property dayOfYear: day of year from 1 to 366\n * @property month an instance of the corresponding month\n * @property year: year in common era(CE: https://en.wikipedia.org/wiki/Common_Era)\n *\n * @property timestamp is a number of epoch milliseconds\n */\npublic data class GMTDate internal constructor(\n val seconds: Int,\n val minutes: Int,\n val hours: Int,\n\n val dayOfWeek: WeekDay,\n val dayOfMonth: Int,\n val dayOfYear: Int,\n\n val month: Month,\n val year: Int,\n\n val timestamp: Long\n) : Comparable<GMTDate> {\n\n override fun compareTo(other: GMTDate): Int = timestamp.compareTo(other.timestamp)\n\n public companion object {\n /**\n * An instance of [GMTDate] corresponding to the epoch beginning\n */\n public val START: GMTDate = GMTDate(0)\n }\n}\n\n/**\n * Create new gmt date from the [timestamp].\n * @param timestamp is a number of epoch milliseconds (it is `now` by default).\n */\n@Suppress(\"FunctionName\")\npublic expect fun GMTDate(timestamp: Long? = null): GMTDate\n\n/**\n * Create an instance of [GMTDate] from the specified date/time components\n */\n@Suppress(\"FunctionName\")\npublic expect fun GMTDate(seconds: Int, minutes: Int, hours: Int, dayOfMonth: Int, month: Month, year: Int): GMTDate\n\n/**\n * Adds the specified number of [milliseconds]\n */\npublic operator fun GMTDate.plus(milliseconds: Long): GMTDate = GMTDate(timestamp + milliseconds)\n\n/**\n * Subtracts the specified number of [milliseconds]\n */\npublic operator fun GMTDate.minus(milliseconds: Long): GMTDate = GMTDate(timestamp - milliseconds)\n\n/**\n * Adds the specified [duration]\n */\n@ExperimentalTime\npublic operator fun GMTDate.plus(duration: Duration): GMTDate = GMTDate(timestamp + duration.toLongMilliseconds())\n\n/**\n * Subtracts the specified [duration]\n */\n@ExperimentalTime\npublic operator fun GMTDate.minus(duration: Duration): GMTDate = GMTDate(timestamp - duration.toLongMilliseconds())\n\n/**\n * Truncate to seconds by discarding sub-second part\n */\npublic fun GMTDate.truncateToSeconds(): GMTDate = GMTDate(seconds, minutes, hours, dayOfMonth, month, year)\n\n/**\n * Gets current system time in milliseconds since certain moment in the past, only delta between two subsequent calls makes sense.\n */\npublic expect fun getTimeMillis(): Long\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.collections.internal\n\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.atomicfu.*\n\n@InternalAPI\ninternal class SharedList<T>(override val size: Int) : List<T?> {\n private val data: AtomicArray<T?> = atomicArrayOfNulls<T>(size)\n\n init {\n makeShared()\n }\n\n operator fun set(index: Int, value: T?) {\n data[index].value = value\n }\n\n override fun contains(element: T?): Boolean {\n for (index in 0 until size) {\n if (data[index].value == element) {\n return true\n }\n }\n\n return false\n }\n\n override fun containsAll(elements: Collection<T?>): Boolean = elements.all { contains(it) }\n\n override fun get(index: Int): T? = data[index].value\n\n override fun indexOf(element: T?): Int {\n for (index in 0 until size) {\n if (data[index].value == element) {\n return index\n }\n }\n\n return -1\n }\n\n override fun isEmpty(): Boolean = size == 0\n\n override fun iterator(): Iterator<T?> = listIterator(0)\n\n override fun lastIndexOf(element: T?): Int = asReversed().indexOf(element)\n\n override fun listIterator(): ListIterator<T?> = listIterator(0)\n\n override fun listIterator(index: Int): ListIterator<T?> = object : ListIterator<T?> {\n private val currentIndex = atomic(index)\n\n init {\n makeShared()\n }\n\n override fun hasNext(): Boolean = currentIndex.value < size\n\n override fun hasPrevious(): Boolean = currentIndex.value > 0\n\n override fun next(): T? {\n check(hasNext())\n val current = currentIndex.getAndIncrement()\n return data[current].value\n }\n\n override fun nextIndex(): Int {\n check(hasNext())\n return currentIndex.value + 1\n }\n\n override fun previous(): T? {\n check(hasPrevious())\n val current = currentIndex.getAndDecrement()\n return data[current].value\n }\n\n override fun previousIndex(): Int {\n check(hasPrevious())\n return currentIndex.value - 1\n }\n }\n\n override fun subList(fromIndex: Int, toIndex: Int): List<T?> {\n val result = SharedList<T>(toIndex - fromIndex)\n\n for (index in fromIndex until toIndex) {\n result[index - fromIndex] = data[index].value\n }\n\n return result\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport kotlin.coroutines.*\n\n/**\n * Represents running execution of a pipeline\n * @param context object representing context in which pipeline executes\n * @param interceptors list of interceptors to execute\n * @param subject object representing subject that goes along the pipeline\n */\n@ContextDsl\ninternal class DebugPipelineContext<TSubject : Any, TContext : Any> constructor(\n override val context: TContext,\n private val interceptors: List<PipelineInterceptor<TSubject, TContext>>,\n subject: TSubject,\n override val coroutineContext: CoroutineContext\n) : PipelineContext<TSubject, TContext>,\n @Suppress(\"DEPRECATION\")\n PipelineExecutor<TSubject> {\n\n /**\n * Subject of this pipeline execution\n */\n override var subject: TSubject = subject\n private set\n\n private var index = 0\n\n /**\n * Finishes current pipeline execution\n */\n override fun finish() {\n index = -1\n }\n\n /**\n * Continues execution of the pipeline with the given subject\n */\n override suspend fun proceedWith(subject: TSubject): TSubject {\n this.subject = subject\n return proceed()\n }\n\n /**\n * Continues execution of the pipeline with the same subject\n */\n override suspend fun proceed(): TSubject {\n val index = index\n if (index < 0) return subject\n\n if (index >= interceptors.size) {\n finish()\n return subject\n }\n\n return proceedLoop()\n }\n\n override suspend fun execute(initial: TSubject): TSubject {\n index = 0\n subject = initial\n return proceed()\n }\n\n private suspend fun proceedLoop(): TSubject {\n do {\n val index = index\n if (index == -1) {\n break\n }\n val interceptors = interceptors\n if (index >= interceptors.size) {\n finish()\n break\n }\n val executeInterceptor = interceptors[index]\n this.index = index + 1\n executeInterceptor.invoke(this, subject)\n } while (true)\n\n return subject\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport io.ktor.util.collections.*\nimport io.ktor.utils.io.concurrent.*\n\ninternal class PhaseContent<TSubject : Any, Call : Any>(\n val phase: PipelinePhase,\n val relation: PipelinePhaseRelation,\n interceptors: MutableList<PipelineInterceptor<TSubject, Call>>\n) {\n private var interceptors: MutableList<PipelineInterceptor<TSubject, Call>> by shared(interceptors)\n\n @Suppress(\"UNCHECKED_CAST\")\n constructor(\n phase: PipelinePhase,\n relation: PipelinePhaseRelation\n ) : this(phase, relation, SharedArrayList as MutableList<PipelineInterceptor<TSubject, Call>>) {\n check(SharedArrayList.isEmpty()) { \"The shared empty array list has been modified\" }\n }\n\n var shared: Boolean by shared(true)\n\n val isEmpty: Boolean get() = interceptors.isEmpty()\n val size: Int get() = interceptors.size\n\n fun addInterceptor(interceptor: PipelineInterceptor<TSubject, Call>) {\n if (shared) {\n copyInterceptors()\n }\n\n interceptors.add(interceptor)\n }\n\n fun addTo(destination: MutableList<PipelineInterceptor<TSubject, Call>>) {\n val interceptors = interceptors\n\n if (destination is ArrayList) {\n destination.ensureCapacity(destination.size + interceptors.size)\n }\n\n for (index in 0 until interceptors.size) {\n destination.add(interceptors[index])\n }\n }\n\n fun addTo(destination: PhaseContent<TSubject, Call>) {\n if (isEmpty) return\n\n if (destination.isEmpty) {\n destination.interceptors = sharedInterceptors()\n destination.shared = true\n return\n }\n\n if (destination.shared) {\n destination.copyInterceptors()\n }\n\n addTo(destination.interceptors)\n }\n\n fun sharedInterceptors(): MutableList<PipelineInterceptor<TSubject, Call>> {\n shared = true\n return interceptors\n }\n\n fun copiedInterceptors(): MutableList<PipelineInterceptor<TSubject, Call>> =\n sharedListOf<PipelineInterceptor<TSubject, Call>>().apply {\n addAll(interceptors)\n }\n\n override fun toString(): String = \"Phase `${phase.name}`, $size handlers\"\n\n private fun copyInterceptors() {\n interceptors = copiedInterceptors()\n shared = false\n }\n\n companion object {\n val SharedArrayList: MutableList<Any?> = sharedListOf()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.date\n\nimport io.ktor.util.*\n\n/**\n * Build [GMTDate] parser using [pattern] string.\n *\n * Pattern string format:\n * | Unit | pattern char | Description |\n * | -------- | ------------ | ---------------------------------------------------- |\n * | Seconds | s | parse seconds 0 to 60 |\n * | Minutes | m | parse minutes 0 to 60 |\n * | Hours | h | parse hours 0 to 23 |\n * | Month | M | parse month from Jan to Dec(see [Month] for details) |\n * | Year | Y | parse year |\n * | Any char | * | Match any character |\n */\n@InternalAPI\npublic class GMTDateParser(private val pattern: String) {\n init {\n check(pattern.isNotEmpty()) { \"Date parser pattern shouldn't be empty.\" }\n }\n\n /**\n * Parse [GMTDate] from [dateString] using [pattern].\n */\n public fun parse(dateString: String): GMTDate {\n val builder = GMTDateBuilder()\n\n var start = 0\n var current = pattern[start]\n var chunkStart = 0\n var index = 1\n\n try {\n while (index < pattern.length) {\n if (pattern[index] == current) {\n index++\n continue\n }\n\n val chunkEnd = chunkStart + index - start\n builder.handleToken(current, dateString.substring(chunkStart, chunkEnd))\n\n chunkStart = chunkEnd\n start = index\n current = pattern[index]\n\n index++\n }\n\n if (chunkStart < dateString.length) {\n builder.handleToken(current, dateString.substring(chunkStart))\n }\n } catch (_: Throwable) {\n throw InvalidDateStringException(dateString, chunkStart, pattern)\n }\n\n return builder.build()\n }\n\n private fun GMTDateBuilder.handleToken(\n type: Char,\n chunk: String\n ): Unit = when (type) {\n SECONDS -> {\n seconds = chunk.toInt()\n }\n MINUTES -> {\n minutes = chunk.toInt()\n }\n HOURS -> {\n hours = chunk.toInt()\n }\n DAY_OF_MONTH -> {\n dayOfMonth = chunk.toInt()\n }\n MONTH -> {\n month = Month.from(chunk)\n }\n YEAR -> {\n year = chunk.toInt()\n }\n ZONE ->\n check(chunk == \"GMT\")\n ANY -> Unit\n else -> {\n check(chunk.all { it == type })\n }\n }\n\n public companion object {\n public const val SECONDS: Char = 's'\n public const val MINUTES: Char = 'm'\n public const val HOURS: Char = 'h'\n\n public const val DAY_OF_MONTH: Char = 'd'\n public const val MONTH: Char = 'M'\n public const val YEAR: Char = 'Y'\n\n public const val ZONE: Char = 'z'\n\n public const val ANY: Char = '*'\n }\n}\n\ninternal class GMTDateBuilder {\n var seconds: Int? = null\n var minutes: Int? = null\n var hours: Int? = null\n\n var dayOfMonth: Int? = null\n lateinit var month: Month\n var year: Int? = null\n\n public fun build(): GMTDate = GMTDate(seconds!!, minutes!!, hours!!, dayOfMonth!!, month, year!!)\n}\n\n/**\n * Thrown when the date string doesn't the string pattern.\n */\npublic class InvalidDateStringException(\n data: String,\n at: Int,\n pattern: String\n) : IllegalStateException(\"Failed to parse date string: \\\"${data}\\\" at index $at. Pattern: \\\"$pattern\\\"\")\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport io.ktor.util.*\nimport io.ktor.util.collections.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.atomicfu.*\nimport kotlin.coroutines.*\n\n/**\n * Represents an execution pipeline for asynchronous extensible computations\n */\npublic open class Pipeline<TSubject : Any, TContext : Any>(\n vararg phases: PipelinePhase\n) {\n /**\n * Provides common place to store pipeline attributes\n */\n public val attributes: Attributes = Attributes(concurrent = true)\n\n /**\n * Indicated if debug mode is enabled. In debug mode users will get more details in the stacktrace.\n */\n public open val developmentMode: Boolean = false\n\n private val phasesRaw: MutableList<Any> = sharedListOf(*phases)\n\n private var interceptorsQuantity by shared(0)\n\n /**\n * Phases of this pipeline\n */\n public val items: List<PipelinePhase>\n get() = phasesRaw.map {\n it as? PipelinePhase ?: (it as? PhaseContent<*, *>)?.phase!!\n }\n\n /**\n * @return `true` if there are no interceptors installed regardless number of phases\n */\n @InternalAPI\n public val isEmpty: Boolean\n get() = interceptorsQuantity == 0\n\n private val _interceptors: AtomicRef<List<suspend PipelineContext<TSubject, TContext>.(TSubject) -> Unit>?> =\n atomic(null)\n\n private var interceptors: List<PipelineInterceptor<TSubject, TContext>>?\n get() = _interceptors.value\n set(value) {\n _interceptors.value = value\n }\n\n /**\n * share between pipelines/contexts\n */\n private var interceptorsListShared: Boolean by shared(false)\n\n /**\n * interceptors list is shared with pipeline phase content\n */\n private var interceptorsListSharedPhase: PipelinePhase? by shared(null)\n\n public constructor(\n phase: PipelinePhase,\n interceptors: List<PipelineInterceptor<TSubject, TContext>>\n ) : this(phase) {\n interceptors.forEach { intercept(phase, it) }\n }\n\n /**\n * Executes this pipeline in the given [context] and with the given [subject]\n */\n public suspend fun execute(context: TContext, subject: TSubject): TSubject =\n createContext(context, subject, coroutineContext).execute(subject)\n\n /**\n * Adds [phase] to the end of this pipeline\n */\n public fun addPhase(phase: PipelinePhase) {\n if (hasPhase(phase)) {\n return\n }\n\n phasesRaw.add(phase)\n }\n\n /**\n * Inserts [phase] after the [reference] phase\n */\n public fun insertPhaseAfter(reference: PipelinePhase, phase: PipelinePhase) {\n if (hasPhase(phase)) return\n\n val index = findPhaseIndex(reference)\n if (index == -1) {\n throw InvalidPhaseException(\"Phase $reference was not registered for this pipeline\")\n }\n\n phasesRaw.add(index + 1, PhaseContent<TSubject, TContext>(phase, PipelinePhaseRelation.After(reference)))\n }\n\n /**\n * Inserts [phase] before the [reference] phase\n */\n public fun insertPhaseBefore(reference: PipelinePhase, phase: PipelinePhase) {\n if (hasPhase(phase)) return\n\n val index = findPhaseIndex(reference)\n if (index == -1) {\n throw InvalidPhaseException(\"Phase $reference was not registered for this pipeline\")\n }\n\n phasesRaw.add(index, PhaseContent<TSubject, TContext>(phase, PipelinePhaseRelation.Before(reference)))\n }\n\n /**\n * Adds [block] to the [phase] of this pipeline\n */\n public fun intercept(phase: PipelinePhase, block: PipelineInterceptor<TSubject, TContext>) {\n val phaseContent = findPhase(phase)\n ?: throw InvalidPhaseException(\"Phase $phase was not registered for this pipeline\")\n\n if (tryAddToPhaseFastPath(phase, block)) {\n interceptorsQuantity++\n return\n }\n\n phaseContent.addInterceptor(block)\n interceptorsQuantity++\n resetInterceptorsList()\n\n afterIntercepted()\n }\n\n /**\n * Invoked after an interceptor has been installed\n */\n public open fun afterIntercepted() {\n }\n\n /**\n * Merges another pipeline into this pipeline, maintaining relative phases order\n */\n public fun merge(from: Pipeline<TSubject, TContext>) {\n if (fastPathMerge(from)) {\n return\n }\n\n if (interceptorsQuantity == 0) {\n setInterceptorsListFromAnotherPipeline(from)\n } else {\n resetInterceptorsList()\n }\n\n val fromPhases = from.phasesRaw\n for (index in 0..fromPhases.lastIndex) {\n val fromPhaseOrContent = fromPhases[index]\n\n val fromPhase =\n (fromPhaseOrContent as? PipelinePhase) ?: (fromPhaseOrContent as PhaseContent<*, *>).phase\n\n if (!hasPhase(fromPhase)) {\n val fromPhaseRelation = when {\n fromPhaseOrContent === fromPhase -> PipelinePhaseRelation.Last\n else -> (fromPhaseOrContent as PhaseContent<*, *>).relation\n }\n\n when (fromPhaseRelation) {\n is PipelinePhaseRelation.Last -> addPhase(fromPhase)\n is PipelinePhaseRelation.Before -> insertPhaseBefore(\n fromPhaseRelation.relativeTo,\n fromPhase\n )\n is PipelinePhaseRelation.After -> insertPhaseAfter(\n fromPhaseRelation.relativeTo,\n fromPhase\n )\n }\n }\n\n if (fromPhaseOrContent is PhaseContent<*, *> && !fromPhaseOrContent.isEmpty) {\n @Suppress(\"UNCHECKED_CAST\")\n fromPhaseOrContent as PhaseContent<TSubject, TContext>\n\n fromPhaseOrContent.addTo(findPhase(fromPhase)!!)\n interceptorsQuantity += fromPhaseOrContent.size\n }\n }\n }\n\n internal fun phaseInterceptors(phase: PipelinePhase): List<PipelineInterceptor<TSubject, TContext>> =\n findPhase(phase)?.sharedInterceptors() ?: emptyList()\n\n /**\n * For tests only\n */\n internal fun interceptorsForTests(): List<PipelineInterceptor<TSubject, TContext>> {\n return interceptors ?: cacheInterceptors()\n }\n\n @Suppress(\"DEPRECATION\")\n private fun createContext(\n context: TContext,\n subject: TSubject,\n coroutineContext: CoroutineContext\n ): PipelineExecutor<TSubject> =\n pipelineExecutorFor(context, sharedInterceptorsList(), subject, coroutineContext, developmentMode)\n\n private fun findPhase(phase: PipelinePhase): PhaseContent<TSubject, TContext>? {\n val phasesList = phasesRaw\n\n for (index in 0 until phasesList.size) {\n val current = phasesList[index]\n if (current === phase) {\n val content = PhaseContent<TSubject, TContext>(phase, PipelinePhaseRelation.Last)\n phasesList[index] = content\n return content\n }\n\n if (current is PhaseContent<*, *> && current.phase === phase) {\n @Suppress(\"UNCHECKED_CAST\")\n return current as PhaseContent<TSubject, TContext>\n }\n }\n\n return null\n }\n\n private fun findPhaseIndex(phase: PipelinePhase): Int {\n val phasesList = phasesRaw\n for (index in 0 until phasesList.size) {\n val current = phasesList[index]\n if (current === phase || (current is PhaseContent<*, *> && current.phase === phase)) {\n return index\n }\n }\n\n return -1\n }\n\n private fun hasPhase(phase: PipelinePhase): Boolean {\n val phasesList = phasesRaw\n for (index in 0 until phasesList.size) {\n val current = phasesList[index]\n if (current === phase || (current is PhaseContent<*, *> && current.phase === phase)) {\n return true\n }\n }\n\n return false\n }\n\n private fun cacheInterceptors(): List<PipelineInterceptor<TSubject, TContext>> {\n val interceptorsQuantity = interceptorsQuantity\n if (interceptorsQuantity == 0) {\n notSharedInterceptorsList(emptyList())\n return emptyList()\n }\n\n val phases = phasesRaw\n if (interceptorsQuantity == 1) {\n for (phaseIndex in 0..phases.lastIndex) {\n @Suppress(\"UNCHECKED_CAST\")\n val phaseContent =\n phases[phaseIndex] as? PhaseContent<TSubject, TContext> ?: continue\n\n if (!phaseContent.isEmpty) {\n val interceptors = phaseContent.sharedInterceptors()\n setInterceptorsListFromPhase(phaseContent)\n return interceptors\n }\n }\n }\n\n val destination: MutableList<suspend PipelineContext<TSubject, TContext>.(TSubject) -> Unit> = sharedListOf()\n for (phaseIndex in 0..phases.lastIndex) {\n @Suppress(\"UNCHECKED_CAST\")\n val phase = phases[phaseIndex] as? PhaseContent<TSubject, TContext>\n ?: continue\n\n phase.addTo(destination)\n }\n\n notSharedInterceptorsList(destination)\n return destination\n }\n\n private fun fastPathMerge(from: Pipeline<TSubject, TContext>): Boolean {\n if (from.phasesRaw.isEmpty()) {\n return true\n }\n\n if (phasesRaw.isNotEmpty()) {\n return false\n }\n\n val fromPhases = from.phasesRaw\n\n for (index in 0..fromPhases.lastIndex) {\n val fromPhaseOrContent = fromPhases[index]\n if (fromPhaseOrContent is PipelinePhase) {\n phasesRaw.add(fromPhaseOrContent)\n continue\n }\n\n if (fromPhaseOrContent is PhaseContent<*, *>) {\n @Suppress(\"UNCHECKED_CAST\")\n fromPhaseOrContent as PhaseContent<TSubject, TContext>\n\n phasesRaw.add(\n PhaseContent(\n fromPhaseOrContent.phase,\n fromPhaseOrContent.relation,\n fromPhaseOrContent.sharedInterceptors()\n )\n )\n continue\n }\n }\n\n interceptorsQuantity += from.interceptorsQuantity\n setInterceptorsListFromAnotherPipeline(from)\n return true\n }\n\n private fun sharedInterceptorsList(): List<PipelineInterceptor<TSubject, TContext>> {\n if (interceptors == null) {\n cacheInterceptors()\n }\n\n interceptorsListShared = true\n return interceptors!!\n }\n\n private fun resetInterceptorsList() {\n interceptors = null\n interceptorsListShared = false\n interceptorsListSharedPhase = null\n }\n\n private fun notSharedInterceptorsList(list: List<PipelineInterceptor<TSubject, TContext>>) {\n interceptors = list\n interceptorsListShared = false\n interceptorsListSharedPhase = null\n }\n\n private fun setInterceptorsListFromPhase(phaseContent: PhaseContent<TSubject, TContext>) {\n interceptors = phaseContent.sharedInterceptors()\n interceptorsListShared = false\n interceptorsListSharedPhase = phaseContent.phase\n }\n\n private fun setInterceptorsListFromAnotherPipeline(pipeline: Pipeline<TSubject, TContext>) {\n interceptors = pipeline.sharedInterceptorsList()\n interceptorsListShared = true\n interceptorsListSharedPhase = null\n }\n\n private fun tryAddToPhaseFastPath(phase: PipelinePhase, block: PipelineInterceptor<TSubject, TContext>): Boolean {\n val currentInterceptors = interceptors\n if (phasesRaw.isEmpty() || currentInterceptors == null) {\n return false\n }\n\n if (interceptorsListShared || currentInterceptors !is MutableList) {\n return false\n }\n\n if (interceptorsListSharedPhase == phase) {\n currentInterceptors.add(block)\n return true\n }\n\n if (phase == phasesRaw.last() || findPhaseIndex(phase) == phasesRaw.lastIndex) {\n findPhase(phase)!!.addInterceptor(block)\n currentInterceptors.add(block)\n return true\n }\n\n return false\n }\n}\n\n/**\n * Executes this pipeline\n */\n@Suppress(\"NOTHING_TO_INLINE\")\npublic suspend inline fun <TContext : Any> Pipeline<Unit, TContext>.execute(\n context: TContext\n): Unit = execute(context, Unit)\n\n/**\n * Intercepts an untyped pipeline when the subject is of the given type\n */\npublic inline fun <reified TSubject : Any, TContext : Any> Pipeline<*, TContext>.intercept(\n phase: PipelinePhase,\n noinline block: suspend PipelineContext<TSubject, TContext>.(TSubject) -> Unit\n) {\n intercept(phase) interceptor@{ subject ->\n if (subject !is TSubject) return@interceptor\n\n @Suppress(\"UNCHECKED_CAST\")\n val reinterpret = this as? PipelineContext<TSubject, TContext>\n reinterpret?.block(subject)\n }\n}\n\n/**\n * Represents an interceptor type which is a suspend extension function for context\n */\npublic typealias PipelineInterceptor<TSubject, TContext> =\n suspend PipelineContext<TSubject, TContext>.(TSubject) -> Unit\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport kotlinx.coroutines.internal.*\nimport kotlin.coroutines.*\n\n/**\n * Recreates the exception with the original cause to keep exception structure.\n *\n * Notice: This method breaks the [exception] identity.\n */\ninternal fun recoverStackTraceBridge(exception: Throwable, continuation: Continuation<*>): Throwable = try {\n @Suppress(\"INVISIBLE_MEMBER\")\n recoverStackTrace(exception, continuation).withCause(exception.cause)\n} catch (_: Throwable) {\n exception\n}\n\ninternal expect fun Throwable.withCause(cause: Throwable?): Throwable\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\n/**\n * Represents relations between pipeline phases\n */\ninternal sealed class PipelinePhaseRelation {\n /**\n * Given phase should be executed after [relativeTo] phase\n * @property relativeTo represents phases for relative positioning\n */\n class After(val relativeTo: PipelinePhase) : PipelinePhaseRelation()\n\n /**\n * Given phase should be executed before [relativeTo] phase\n * @property relativeTo represents phases for relative positioning\n */\n class Before(val relativeTo: PipelinePhase) : PipelinePhaseRelation()\n\n /**\n * Given phase should be executed last\n */\n object Last : PipelinePhaseRelation()\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\ninternal object StackWalkingFailed {\n public fun failedToCaptureStackFrame() {\n error(\n \"Failed to capture stack frame. This is usually happens when a coroutine is running so\" +\n \" the frame stack is changing quickly \" +\n \"and the coroutine debug agent is unable to capture it concurrently.\" +\n \" You may retry running your test to see this particular trace.\"\n )\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport io.ktor.util.*\nimport kotlin.coroutines.*\n\n/**\n * This is a fake coroutine stack frame. It is reported by [SuspendFunctionGun] when the debug agent\n * is trying to probe jobs state by peeking frames when the coroutine is running at the same time\n * and the frames sequence is concurrently changed.\n */\ninternal object StackWalkingFailedFrame : CoroutineStackFrame, Continuation<Nothing> {\n override val callerFrame: CoroutineStackFrame? get() = null\n\n override fun getStackTraceElement(): StackTraceElement? {\n return createStackTraceElement(\n StackWalkingFailed::class,\n StackWalkingFailed::failedToCaptureStackFrame.name,\n \"StackWalkingFailed.kt\",\n 8\n )\n }\n\n override val context: CoroutineContext\n get() = EmptyCoroutineContext\n\n override fun resumeWith(result: Result<Nothing>) {\n StackWalkingFailed.failedToCaptureStackFrame()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport kotlin.coroutines.*\nimport kotlin.coroutines.intrinsics.*\n\n@InternalAPI\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal actual inline fun <R, A> (suspend R.(A) -> Unit).startCoroutineUninterceptedOrReturn3(\n receiver: R,\n arg: A,\n continuation: Continuation<Unit>\n): Any? {\n val block: suspend () -> Unit = { this(receiver, arg) }\n return block.startCoroutineUninterceptedOrReturn(continuation)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.pipeline\n\nimport io.ktor.util.*\nimport io.ktor.util.CoroutineStackFrame\nimport io.ktor.util.StackTraceElement\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\nimport kotlin.coroutines.intrinsics.*\n\ninternal class SuspendFunctionGun<TSubject : Any, TContext : Any>(\n initial: TSubject,\n override val context: TContext,\n private val blocks: List<PipelineInterceptor<TSubject, TContext>>\n) : PipelineContext<TSubject, TContext>,\n @Suppress(\"DEPRECATION\")\n PipelineExecutor<TSubject>,\n CoroutineScope {\n\n override val coroutineContext: CoroutineContext get() = continuation.context\n\n // Stack-walking state\n private var lastPeekedIndex: Int = -1\n\n // this is impossible to inline because of property name clash\n // between PipelineContext.context and Continuation.context\n private val continuation: Continuation<Unit> = object : Continuation<Unit>, CoroutineStackFrame {\n override val callerFrame: CoroutineStackFrame? get() = peekContinuation() as? CoroutineStackFrame\n\n override fun getStackTraceElement(): StackTraceElement? = null\n\n private fun peekContinuation(): Continuation<*>? {\n if (lastPeekedIndex < 0) return null\n\n when (val rootContinuation = rootContinuation) {\n null -> return null\n is Continuation<*> -> {\n --lastPeekedIndex\n return rootContinuation\n }\n is ArrayList<*> -> {\n if (rootContinuation.isEmpty()) {\n // If the list is empty, then lastPeekedIndex should be -1\n // and null should be already returned at the beginning of the function.\n // So if we are here and see that the list is empty but lastPeekedIndex wasn't -1,\n // then it means that element(s) has disappeared concurrently.\n return StackWalkingFailedFrame\n }\n @Suppress(\"UNCHECKED_CAST\")\n return peekContinuationFromList(rootContinuation as List<Continuation<*>>)\n }\n else -> return null\n }\n }\n\n private fun peekContinuationFromList(list: List<Continuation<*>>): Continuation<*>? {\n // this is only invoked by debug agent during job state probes\n // lastPeekedIndex is non-volatile intentionally\n // and the list of continuations is not synchronized too\n // so this is not guaranteed to work properly (may produce incorrect trace),\n // but the only we care is to not crash here\n // and simply return StackWalkingFailedFrame on any unfortunate accident\n\n try {\n val index = lastPeekedIndex\n val result = list.getOrNull(index) ?: return StackWalkingFailedFrame\n lastPeekedIndex = index - 1\n return result\n } catch (_: Throwable) {\n return StackWalkingFailedFrame\n }\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n override val context: CoroutineContext\n get() = when (val cont = rootContinuation) {\n null -> throw IllegalStateException(\"Not started\")\n is Continuation<*> -> cont.context\n is List<*> -> (cont as List<Continuation<*>>).last().context\n else -> throw IllegalStateException(\"Unexpected rootContinuation value\")\n }\n\n override fun resumeWith(result: Result<Unit>) {\n if (result.isFailure) {\n resumeRootWith(Result.failure(result.exceptionOrNull()!!))\n return\n }\n\n loop(false)\n }\n }\n\n override var subject: TSubject = initial\n private set\n\n private var rootContinuation: Any? = null\n private var index = 0\n\n init {\n preventFreeze()\n }\n\n override fun finish() {\n index = blocks.size\n }\n\n override suspend fun proceed(): TSubject = suspendCoroutineUninterceptedOrReturn { continuation ->\n if (index == blocks.size) return@suspendCoroutineUninterceptedOrReturn subject\n\n addContinuation(continuation)\n\n if (loop(true)) {\n discardLastRootContinuation()\n return@suspendCoroutineUninterceptedOrReturn subject\n }\n\n COROUTINE_SUSPENDED\n }\n\n override suspend fun proceedWith(subject: TSubject): TSubject {\n this.subject = subject\n return proceed()\n }\n\n override suspend fun execute(initial: TSubject): TSubject {\n index = 0\n if (index == blocks.size) return initial\n subject = initial\n\n if (rootContinuation != null) throw IllegalStateException(\"Already started\")\n\n return proceed()\n }\n\n /**\n * @return `true` if it is possible to return result immediately\n */\n private fun loop(direct: Boolean): Boolean {\n do {\n val index = index // it is important to read index every time\n if (index == blocks.size) {\n if (!direct) {\n resumeRootWith(Result.success(subject))\n return false\n }\n\n return true\n }\n\n this@SuspendFunctionGun.index = index + 1 // it is important to increase it before function invocation\n val next = blocks[index]\n\n try {\n val me = this@SuspendFunctionGun\n\n val rc = next.startCoroutineUninterceptedOrReturn3(me, me.subject, me.continuation)\n if (rc === COROUTINE_SUSPENDED) {\n return false\n }\n } catch (cause: Throwable) {\n resumeRootWith(Result.failure(cause))\n return false\n }\n } while (true)\n }\n\n private fun resumeRootWith(result: Result<TSubject>) {\n val rootContinuation = rootContinuation\n\n @Suppress(\"UNCHECKED_CAST\")\n val next = when (rootContinuation) {\n null -> throw IllegalStateException(\"No more continuations to resume\")\n is Continuation<*> -> {\n this.rootContinuation = null\n lastPeekedIndex = -1\n rootContinuation\n }\n is ArrayList<*> -> {\n if (rootContinuation.isEmpty()) throw IllegalStateException(\"No more continuations to resume\")\n lastPeekedIndex = rootContinuation.lastIndex - 1\n rootContinuation.removeAt(rootContinuation.lastIndex)\n }\n else -> unexpectedRootContinuationValue(rootContinuation)\n } as Continuation<TSubject>\n\n if (!result.isFailure) {\n next.resumeWith(result)\n } else {\n val exception = recoverStackTraceBridge(result.exceptionOrNull()!!, next)\n next.resumeWithException(exception)\n }\n }\n\n private fun discardLastRootContinuation() {\n val rootContinuation = rootContinuation\n\n @Suppress(\"UNCHECKED_CAST\")\n when (rootContinuation) {\n null -> throw IllegalStateException(\"No more continuations to resume\")\n is Continuation<*> -> {\n lastPeekedIndex = -1\n this.rootContinuation = null\n }\n is ArrayList<*> -> {\n if (rootContinuation.isEmpty()) throw IllegalStateException(\"No more continuations to resume\")\n rootContinuation.removeAt(rootContinuation.lastIndex)\n lastPeekedIndex = rootContinuation.lastIndex\n }\n else -> unexpectedRootContinuationValue(rootContinuation)\n }\n }\n\n private fun addContinuation(continuation: Continuation<TSubject>) {\n when (val rootContinuation = rootContinuation) {\n null -> {\n lastPeekedIndex = 0\n this.rootContinuation = continuation\n }\n is Continuation<*> -> {\n this.rootContinuation = ArrayList<Continuation<*>>(blocks.size).apply {\n add(rootContinuation)\n add(continuation)\n lastPeekedIndex = 1\n }\n }\n is ArrayList<*> -> {\n @Suppress(\"UNCHECKED_CAST\")\n rootContinuation as ArrayList<Continuation<TSubject>>\n rootContinuation.add(continuation)\n lastPeekedIndex = rootContinuation.lastIndex\n }\n else -> unexpectedRootContinuationValue(rootContinuation)\n }\n }\n\n private fun unexpectedRootContinuationValue(rootContinuation: Any?): Nothing {\n throw IllegalStateException(\"Unexpected rootContinuation content: $rootContinuation\")\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\n/**\n * Create ES specific [Attributes] instance.\n */\n@JsName(\"AttributesJsFn\")\npublic actual fun Attributes(concurrent: Boolean): Attributes = AttributesJs()\n\n@Suppress(\"KDocMissingDocumentation\")\npublic class AttributesJs : Attributes {\n private val map = mutableMapOf<AttributeKey<*>, Any?>()\n\n @Suppress(\"UNCHECKED_CAST\")\n override fun <T : Any> getOrNull(key: AttributeKey<T>): T? = map[key] as T?\n\n override operator fun contains(key: AttributeKey<*>): Boolean = map.containsKey(key)\n\n override fun <T : Any> put(key: AttributeKey<T>, value: T) {\n map[key] = value\n }\n\n override fun <T : Any> remove(key: AttributeKey<T>) {\n map.remove(key)\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n override fun <T : Any> computeIfAbsent(key: AttributeKey<T>, block: () -> T): T {\n map[key]?.let { return it as T }\n return block().also { result ->\n map[key] = result\n }\n }\n\n override val allKeys: List<AttributeKey<*>>\n get() = map.keys.toList()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\npublic actual fun <T> Set<T>.unmodifiable(): Set<T> = this\n","// ktlint-disable filename\n/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\npublic actual object PlatformUtils {\n public actual val IS_BROWSER: Boolean = js(\n \"typeof window !== 'undefined' && typeof window.document !== 'undefined'\"\n ) as Boolean\n\n public actual val IS_NODE: Boolean = js(\n \"typeof process !== 'undefined' && process.versions != null && process.versions.node != null\"\n ) as Boolean\n\n public actual val IS_JVM: Boolean = false\n public actual val IS_NATIVE: Boolean = false\n public actual val IS_DEVELOPMENT_MODE: Boolean = false\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport kotlin.reflect.*\n\n@Suppress(\"UNUSED\")\ninternal actual interface CoroutineStackFrame {\n public actual val callerFrame: CoroutineStackFrame?\n public actual fun getStackTraceElement(): StackTraceElement?\n}\n\n@Suppress(\"ACTUAL_WITHOUT_EXPECT\")\ninternal actual typealias StackTraceElement = Any\n\n@Suppress(\"FunctionName\")\ninternal actual fun createStackTraceElement(\n kClass: KClass<*>,\n methodName: String,\n fileName: String,\n lineNumber: Int\n): StackTraceElement = Any()\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.date\n\nimport kotlin.js.*\n\npublic actual fun GMTDate(timestamp: Long?): GMTDate {\n val date = timestamp?.toDouble()?.let { Date(it) } ?: Date()\n\n if (date.getTime().isNaN()) throw InvalidTimestampException(timestamp!!)\n\n with(date) {\n /* from SUNDAY 0 -> MONDAY 0 */\n val dayOfWeek = WeekDay.from((getUTCDay() + 6) % 7)\n\n val month = Month.from(getUTCMonth())\n\n return GMTDate(\n getUTCSeconds(),\n getUTCMinutes(),\n getUTCHours(),\n\n dayOfWeek,\n getUTCDate(),\n getUTCFullYear(),\n\n month,\n getUTCFullYear(),\n\n getTime().toLong()\n )\n }\n}\n\npublic actual fun GMTDate(seconds: Int, minutes: Int, hours: Int, dayOfMonth: Int, month: Month, year: Int): GMTDate {\n val timestamp = Date.UTC(year, month.ordinal, dayOfMonth, hours, minutes, seconds).toLong()\n return GMTDate(timestamp)\n}\n\n/**\n * Invalid exception: possible overflow or underflow\n */\npublic class InvalidTimestampException(timestamp: Long) : IllegalStateException(\n \"Invalid date timestamp exception: $timestamp\"\n)\n\n/**\n * Gets current system time in milliseconds since certain moment in the past, only delta between two subsequent calls makes sense.\n */\npublic actual fun getTimeMillis(): Long = Date().getTime().toLong()\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util.network\n\n/**\n * Represents remote endpoint with [hostname] and [port].\n *\n * The address will be resolved after construction.\n *\n * @throws UnresolvedAddressException if the [hostname] cannot be resolved.\n */\npublic actual class NetworkAddress internal constructor(\n internal val hostname: String,\n internal val port: Int,\n internal val address: String\n)\n\n/**\n * Network address hostname.\n */\npublic actual val NetworkAddress.hostname: String\n get() = hostname\n\n/**\n * Network address port.\n */\npublic actual val NetworkAddress.port: Int\n get() = port\n\n/**\n * Represents remote endpoint with [hostname] and [port].\n *\n * The address will be resolved after construction.\n *\n * @throws UnresolvedAddressException if the [hostname] cannot be resolved.\n */\npublic actual fun NetworkAddress(hostname: String, port: Int): NetworkAddress =\n NetworkAddress(hostname, port, hostname)\n\npublic actual class UnresolvedAddressException : IllegalArgumentException()\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.util\n\nimport kotlinx.coroutines.*\nimport org.khronos.webgl.*\nimport kotlin.js.*\n\nprivate const val NONCE_SIZE_IN_BYTES = 8\n\n/**\n * Generates a nonce string.\n */\n@InternalAPI\npublic actual fun generateNonce(): String {\n val buffer = ByteArray(NONCE_SIZE_IN_BYTES)\n if (PlatformUtils.IS_NODE) {\n _crypto.randomFillSync(buffer)\n } else {\n _crypto.getRandomValues(buffer)\n }\n return hex(buffer)\n}\n\n/**\n * Create [Digest] from specified hash [name].\n */\n@InternalAPI\npublic actual fun Digest(name: String): Digest = object : Digest {\n private val state = mutableListOf<ByteArray>()\n override fun plusAssign(bytes: ByteArray) {\n state += bytes\n }\n\n override fun reset() {\n state.clear()\n }\n\n override suspend fun build(): ByteArray {\n val snapshot = state.reduce { a, b -> a + b }\n val digestBuffer = _crypto.subtle.digest(name, snapshot).asDeferred().await()\n val digestView = DataView(digestBuffer)\n return ByteArray(digestView.byteLength) { digestView.getUint8(it) }\n }\n}\n\n// Variable is renamed to `_crypto` so it wouldn't clash with existing `crypto` variable.\n// JS IR backend doesn't reserve names accessed inside js(\"\") calls\nprivate val _crypto: Crypto = if (PlatformUtils.IS_NODE) js(\"require('crypto')\") else js(\"(crypto ? crypto : msCrypto)\")\n\nprivate external class Crypto {\n val subtle: SubtleCrypto\n\n public fun getRandomValues(array: ByteArray)\n\n public fun randomFillSync(array: ByteArray)\n}\n\nprivate external class SubtleCrypto {\n public fun digest(algoName: String, buffer: ByteArray): Promise<ArrayBuffer>\n}\n\n/**\n * Compute SHA-1 hash for the specified [bytes]\n */\npublic actual fun sha1(bytes: ByteArray): ByteArray = error(\"sha1 currently is not supported in ktor-js\")\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\ndata class DownloadRecord(\n var id: Long = 0,\n var type: String,\n var name: String,\n var link: String,\n var coverUrl: String,\n var totalFiles: Long = 1,\n)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nsealed class AllPlatforms {\n object Js : AllPlatforms()\n object Jvm : AllPlatforms()\n object Native : AllPlatforms()\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nsealed class CorsProxy(open val url: String) {\n data class SelfHostedCorsProxy(override val url: String = \"https://spotiflyer.azurewebsites.net/\") : CorsProxy(url)\n data class PublicProxyWithExtension(override val url: String = \"https://cors.bridged.cc/\") : CorsProxy(url)\n\n fun toggle(mode: CorsProxy? = null): CorsProxy {\n mode?.let {\n corsProxy = mode\n return corsProxy\n }\n corsProxy = when (corsProxy) {\n is SelfHostedCorsProxy -> PublicProxyWithExtension()\n is PublicProxyWithExtension -> SelfHostedCorsProxy()\n }\n return corsProxy\n }\n\n fun extensionMode(): Boolean {\n return when (corsProxy) {\n is SelfHostedCorsProxy -> false\n is PublicProxyWithExtension -> true\n }\n }\n}\n\n/*\n* This Var Keeps Track for Cors Config in JS Platform\n* Default Self Hosted, However ask user to use extension if possible.\n* */\nvar corsProxy: CorsProxy = CorsProxy.SelfHostedCorsProxy()\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nimport com.shabinder.common.models.spotify.Source\nimport dev.icerock.moko.parcelize.Parcelable\nimport dev.icerock.moko.parcelize.Parcelize\nimport kotlinx.serialization.Serializable\n\n@Parcelize\n@Serializable\ndata class TrackDetails(\n var title: String,\n var artists: List<String>,\n var durationSec: Int,\n var albumName: String? = null,\n var year: String? = null,\n var comment: String? = null,\n var lyrics: String? = null,\n var trackUrl: String? = null,\n var albumArtPath: String,\n var albumArtURL: String,\n var source: Source,\n val progress: Int = 2,\n val downloaded: DownloadStatus = DownloadStatus.NotDownloaded,\n var outputFilePath: String,\n var videoID: String? = null,\n) : Parcelable\n\n@Serializable\nsealed class DownloadStatus : Parcelable {\n @Parcelize object Downloaded : DownloadStatus()\n @Parcelize data class Downloading(val progress: Int = 2) : DownloadStatus()\n @Parcelize object Queued : DownloadStatus()\n @Parcelize object NotDownloaded : DownloadStatus()\n @Parcelize object Converting : DownloadStatus()\n @Parcelize object Failed : DownloadStatus()\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nsealed class DownloadResult {\n\n data class Error(val message: String, val cause: Exception? = null) : DownloadResult()\n\n data class Progress(val progress: Int) : DownloadResult()\n\n data class Success(val byteArray: ByteArray) : DownloadResult() {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (other == null || this::class != other::class) return false\n\n other as Success\n\n if (!byteArray.contentEquals(other.byteArray)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return byteArray.contentHashCode()\n }\n }\n}\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nimport com.shabinder.common.models.spotify.Source\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class PlatformQueryResult(\n var folderType: String,\n var subFolder: String,\n var title: String,\n var coverUrl: String,\n var trackList: List<TrackDetails>,\n var source: Source\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class YoutubeTrack(\n var name: String? = null,\n var type: String? = null, // Song / Video\n var artist: String? = null,\n var duration: String? = null,\n var videoId: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Artist(\n val popularity: Int,\n val seokey: String,\n val name: String,\n @SerialName(\"artwork_175x175\")var artworkLink: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class CustomArtworks(\n @SerialName(\"40x40\") val size_40p: String,\n @SerialName(\"80x80\") val size_80p: String,\n @SerialName(\"110x110\")val size_110p: String,\n @SerialName(\"175x175\")val size_175p: String,\n @SerialName(\"480x480\")val size_480p: String,\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaAlbum(\n val tracks: List<GaanaTrack>,\n val count: Int,\n val custom_artworks: CustomArtworks,\n val release_year: Int,\n val favorite_count: Int,\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaArtistDetails(\n val artist: List<Artist>,\n val count: Int,\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaArtistTracks(\n val count: Int,\n val tracks: List<GaanaTrack>? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaPlaylist(\n val modified_on: String,\n val count: Int,\n val created_on: String,\n val favorite_count: Int,\n val tracks: List<GaanaTrack>,\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaSong(\n val tracks: List<GaanaTrack>\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport com.shabinder.common.models.DownloadStatus\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class GaanaTrack(\n val tags: List<Tags?>? = null,\n val seokey: String,\n val albumseokey: String? = null,\n val track_title: String,\n val album_title: String? = null,\n val language: String? = null,\n val duration: Int,\n @SerialName(\"artwork_large\") val artworkLink: String,\n val artist: List<Artist?> = emptyList(),\n @SerialName(\"gener\") val genre: List<Genre?>? = null,\n val lyrics_url: String? = null,\n val youtube_id: String? = null,\n val total_favourite_count: Int? = null,\n val release_date: String? = null,\n val play_ct: String? = null,\n val secondary_language: String? = null,\n var downloaded: DownloadStatus? = DownloadStatus.NotDownloaded\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Genre(\n val genre_id: Int,\n val name: String\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.gaana\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Tags(\n val tag_id: Int,\n val tag_name: String\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Album(\n var album_type: String? = null,\n var artists: List<Artist?>? = null,\n var available_markets: List<String?>? = null,\n var copyrights: List<Copyright?>? = null,\n var external_ids: Map<String?, String?>? = null,\n var external_urls: Map<String?, String?>? = null,\n var genres: List<String?>? = null,\n var href: String? = null,\n var id: String? = null,\n var images: List<Image?>? = null,\n var label: String? = null,\n var name: String? = null,\n var popularity: Int? = null,\n var release_date: String? = null,\n var release_date_precision: String? = null,\n var tracks: PagingObjectTrack? = null,\n var type: String? = null,\n var uri: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Artist(\n var external_urls: Map<String?, String?>? = null,\n var href: String? = null,\n var id: String? = null,\n var name: String? = null,\n var type: String? = null,\n var uri: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Copyright(\n var text: String? = null,\n var type: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Followers(\n var href: String? = null,\n var total: Int? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Image(\n var width: Int? = null,\n var height: Int? = null,\n var url: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class LinkedTrack(\n var external_urls: Map<String?, String?>? = null,\n var href: String? = null,\n var id: String? = null,\n var type: String? = null,\n var uri: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class PagingObjectPlaylistTrack(\n var href: String? = null,\n var items: List<PlaylistTrack>? = null,\n var limit: Int = 0,\n var next: String? = null,\n var offset: Int = 0,\n var previous: String? = null,\n var total: Int = 0\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class PagingObjectTrack(\n var href: String? = null,\n var items: List<Track>? = null,\n var limit: Int = 0,\n var next: String? = null,\n var offset: Int = 0,\n var previous: String? = null,\n var total: Int = 0\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Playlist(\n @SerialName(\"collaborative\")var is_collaborative: Boolean? = null,\n var description: String? = null,\n var external_urls: Map<String?, String?>? = null,\n var followers: Followers? = null,\n var href: String? = null,\n var id: String? = null,\n var images: List<Image?>? = null,\n var name: String? = null,\n var owner: UserPublic? = null,\n @SerialName(\"public\")var is_public: Boolean? = null,\n var snapshot_id: String? = null,\n var tracks: PagingObjectPlaylistTrack? = null,\n var type: String? = null,\n var uri: String? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class PlaylistTrack(\n var added_at: String? = null,\n var added_by: UserPublic? = null,\n var track: Track? = null,\n var is_local: Boolean? = null\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nenum class Source {\n Spotify,\n YouTube,\n Gaana,\n}\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class TokenData(\n var access_token: String?,\n var token_type: String?,\n @SerialName(\"expires_in\") var expiry: Long?\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport com.shabinder.common.models.DownloadStatus\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Track(\n var artists: List<Artist?>? = null,\n var available_markets: List<String?>? = null,\n var is_playable: Boolean? = null,\n var linked_from: LinkedTrack? = null,\n var disc_number: Int = 0,\n var duration_ms: Long = 0,\n var explicit: Boolean? = null,\n var external_urls: Map<String?, String?>? = null,\n var href: String? = null,\n var name: String? = null,\n var preview_url: String? = null,\n var track_number: Int = 0,\n var type: String? = null,\n var uri: String? = null,\n var album: Album? = null,\n var external_ids: Map<String?, String?>? = null,\n var popularity: Int? = null,\n var downloaded: DownloadStatus = DownloadStatus.NotDownloaded\n)\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models.spotify\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class UserPublic(\n var display_name: String? = null,\n var external_urls: Map<String?, String?>? = null,\n var followers: Followers? = null,\n var href: String? = null,\n var id: String? = null,\n var images: List<Image?>? = null,\n var type: String? = null,\n var uri: String? = null\n)\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.properties\n\nimport kotlin.reflect.KProperty\n\n/**\n * Standard property delegates.\n */\npublic object Delegates {\n /**\n * Returns a property delegate for a read/write property with a non-`null` value that is initialized not during\n * object construction time but at a later time. Trying to read the property before the initial value has been\n * assigned results in an exception.\n *\n * @sample samples.properties.Delegates.notNullDelegate\n */\n public fun <T : Any> notNull(): ReadWriteProperty<Any?, T> = NotNullVar()\n\n /**\n * Returns a property delegate for a read/write property that calls a specified callback function when changed.\n * @param initialValue the initial value of the property.\n * @param onChange the callback which is called after the change of the property is made. The value of the property\n * has already been changed when this callback is invoked.\n *\n * @sample samples.properties.Delegates.observableDelegate\n */\n public inline fun <T> observable(initialValue: T, crossinline onChange: (property: KProperty<*>, oldValue: T, newValue: T) -> Unit):\n ReadWriteProperty<Any?, T> =\n object : ObservableProperty<T>(initialValue) {\n override fun afterChange(property: KProperty<*>, oldValue: T, newValue: T) = onChange(property, oldValue, newValue)\n }\n\n /**\n * Returns a property delegate for a read/write property that calls a specified callback function when changed,\n * allowing the callback to veto the modification.\n * @param initialValue the initial value of the property.\n * @param onChange the callback which is called before a change to the property value is attempted.\n * The value of the property hasn't been changed yet, when this callback is invoked.\n * If the callback returns `true` the value of the property is being set to the new value,\n * and if the callback returns `false` the new value is discarded and the property remains its old value.\n *\n * @sample samples.properties.Delegates.vetoableDelegate\n * @sample samples.properties.Delegates.throwVetoableDelegate\n */\n public inline fun <T> vetoable(initialValue: T, crossinline onChange: (property: KProperty<*>, oldValue: T, newValue: T) -> Boolean):\n ReadWriteProperty<Any?, T> =\n object : ObservableProperty<T>(initialValue) {\n override fun beforeChange(property: KProperty<*>, oldValue: T, newValue: T): Boolean = onChange(property, oldValue, newValue)\n }\n\n}\n\n\nprivate class NotNullVar<T : Any>() : ReadWriteProperty<Any?, T> {\n private var value: T? = null\n\n public override fun getValue(thisRef: Any?, property: KProperty<*>): T {\n return value ?: throw IllegalStateException(\"Property ${property.name} should be initialized before get.\")\n }\n\n public override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {\n this.value = value\n }\n}\n\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.cache\n\nimport io.ktor.client.call.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\n\ninternal suspend fun HttpCacheEntry(response: HttpResponse): HttpCacheEntry {\n val body = response.content.readRemaining().readBytes()\n response.complete()\n return HttpCacheEntry(response.cacheExpires(), response.varyKeys(), response, body)\n}\n\n/**\n * Client single response cache with [expires] and [varyKeys].\n */\n@KtorExperimentalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic class HttpCacheEntry internal constructor(\n public val expires: GMTDate,\n public val varyKeys: Map<String, String>,\n public val response: HttpResponse,\n public val body: ByteArray\n) {\n internal val responseHeaders: Headers = Headers.build {\n appendAll(response.headers)\n }\n\n internal fun produceResponse(): HttpResponse {\n val currentClient = response.call.client ?: error(\"Failed to save response in cache in different thread.\")\n val call = SavedHttpCall(currentClient)\n call.response = SavedHttpResponse(call, body, response)\n call.request = SavedHttpRequest(call, response.call.request)\n\n return call.response\n }\n\n override fun equals(other: Any?): Boolean {\n if (other == null || other !is HttpCacheEntry) return false\n if (other === this) return true\n return varyKeys == other.varyKeys\n }\n\n override fun hashCode(): Int {\n return varyKeys.hashCode()\n }\n}\n\ninternal fun HttpResponse.varyKeys(): Map<String, String> {\n val validationKeys = vary() ?: return emptyMap()\n\n val result = mutableMapOf<String, String>()\n val requestHeaders = call.request.headers\n\n for (key in validationKeys) {\n result[key] = requestHeaders[key] ?: \"\"\n }\n\n return result\n}\n\ninternal fun HttpResponse.cacheExpires(fallback: () -> GMTDate = { GMTDate() }): GMTDate {\n val cacheControl = cacheControl()\n\n val isPrivate = CacheControl.PRIVATE in cacheControl\n\n val maxAgeKey = if (isPrivate) \"s-max-age\" else \"max-age\"\n\n val maxAge = cacheControl.firstOrNull { it.value.startsWith(maxAgeKey) }\n ?.value?.split(\"=\")\n ?.get(1)?.toInt()\n\n if (maxAge != null) {\n return call.response.requestTime + maxAge * 1000L\n }\n\n val expires = headers[HttpHeaders.Expires]\n return expires?.let {\n // Handle \"0\" case faster\n if (it == \"0\" || it.isBlank()) return fallback()\n\n return try {\n it.fromHttpToGmtDate()\n } catch (e: Throwable) {\n fallback()\n }\n } ?: fallback()\n}\n\ninternal fun HttpCacheEntry.shouldValidate(): Boolean {\n val cacheControl = responseHeaders[HttpHeaders.CacheControl]?.let { parseHeaderValue(it) } ?: emptyList()\n val isStale = GMTDate() > expires\n // must-revalidate; re-validate once STALE, and MUST NOT return a cached response once stale.\n // This is how majority of clients implement the RFC\n // OkHttp Implements this the same: https://github.com/square/okhttp/issues/4043#issuecomment-403679369\n // Disabled for now, as we don't currently return a cached object when there's a network failure; must-revalidate\n // works the same as being stale on the request side. On response side, must-revalidate would not return a cached\n // object if we are stale and couldn't refresh.\n // isStale = isStale && CacheControl.MUST_REVALIDATE in cacheControl\n return isStale || CacheControl.NO_CACHE in cacheControl\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.websocket\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.engine.*\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.http.cio.websocket.*\nimport io.ktor.util.*\nimport kotlin.native.concurrent.*\n\n@ExperimentalWebSocketExtensionApi\n@SharedImmutable\nprivate val REQUEST_EXTENSIONS_KEY = AttributeKey<List<WebSocketExtension<*>>>(\"Websocket extensions\")\n\n/**\n * Indicates if a client engine supports WebSockets.\n */\npublic object WebSocketCapability : HttpClientEngineCapability<Unit> {\n override fun toString(): String = \"WebSocketCapability\"\n}\n\n/**\n * Indicates if a client engine supports extensions for WebSocket feature.\n */\npublic object WebSocketExtensionsCapability : HttpClientEngineCapability<Unit> {\n override fun toString(): String = \"WebSocketExtensionsCapability\"\n}\n\n/**\n * Client WebSocket feature.\n *\n * @property pingInterval - interval between [FrameType.PING] messages.\n * @property maxFrameSize - max size of single websocket frame.\n * @property extensionsConfig - extensions configuration\n */\n@OptIn(WebSocketInternalAPI::class)\npublic class WebSockets @OptIn(ExperimentalWebSocketExtensionApi::class)\ninternal constructor(\n public val pingInterval: Long,\n public val maxFrameSize: Long,\n private val extensionsConfig: WebSocketExtensionsConfig\n) {\n /**\n * Client WebSocket feature.\n *\n * @property pingInterval - interval between [FrameType.PING] messages.\n * @property maxFrameSize - max size of single websocket frame.\n */\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n public constructor(\n pingInterval: Long = -1L,\n maxFrameSize: Long = Int.MAX_VALUE.toLong(),\n ) : this(pingInterval, maxFrameSize, WebSocketExtensionsConfig())\n\n /**\n * Client WebSocket feature.\n */\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n public constructor() : this(-1L, Int.MAX_VALUE.toLong(), WebSocketExtensionsConfig())\n\n @ExperimentalWebSocketExtensionApi\n private fun installExtensions(context: HttpRequestBuilder) {\n val installed = extensionsConfig.build()\n context.attributes.put(REQUEST_EXTENSIONS_KEY, installed)\n\n val protocols = installed.flatMap { it.protocols }\n addNegotiatedProtocols(context, protocols)\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n @ExperimentalWebSocketExtensionApi\n private fun completeNegotiation(\n call: HttpClientCall\n ): List<WebSocketExtension<*>> {\n val serverExtensions: List<WebSocketExtensionHeader> = call.response\n .headers[HttpHeaders.SecWebSocketExtensions]\n ?.let { parseWebSocketExtensions(it) } ?: emptyList()\n\n val clientExtensions = call.attributes[REQUEST_EXTENSIONS_KEY]\n\n return clientExtensions.filter { it.clientNegotiation(serverExtensions) }\n }\n\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n private fun addNegotiatedProtocols(context: HttpRequestBuilder, protocols: List<WebSocketExtensionHeader>) {\n val headerValue = protocols.joinToString(\";\")\n context.header(HttpHeaders.SecWebSocketExtensions, headerValue)\n }\n\n internal fun convertSessionToDefault(session: WebSocketSession): DefaultWebSocketSession {\n if (session is DefaultWebSocketSession) return session\n\n return DefaultWebSocketSession(session, pingInterval, timeoutMillis = pingInterval * 2).also {\n it.maxFrameSize = this@WebSockets.maxFrameSize\n }\n }\n\n init {\n }\n\n /**\n * [WebSockets] configuration.\n */\n public class Config {\n @ExperimentalWebSocketExtensionApi\n internal val extensionsConfig: WebSocketExtensionsConfig = WebSocketExtensionsConfig()\n\n /**\n * Sets interval of sending ping frames.\n *\n * Value -1L is for disabled ping.\n */\n public var pingInterval: Long = -1L\n\n /**\n * Sets maximum frame size in bytes.\n */\n public var maxFrameSize: Long = Int.MAX_VALUE.toLong()\n\n /**\n * Configure WebSocket extensions.\n */\n @ExperimentalWebSocketExtensionApi\n public fun extensions(block: WebSocketExtensionsConfig.() -> Unit) {\n extensionsConfig.apply(block)\n }\n }\n\n /**\n * Add WebSockets support for ktor http client.\n */\n public companion object Feature : HttpClientFeature<Config, WebSockets> {\n override val key: AttributeKey<WebSockets> = AttributeKey(\"Websocket\")\n\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n override fun prepare(block: Config.() -> Unit): WebSockets {\n val config = Config().apply(block)\n return WebSockets(config.pingInterval, config.maxFrameSize, config.extensionsConfig)\n }\n\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n override fun install(feature: WebSockets, scope: HttpClient) {\n val extensionsSupported = scope.engine.supportedCapabilities.contains(WebSocketExtensionsCapability)\n\n scope.requestPipeline.intercept(HttpRequestPipeline.Render) {\n if (!context.url.protocol.isWebsocket()) return@intercept\n context.setCapability(WebSocketCapability, Unit)\n\n if (extensionsSupported) {\n feature.installExtensions(context)\n }\n\n proceedWith(WebSocketContent())\n }\n\n scope.responsePipeline.intercept(HttpResponsePipeline.Transform) { (info, session) ->\n if (session !is WebSocketSession) return@intercept\n\n val clientSession: ClientWebSocketSession = when (info.type) {\n DefaultClientWebSocketSession::class -> {\n val defaultSession = feature.convertSessionToDefault(session)\n val clientSession = DefaultClientWebSocketSession(context, defaultSession)\n\n val negotiated = if (extensionsSupported) {\n feature.completeNegotiation(context)\n } else emptyList()\n\n clientSession.apply {\n start(negotiated)\n }\n }\n else -> DelegatingClientWebSocketSession(context, session)\n }\n\n val response = HttpResponseContainer(info, clientSession)\n proceedWith(response)\n }\n }\n }\n}\n\n@Suppress(\"KDocMissingDocumentation\")\npublic class WebSocketException(message: String) : IllegalStateException(message)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client\n\nimport io.ktor.client.call.*\nimport io.ktor.client.engine.*\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.client.utils.checkCoroutinesVersion\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.atomicfu.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Constructs an asynchronous [HttpClient] using optional [block] for configuring this client.\n *\n * The [HttpClientEngine] is selected from the dependencies.\n * https://ktor.io/clients/http-client/engines.html\n */\n@HttpClientDsl\npublic expect fun HttpClient(\n block: HttpClientConfig<*>.() -> Unit = {}\n): HttpClient\n\n/**\n * Constructs an asynchronous [HttpClient] using the specified [engineFactory]\n * and an optional [block] for configuring this client.\n */\n@HttpClientDsl\npublic fun <T : HttpClientEngineConfig> HttpClient(\n engineFactory: HttpClientEngineFactory<T>,\n block: HttpClientConfig<T>.() -> Unit = {}\n): HttpClient {\n val config: HttpClientConfig<T> = HttpClientConfig<T>().apply(block)\n val engine = engineFactory.create(config.engineConfig)\n val client = HttpClient(engine, config, manageEngine = true)\n\n // If the engine was created using factory Ktor is responsible for its lifecycle management. Otherwise user has to\n // close engine by themself.\n client.coroutineContext[Job]!!.invokeOnCompletion {\n engine.close()\n }\n\n return client\n}\n\n/**\n * Constructs an asynchronous [HttpClient] using the specified [engine]\n * and a [block] for configuring this client.\n */\n@HttpClientDsl\npublic fun HttpClient(\n engine: HttpClientEngine,\n block: HttpClientConfig<*>.() -> Unit\n): HttpClient = HttpClient(engine, HttpClientConfig<HttpClientEngineConfig>().apply(block), manageEngine = false)\n\n/**\n * Asynchronous client to perform HTTP requests.\n *\n * This is a generic implementation that uses a specific engine [HttpClientEngine].\n * @property engine: [HttpClientEngine] for executing requests.\n */\n@OptIn(InternalCoroutinesApi::class)\npublic class HttpClient(\n public val engine: HttpClientEngine,\n private val userConfig: HttpClientConfig<out HttpClientEngineConfig> = HttpClientConfig()\n) : CoroutineScope, Closeable {\n private var manageEngine: Boolean by shared(false)\n\n internal constructor(\n engine: HttpClientEngine,\n userConfig: HttpClientConfig<out HttpClientEngineConfig>,\n manageEngine: Boolean\n ) : this(engine, userConfig) {\n this.manageEngine = manageEngine\n }\n\n private val closed = atomic(false)\n\n private val clientJob: CompletableJob = Job(engine.coroutineContext[Job])\n\n public override val coroutineContext: CoroutineContext = engine.coroutineContext + clientJob\n\n /**\n * Pipeline used for processing all the requests sent by this client.\n */\n public val requestPipeline: HttpRequestPipeline = HttpRequestPipeline(userConfig.developmentMode)\n\n /**\n * Pipeline used for processing all the responses sent by the server.\n */\n public val responsePipeline: HttpResponsePipeline = HttpResponsePipeline(userConfig.developmentMode)\n\n /**\n * Pipeline used for sending the request.\n */\n public val sendPipeline: HttpSendPipeline = HttpSendPipeline(userConfig.developmentMode)\n\n /**\n * Pipeline used for receiving request.\n */\n public val receivePipeline: HttpReceivePipeline = HttpReceivePipeline(userConfig.developmentMode)\n\n /**\n * Typed attributes used as a lightweight container for this client.\n */\n public val attributes: Attributes = Attributes(concurrent = true)\n\n /**\n * Dispatcher handles io operations.\n */\n @Deprecated(\n \"[dispatcher] is deprecated. Use coroutineContext instead.\",\n replaceWith = ReplaceWith(\"coroutineContext\"),\n level = DeprecationLevel.ERROR\n )\n public val dispatcher: CoroutineDispatcher\n get() = engine.dispatcher\n\n /**\n * Client engine config.\n */\n public val engineConfig: HttpClientEngineConfig = engine.config\n\n internal val config = HttpClientConfig<HttpClientEngineConfig>()\n\n init {\n checkCoroutinesVersion()\n\n if (manageEngine) {\n clientJob.invokeOnCompletion {\n if (it != null) {\n engine.cancel()\n }\n }\n }\n\n engine.install(this)\n\n sendPipeline.intercept(HttpSendPipeline.Receive) { call ->\n check(call is HttpClientCall) { \"Error: HttpClientCall expected, but found $call(${call::class}).\" }\n val receivedCall = receivePipeline.execute(call, call.response).call\n proceedWith(receivedCall)\n }\n\n with(userConfig) {\n config.install(HttpRequestLifecycle)\n\n if (useDefaultTransformers) {\n config.install(HttpPlainText)\n config.install(\"DefaultTransformers\") { defaultTransformers() }\n }\n\n config.install(HttpSend)\n\n if (followRedirects) {\n config.install(HttpRedirect)\n }\n\n config += this\n\n config.addDefaultResponseValidation()\n\n config.install(this@HttpClient)\n }\n\n makeShared()\n }\n\n /**\n * Creates a new [HttpRequest] from a request [data] and a specific client [call].\n */\n\n @Deprecated(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(builder)] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\n \"this.request<HttpResponse>(builder)\",\n \"io.ktor.client.statement.*\"\n )\n )\n @InternalAPI\n public suspend fun execute(builder: HttpRequestBuilder): HttpClientCall =\n requestPipeline.execute(builder, builder.body) as HttpClientCall\n\n /**\n * Check if the specified [capability] is supported by this client.\n */\n public fun isSupported(capability: HttpClientEngineCapability<*>): Boolean {\n return engine.supportedCapabilities.contains(capability)\n }\n\n /**\n * Returns a new [HttpClient] copying this client configuration,\n * and additionally configured by the [block] parameter.\n */\n public fun config(block: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(\n engine,\n HttpClientConfig<HttpClientEngineConfig>().apply {\n plusAssign(userConfig)\n block()\n },\n manageEngine\n )\n\n /**\n * Closes the underlying [engine].\n */\n override fun close() {\n val success = closed.compareAndSet(false, true)\n if (!success) return\n\n attributes.allKeys.forEach { key ->\n @Suppress(\"UNCHECKED_CAST\")\n val feature = attributes[key as AttributeKey<Any>]\n\n if (feature is Closeable) {\n feature.close()\n }\n }\n\n clientJob.complete()\n if (manageEngine) {\n engine.close()\n }\n }\n\n override fun toString(): String = \"HttpClient[$engine]\"\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client\n\nimport io.ktor.client.engine.*\nimport io.ktor.client.features.*\nimport io.ktor.client.utils.sharedMap\nimport io.ktor.util.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlin.collections.set\n\n/**\n * Mutable configuration used by [HttpClient].\n */\n@HttpClientDsl\npublic class HttpClientConfig<T : HttpClientEngineConfig> {\n private val features: MutableMap<AttributeKey<*>, (HttpClient) -> Unit> = sharedMap()\n private val featureConfigurations: MutableMap<AttributeKey<*>, Any.() -> Unit> = sharedMap()\n\n private val customInterceptors: MutableMap<String, (HttpClient) -> Unit> = sharedMap()\n\n internal var engineConfig: T.() -> Unit by shared {}\n\n /**\n * Configure engine parameters.\n */\n public fun engine(block: T.() -> Unit) {\n val oldConfig = engineConfig\n engineConfig = {\n oldConfig()\n block()\n }\n }\n\n /**\n * Use [HttpRedirect] feature to automatically follow redirects.\n */\n public var followRedirects: Boolean by shared(true)\n\n /**\n * Use [defaultTransformers] to automatically handle simple [ContentType].\n */\n public var useDefaultTransformers: Boolean by shared(true)\n\n /**\n * Terminate [HttpClient.receivePipeline] if status code is not successful (>=300).\n */\n public var expectSuccess: Boolean by shared(true)\n\n /**\n * Indicate if client should use development mode. In development mode client pipelines have advanced stack traces.\n */\n public var developmentMode: Boolean by shared(PlatformUtils.IS_DEVELOPMENT_MODE)\n\n /**\n * Installs a specific [feature] and optionally [configure] it.\n */\n public fun <TBuilder : Any, TFeature : Any> install(\n feature: HttpClientFeature<TBuilder, TFeature>,\n configure: TBuilder.() -> Unit = {}\n ) {\n val previousConfigBlock = featureConfigurations[feature.key]\n featureConfigurations[feature.key] = {\n previousConfigBlock?.invoke(this)\n\n @Suppress(\"UNCHECKED_CAST\")\n (this as TBuilder).configure()\n }\n\n if (features.containsKey(feature.key)) return\n\n features[feature.key] = { scope ->\n val attributes = scope.attributes.computeIfAbsent(FEATURE_INSTALLED_LIST) { Attributes(concurrent = true) }\n val config = scope.config.featureConfigurations[feature.key]!!\n val featureData = feature.prepare(config)\n\n feature.install(featureData, scope)\n attributes.put(feature.key, featureData)\n }\n }\n\n /**\n * Installs an interceptor defined by [block].\n * The [key] parameter is used as a unique name, that also prevents installing duplicated interceptors.\n */\n public fun install(key: String, block: HttpClient.() -> Unit) {\n customInterceptors[key] = block\n }\n\n /**\n * Applies all the installed [features] and [customInterceptors] from this configuration\n * into the specified [client].\n */\n public fun install(client: HttpClient) {\n features.values.forEach { client.apply(it) }\n customInterceptors.values.forEach { client.apply(it) }\n }\n\n /**\n * Clones this [HttpClientConfig] duplicating all the [features] and [customInterceptors].\n */\n public fun clone(): HttpClientConfig<T> {\n val result = HttpClientConfig<T>()\n result += this\n return result\n }\n\n /**\n * Install features from [other] client config.\n */\n public operator fun plusAssign(other: HttpClientConfig<out T>) {\n followRedirects = other.followRedirects\n useDefaultTransformers = other.useDefaultTransformers\n expectSuccess = other.expectSuccess\n\n features += other.features\n featureConfigurations += other.featureConfigurations\n customInterceptors += other.customInterceptors\n }\n}\n\n/**\n * Dsl marker for [HttpClient] dsl.\n */\n@DslMarker\npublic annotation class HttpClientDsl\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.call\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.atomicfu.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\nimport kotlin.reflect.*\n\n@InternalAPI\ninternal fun HttpClientCall(\n client: HttpClient,\n requestData: HttpRequestData,\n responseData: HttpResponseData\n): HttpClientCall = HttpClientCall(client).apply {\n request = DefaultHttpRequest(this, requestData)\n response = DefaultHttpResponse(this, responseData)\n\n if (responseData.body !is ByteReadChannel) {\n @Suppress(\"DEPRECATION\")\n attributes.put(HttpClientCall.CustomResponse, responseData.body)\n }\n}\n\n/**\n * A class that represents a single pair of [request] and [response] for a specific [HttpClient].\n *\n * @property client: client that executed the call.\n */\npublic open class HttpClientCall internal constructor(\n client: HttpClient\n) : CoroutineScope {\n private val received: AtomicBoolean = atomic(false)\n\n public val client: HttpClient? by threadLocal(client)\n\n override val coroutineContext: CoroutineContext get() = response.coroutineContext\n\n /**\n * Typed [Attributes] associated to this call serving as a lightweight container.\n */\n public val attributes: Attributes get() = request.attributes\n\n /**\n * Represents the [request] sent by the client\n */\n public lateinit var request: HttpRequest\n internal set\n\n /**\n * Represents the [response] sent by the server.\n */\n public lateinit var response: HttpResponse\n internal set\n\n protected open val allowDoubleReceive: Boolean = false\n\n protected open suspend fun getResponseContent(): ByteReadChannel = response.content\n\n /**\n * Tries to receive the payload of the [response] as a specific expected type provided in [info].\n * Returns [response] if [info] corresponds to [HttpResponse].\n *\n * @throws NoTransformationFoundException If no transformation is found for the type [info].\n * @throws DoubleReceiveException If already called [receive].\n */\n public suspend fun receive(info: TypeInfo): Any {\n try {\n if (response.instanceOf(info.type)) return response\n if (!allowDoubleReceive && !received.compareAndSet(false, true)) {\n throw DoubleReceiveException(this)\n }\n\n @Suppress(\"DEPRECATION\")\n val responseData = attributes.getOrNull(CustomResponse) ?: getResponseContent()\n\n val subject = HttpResponseContainer(info, responseData)\n val currentClient = client ?: error(\"Failed to receive call($this) in different native thread.\")\n\n val result = currentClient.responsePipeline.execute(this, subject).response\n if (!result.instanceOf(info.type)) {\n val from = result::class\n val to = info.type\n throw NoTransformationFoundException(response, from, to)\n }\n\n return result\n } catch (cause: Throwable) {\n response.cancel(\"Receive failed\", cause)\n throw cause\n } finally {\n response.complete()\n }\n }\n\n override fun toString(): String = \"HttpClientCall[${request.url}, ${response.status}]\"\n\n public companion object {\n /**\n * [CustomResponse] key used to process the response of custom type in case of [HttpClientEngine] can't return body bytes directly.\n * If present, attribute value will be an initial value for [HttpResponseContainer] in [HttpClient.responsePipeline].\n *\n * Example: [WebSocketSession]\n */\n @Deprecated(\n \"This is going to be removed. \" +\n \"Please file a ticket with clarification why and what for do you need it.\"\n )\n public val CustomResponse: AttributeKey<Any> = AttributeKey<Any>(\"CustomResponse\")\n }\n}\n\n/**\n * Raw http call produced by engine.\n *\n * @property request - executed http request.\n * @property response - raw http response\n */\n@Deprecated(\n \"HttpEngineCall deprecated.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"HttpResponseData\")\n)\n@InternalAPI\npublic data class HttpEngineCall(val request: HttpRequest, val response: HttpResponse)\n\n/**\n * Constructs a [HttpClientCall] from this [HttpClient] and with the specified [HttpRequestBuilder]\n * configured inside the [block].\n */\n@Deprecated(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(block)] in instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\n \"this.request<HttpResponse>(block)\",\n \"io.ktor.client.request.request\",\n \"io.ktor.client.statement.*\"\n )\n)\n@Suppress(\"RedundantSuspendModifier\", \"unused\", \"UNUSED_PARAMETER\")\npublic suspend fun HttpClient.call(block: suspend HttpRequestBuilder.() -> Unit = {}): HttpClientCall =\n error(\"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(block)] in instead.\")\n\n/**\n * Tries to receive the payload of the [response] as an specific type [T].\n *\n * @throws NoTransformationFoundException If no transformation is found for the type [T].\n * @throws DoubleReceiveException If already called [receive].\n */\npublic suspend inline fun <reified T> HttpClientCall.receive(): T = receive(typeInfo<T>()) as T\n\n/**\n * Tries to receive the payload of the [response] as an specific type [T].\n *\n * @throws NoTransformationFoundException If no transformation is found for the type [T].\n * @throws DoubleReceiveException If already called [receive].\n */\npublic suspend inline fun <reified T> HttpResponse.receive(): T = call.receive(typeInfo<T>()) as T\n\n/**\n * Exception representing that the response payload has already been received.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class DoubleReceiveException(call: HttpClientCall) : IllegalStateException() {\n override val message: String = \"Response already received: $call\"\n}\n\n/**\n * Exception representing fail of the response pipeline\n * [cause] contains origin pipeline exception\n */\n@Suppress(\"KDocMissingDocumentation\", \"unused\")\npublic class ReceivePipelineException(\n public val request: HttpClientCall,\n public val info: TypeInfo,\n override val cause: Throwable\n) : IllegalStateException(\"Fail to run receive pipeline: $cause\")\n\n/**\n * Exception representing the no transformation was found.\n * It includes the received type and the expected type as part of the message.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class NoTransformationFoundException(\n response: HttpResponse,\n from: KClass<*>,\n to: KClass<*>\n) : UnsupportedOperationException() {\n override val message: String? = \"\"\"No transformation found: $from -> $to\n |with response from ${response.request.url}:\n |status: ${response.status}\n |response headers: \n |${response.headers.flattenEntries().joinToString { (key, value) -> \"$key: $value\\n\" }}\n \"\"\".trimMargin()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine\n\nimport io.ktor.util.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.atomicfu.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Abstract implementation of [HttpClientEngine] responsible for lifecycle control of [dispatcher] and\n * [coroutineContext] as well as proper call context management. Should be considered as the best parent class for\n * custom [HttpClientEngine] implementations.\n */\npublic abstract class HttpClientEngineBase(private val engineName: String) : HttpClientEngine {\n private val closed = atomic(false)\n\n override val coroutineContext: CoroutineContext by lazy {\n SilentSupervisor() + dispatcher + CoroutineName(\"$engineName-context\")\n }\n\n override fun close() {\n if (!closed.compareAndSet(false, true)) return\n\n val requestJob = coroutineContext[Job] as? CompletableJob ?: return\n\n requestJob.complete()\n requestJob.invokeOnCompletion {\n dispatcher.close()\n }\n }\n}\n\n/**\n * Exception that indicates that client engine is already closed.\n */\npublic class ClientEngineClosedException(override val cause: Throwable? = null) :\n IllegalStateException(\"Client already closed\")\n\n/**\n * Close [CoroutineDispatcher] if it's [Closeable].\n */\nprivate fun CoroutineDispatcher.close() = try {\n (this as? Closeable)?.close()\n} catch (ignore: Throwable) {\n // Some closeable dispatchers like Dispatchers.IO can't be closed.\n}\n","package io.ktor.client.engine\n\nimport io.ktor.http.*\nimport io.ktor.util.network.*\n\n/**\n * Proxy configuration.\n *\n * See [ProxyBuilder] to create proxy.\n */\npublic expect class ProxyConfig\n\n/**\n * Type of configured proxy.\n */\npublic expect val ProxyConfig.type: ProxyType\n\n/**\n * Types of proxy\n */\n@Suppress(\"NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING\", \"KDocMissingDocumentation\")\npublic enum class ProxyType {\n SOCKS,\n HTTP,\n UNKNOWN\n}\n\n/**\n * Resolve remote address of [ProxyConfig].\n *\n * This operations can block.\n */\npublic expect fun ProxyConfig.resolveAddress(): NetworkAddress\n\n/**\n * [ProxyConfig] factory.\n */\npublic expect object ProxyBuilder {\n /**\n * Create http proxy from [url].\n */\n public fun http(url: Url): ProxyConfig\n\n /**\n * Create socks proxy from [host] and [port].\n */\n public fun socks(host: String, port: Int): ProxyConfig\n}\n\n/**\n * Create http proxy from [urlString].\n */\npublic fun ProxyBuilder.http(urlString: String): ProxyConfig = http(Url(urlString))\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.call\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\ninternal class SavedHttpCall(client: HttpClient) : HttpClientCall(client) {\n /**\n * Equals [HttpResponse.content] in case [receive] was never called before or equals it's copy if [receive] was\n * already called at least once.\n * */\n private var responseContent: ByteReadChannel? = null\n\n /**\n * Saves [responseContent] and returns it's copy that is safe to use without loosing [responseContent] data.\n * */\n override suspend fun getResponseContent(): ByteReadChannel {\n if (responseContent == null) {\n responseContent = response.content\n }\n val contentBytes = responseContent!!.toByteArray()\n responseContent = ByteReadChannel(contentBytes)\n return ByteReadChannel(contentBytes)\n }\n\n override val allowDoubleReceive: Boolean = true\n}\n\ninternal class SavedHttpRequest(\n override val call: SavedHttpCall,\n origin: HttpRequest\n) : HttpRequest by origin\n\ninternal class SavedHttpResponse(\n override val call: SavedHttpCall,\n body: ByteArray,\n origin: HttpResponse\n) : HttpResponse() {\n private val context = Job()\n\n override val status: HttpStatusCode = origin.status\n\n override val version: HttpProtocolVersion = origin.version\n\n override val requestTime: GMTDate = origin.requestTime\n\n override val responseTime: GMTDate = origin.responseTime\n\n override val headers: Headers = origin.headers\n\n override val coroutineContext: CoroutineContext = origin.coroutineContext + context\n\n override val content: ByteReadChannel = ByteReadChannel(body)\n}\n\n/**\n * Fetch data for [HttpClientCall] and close the origin.\n */\n@KtorExperimentalAPI\npublic suspend fun HttpClientCall.save(): HttpClientCall {\n val currentClient = client ?: error(\"Failed to save call in different native thread.\")\n\n return SavedHttpCall(currentClient).also { result ->\n val content = response.content.readRemaining()\n\n result.request = SavedHttpRequest(result, request)\n result.response = SavedHttpResponse(result, content.readBytes(), response)\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.call\n\nimport kotlin.reflect.*\n\n/**\n * Information about type.\n */\npublic expect interface Type\n\n/**\n * Ktor type information.\n * @param type: source KClass<*>\n * @param reifiedType: type with substituted generics\n * @param kotlinType: kotlin reified type with all generic type parameters.\n */\npublic data class TypeInfo(\n val type: KClass<*>,\n val reifiedType: Type,\n val kotlinType: KType? = null\n)\n\n/**\n * Returns [TypeInfo] for the specified type [T]\n */\npublic expect inline fun <reified T> typeInfo(): TypeInfo\n\n/**\n * Check [this] is instance of [type].\n */\ninternal expect fun Any.instanceOf(type: KClass<*>): Boolean\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.call\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\n\n@Suppress(\"KDocMissingDocumentation\")\npublic class UnsupportedContentTypeException(content: OutgoingContent) :\n IllegalStateException(\"Failed to write body: ${content::class}\")\n\n@Suppress(\"KDocMissingDocumentation\", \"UNUSED\")\npublic class UnsupportedUpgradeProtocolException(\n url: Url\n) : IllegalArgumentException(\"Unsupported upgrade protocol exception: $url\")\n\n/**\n * Constructs a [HttpClientCall] from this [HttpClient] and\n * with the specified HTTP request [builder].\n */\n@Deprecated(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(builder)] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"this.request<HttpResponse>(builder)\", \"io.ktor.client.statement.*\")\n)\n@Suppress(\"UNUSED\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpClient.call(builder: HttpRequestBuilder): HttpClientCall =\n error(\"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(builder)] instead.\")\n\n/**\n * Constructs a [HttpClientCall] from this [HttpClient],\n * an [url] and an optional [block] configuring a [HttpRequestBuilder].\n */\n@Deprecated(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(urlString, block)] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\n \"this.request<HttpResponse>(urlString, block)\",\n \"io.ktor.client.statement.*\"\n )\n)\n@Suppress(\"UNUSED\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpClient.call(\n urlString: String,\n block: suspend HttpRequestBuilder.() -> Unit = {}\n): HttpClientCall = error(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(urlString, block)] instead.\"\n)\n\n/**\n * Constructs a [HttpClientCall] from this [HttpClient],\n * an [url] and an optional [block] configuring a [HttpRequestBuilder].\n */\n@Deprecated(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(url, block)] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"this.request<HttpResponse>(url, block)\", \"io.ktor.client.statement.*\")\n)\n@Suppress(\"UNUSED\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpClient.call(\n url: Url,\n block: suspend HttpRequestBuilder.() -> Unit = {}\n): HttpClientCall = error(\n \"Unbound [HttpClientCall] is deprecated. Consider using [request<HttpResponse>(url, block)] instead.\"\n)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.pipeline.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\ninternal val CALL_COROUTINE = CoroutineName(\"call-context\")\n\n/**\n * Base interface use to define engines for [HttpClient].\n */\npublic interface HttpClientEngine : CoroutineScope, Closeable {\n /**\n * [CoroutineDispatcher] specified for io operations.\n */\n public val dispatcher: CoroutineDispatcher\n\n /**\n * Engine configuration\n */\n public val config: HttpClientEngineConfig\n\n /**\n * Set of supported engine extensions.\n */\n @KtorExperimentalAPI\n public val supportedCapabilities: Set<HttpClientEngineCapability<*>>\n get() = emptySet()\n\n private val closed: Boolean\n get() = !(coroutineContext[Job]?.isActive ?: false)\n\n /**\n * Creates a new [HttpClientCall] specific for this engine, using a request [data].\n */\n @InternalAPI\n public suspend fun execute(data: HttpRequestData): HttpResponseData\n\n /**\n * Install engine into [HttpClient].\n */\n @InternalAPI\n public fun install(client: HttpClient) {\n client.sendPipeline.intercept(HttpSendPipeline.Engine) { content ->\n val requestData = HttpRequestBuilder().apply {\n takeFromWithExecutionContext(context)\n body = content\n }.build()\n\n validateHeaders(requestData)\n checkExtensions(requestData)\n\n val responseData = executeWithinCallContext(requestData)\n val call = HttpClientCall(client, requestData, responseData)\n\n proceedWith(call)\n }\n }\n\n /**\n * Create call context and use it as a coroutine context to [execute] request.\n */\n private suspend fun executeWithinCallContext(requestData: HttpRequestData): HttpResponseData {\n val callContext = createCallContext(requestData.executionContext)\n callContext.makeShared()\n\n val context = callContext + KtorCallContextElement(callContext)\n return async(context) {\n if (closed) {\n throw ClientEngineClosedException()\n }\n\n execute(requestData)\n }.await()\n }\n\n private fun checkExtensions(requestData: HttpRequestData) {\n for (requestedExtension in requestData.requiredCapabilities) {\n require(supportedCapabilities.contains(requestedExtension)) { \"Engine doesn't support $requestedExtension\" }\n }\n }\n}\n\n/**\n * Factory of [HttpClientEngine] with a specific [T] of [HttpClientEngineConfig].\n */\npublic interface HttpClientEngineFactory<out T : HttpClientEngineConfig> {\n /**\n * Creates a new [HttpClientEngine] optionally specifying a [block] configuring [T].\n */\n public fun create(block: T.() -> Unit = {}): HttpClientEngine\n}\n\n/**\n * Creates a new [HttpClientEngineFactory] based on this one\n * with further configurations from the [nested] block.\n */\npublic fun <T : HttpClientEngineConfig> HttpClientEngineFactory<T>.config(\n nested: T.() -> Unit\n): HttpClientEngineFactory<T> {\n val parent = this\n\n return object : HttpClientEngineFactory<T> {\n override fun create(block: T.() -> Unit): HttpClientEngine = parent.create {\n nested()\n block()\n }\n }\n}\n\n/**\n * Create call context with the specified [parentJob] to be used during call execution in the engine. Call context\n * inherits [coroutineContext], but overrides job and coroutine name so that call job's parent is [parentJob] and\n * call coroutine's name is \"call-context\".\n */\ninternal expect suspend fun HttpClientEngine.createCallContext(parentJob: Job): CoroutineContext\n\n/**\n * Validates request headers and fails if there are unsafe headers supplied\n */\nprivate fun validateHeaders(request: HttpRequestData) {\n val requestHeaders = request.headers\n val unsafeRequestHeaders = requestHeaders.names().filter {\n it in HttpHeaders.UnsafeHeadersList\n }\n if (unsafeRequestHeaders.isNotEmpty()) {\n throw UnsafeHeaderException(unsafeRequestHeaders.toString())\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine\n\nimport io.ktor.client.utils.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Default user agent to use in ktor client.\n */\n@InternalAPI\npublic val KTOR_DEFAULT_USER_AGENT: String = \"Ktor client\"\n\n/**\n * Merge headers from [content] and [requestHeaders] according to [OutgoingContent] properties\n */\n@InternalAPI\npublic fun mergeHeaders(\n requestHeaders: Headers,\n content: OutgoingContent,\n block: (key: String, value: String) -> Unit\n) {\n buildHeaders {\n appendAll(requestHeaders)\n appendAll(content.headers)\n }.forEach { key, values ->\n if (HttpHeaders.ContentLength == key) return@forEach // set later\n if (HttpHeaders.ContentType == key) return@forEach // set later\n\n // https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2\n block(key, values.joinToString(\",\"))\n }\n\n val missingAgent = requestHeaders[HttpHeaders.UserAgent] == null && content.headers[HttpHeaders.UserAgent] == null\n if (missingAgent && needUserAgent()) {\n block(HttpHeaders.UserAgent, KTOR_DEFAULT_USER_AGENT)\n }\n\n val type = content.contentType?.toString() ?: content.headers[HttpHeaders.ContentType]\n val length = content.contentLength?.toString() ?: content.headers[HttpHeaders.ContentLength]\n\n type?.let { block(HttpHeaders.ContentType, it) }\n length?.let { block(HttpHeaders.ContentLength, it) }\n}\n\n/**\n * Returns current call context if exists, otherwise null.\n */\n@InternalAPI\npublic suspend fun callContext(): CoroutineContext = coroutineContext[KtorCallContextElement]!!.callContext\n\n/**\n * Coroutine context element containing call job.\n */\ninternal class KtorCallContextElement(val callContext: CoroutineContext) : CoroutineContext.Element {\n override val key: CoroutineContext.Key<*>\n get() = KtorCallContextElement\n\n public companion object : CoroutineContext.Key<KtorCallContextElement>\n}\n\n/**\n * Attach [callJob] to user job using the following logic: when user job completes with exception, [callJob] completes\n * with exception too.\n */\n@OptIn(InternalCoroutinesApi::class)\ninternal suspend inline fun attachToUserJob(callJob: Job) {\n val userJob = coroutineContext[Job] ?: return\n\n val cleanupHandler = userJob.invokeOnCompletion(onCancelling = true) { cause ->\n cause ?: return@invokeOnCompletion\n callJob.cancel(CancellationException(cause.message))\n }\n\n callJob.invokeOnCompletion {\n cleanupHandler.dispose()\n }\n}\n\nprivate fun needUserAgent(): Boolean = !PlatformUtils.IS_BROWSER\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.call\n\nimport kotlin.reflect.*\n\npublic actual interface Type\n\npublic object JsType : Type\n\n@OptIn(ExperimentalStdlibApi::class)\npublic actual inline fun <reified T> typeInfo(): TypeInfo = try {\n TypeInfo(T::class, JsType, typeOf<T>())\n} catch (_: dynamic) {\n TypeInfo(T::class, JsType)\n}\n\n/**\n * Check [this] is instance of [type].\n */\ninternal actual fun Any.instanceOf(type: KClass<*>): Boolean = type.isInstance(this)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.util.*\n\n/**\n * [Feature] is used to set request default parameters.\n */\npublic class DefaultRequest(private val builder: HttpRequestBuilder.() -> Unit) {\n\n public companion object Feature : HttpClientFeature<HttpRequestBuilder, DefaultRequest> {\n override val key: AttributeKey<DefaultRequest> = AttributeKey(\"DefaultRequest\")\n\n override fun prepare(block: HttpRequestBuilder.() -> Unit): DefaultRequest =\n DefaultRequest(block)\n\n override fun install(feature: DefaultRequest, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Before) {\n context.apply(feature.builder)\n }\n }\n }\n}\n\n/**\n * Set request default parameters.\n */\npublic fun HttpClientConfig<*>.defaultRequest(block: HttpRequestBuilder.() -> Unit) {\n install(DefaultRequest) {\n block()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.statement.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlin.jvm.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\nprivate val ValidateMark = AttributeKey<Unit>(\"ValidateMark\")\n\n/**\n * Default response validation.\n * Check the response status code in range (0..299).\n */\npublic fun HttpClientConfig<*>.addDefaultResponseValidation() {\n HttpResponseValidator {\n @Suppress(\"DEPRECATION\")\n expectSuccess = this@addDefaultResponseValidation.expectSuccess\n\n validateResponse { response ->\n val expectSuccess = response.call.attributes[ExpectSuccessAttributeKey]\n if (!expectSuccess) {\n return@validateResponse\n }\n\n val statusCode = response.status.value\n val originCall = response.call\n if (statusCode < 300 || originCall.attributes.contains(ValidateMark)) {\n return@validateResponse\n }\n\n val exceptionCall = originCall.save().apply {\n attributes.put(ValidateMark, Unit)\n }\n\n val exceptionResponse = exceptionCall.response\n val exceptionResponseText = exceptionResponse.readText()\n when (statusCode) {\n in 300..399 -> throw RedirectResponseException(exceptionResponse, exceptionResponseText)\n in 400..499 -> throw ClientRequestException(exceptionResponse, exceptionResponseText)\n in 500..599 -> throw ServerResponseException(exceptionResponse, exceptionResponseText)\n else -> throw ResponseException(exceptionResponse, exceptionResponseText)\n }\n }\n }\n}\n\ninternal const val NO_RESPONSE_TEXT: String = \"<no response text provided>\"\ninternal const val DEPRECATED_EXCEPTION_CTOR: String = \"Please, provide response text in constructor\"\n\n/**\n * Base for default response exceptions.\n * @param [response]: origin response\n */\npublic open class ResponseException(\n response: HttpResponse,\n cachedResponseText: String\n) : IllegalStateException(\"Bad response: $response. Text: \\\"$cachedResponseText\\\"\") {\n @Deprecated(level = DeprecationLevel.WARNING, message = DEPRECATED_EXCEPTION_CTOR)\n public constructor(response: HttpResponse) : this(response, NO_RESPONSE_TEXT)\n\n @delegate:Transient\n private val _response: HttpResponse? by threadLocal(response)\n public val response: HttpResponse\n get() = _response ?: error(\"Failed to access response from a different native thread\")\n}\n\n/**\n * Unhandled redirect exception.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class RedirectResponseException(response: HttpResponse, cachedResponseText: String) :\n ResponseException(response, cachedResponseText) {\n @Deprecated(level = DeprecationLevel.WARNING, message = DEPRECATED_EXCEPTION_CTOR)\n public constructor(response: HttpResponse) : this(response, NO_RESPONSE_TEXT)\n\n override val message: String? = \"Unhandled redirect: ${response.call.request.url}. \" +\n \"Status: ${response.status}. Text: \\\"$cachedResponseText\\\"\"\n}\n\n/**\n * Server error exception.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class ServerResponseException(\n response: HttpResponse,\n cachedResponseText: String\n) : ResponseException(response, cachedResponseText) {\n @Deprecated(level = DeprecationLevel.WARNING, message = DEPRECATED_EXCEPTION_CTOR)\n public constructor(response: HttpResponse) : this(response, NO_RESPONSE_TEXT)\n\n override val message: String? = \"Server error(${response.call.request.url}: \" +\n \"${response.status}. Text: \\\"$cachedResponseText\\\"\"\n}\n\n/**\n * Bad client request exception.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class ClientRequestException(\n response: HttpResponse,\n cachedResponseText: String\n) : ResponseException(response, cachedResponseText) {\n @Deprecated(level = DeprecationLevel.WARNING, message = DEPRECATED_EXCEPTION_CTOR)\n public constructor(response: HttpResponse) : this(response, NO_RESPONSE_TEXT)\n\n override val message: String? = \"Client request(${response.call.request.url}) \" +\n \"invalid: ${response.status}. Text: \\\"$cachedResponseText\\\"\"\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.CancellationException\n\n/**\n * Install default transformers.\n * Usually installed by default so there is no need to use it\n * unless you have disabled it via [HttpClientConfig.useDefaultTransformers].\n */\npublic fun HttpClient.defaultTransformers() {\n val client = this\n\n requestPipeline.intercept(HttpRequestPipeline.Render) { body ->\n if (context.headers[HttpHeaders.Accept] == null) {\n context.headers.append(HttpHeaders.Accept, \"*/*\")\n }\n\n val contentType = context.headers[HttpHeaders.ContentType]?.let {\n ContentType.parse(it)\n }\n\n val content = when (body) {\n is String -> {\n TextContent(body, contentType ?: ContentType.Text.Plain)\n }\n is ByteArray -> object : OutgoingContent.ByteArrayContent() {\n override val contentType: ContentType = contentType ?: ContentType.Application.OctetStream\n override val contentLength: Long = body.size.toLong()\n override fun bytes(): ByteArray = body\n }\n is ByteReadChannel -> object : OutgoingContent.ReadChannelContent() {\n override val contentType: ContentType = contentType ?: ContentType.Application.OctetStream\n override fun readFrom(): ByteReadChannel = body\n }\n else -> null\n }\n\n if (content != null) {\n context.headers.remove(HttpHeaders.ContentType)\n proceedWith(content)\n }\n }\n\n responsePipeline.intercept(HttpResponsePipeline.Parse) { (info, body) ->\n if (body !is ByteReadChannel) return@intercept\n val response = context.response\n val contentLength = response.headers[HttpHeaders.ContentLength]?.toLong() ?: Long.MAX_VALUE\n\n when (info.type) {\n Unit::class -> {\n body.cancel()\n proceedWith(HttpResponseContainer(info, Unit))\n }\n Int::class -> {\n proceedWith(HttpResponseContainer(info, body.readRemaining().readText().toInt()))\n }\n ByteReadPacket::class,\n Input::class -> {\n proceedWith(HttpResponseContainer(info, body.readRemaining()))\n }\n ByteArray::class -> {\n val readRemaining = body.readRemaining(contentLength)\n if (contentLength < Long.MAX_VALUE) {\n check(readRemaining.remaining == contentLength) {\n \"Expected $contentLength, actual ${readRemaining.remaining}\"\n }\n }\n\n proceedWith(HttpResponseContainer(info, readRemaining.readBytes()))\n }\n ByteReadChannel::class -> {\n // the response job could be already completed so the job holder\n // could be cancelled immediately, but it doesn't matter\n // since the copying job is running under the client job\n val responseJobHolder = Job(response.coroutineContext[Job])\n val channel: ByteReadChannel = writer(client.coroutineContext) {\n try {\n body.copyTo(channel, limit = Long.MAX_VALUE)\n } catch (cause: CancellationException) {\n response.cancel(cause)\n throw cause\n } catch (cause: Throwable) {\n response.cancel(\"Receive failed\", cause)\n throw cause\n } finally {\n response.complete()\n }\n }.also { writerJob ->\n writerJob.invokeOnCompletion {\n responseJobHolder.complete()\n }\n }.channel\n\n proceedWith(HttpResponseContainer(info, channel))\n }\n HttpStatusCode::class -> {\n body.cancel()\n proceedWith(HttpResponseContainer(info, response.status))\n }\n }\n }\n\n platformDefaultTransformers()\n}\n\ninternal expect fun HttpClient.platformDefaultTransformers()\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.util.*\n\n@Deprecated(\n \"[BadResponseStatusException] is deprecated. Use [ResponseException] instead.\",\n ReplaceWith(\"ResponseException\"),\n DeprecationLevel.ERROR\n)\n@Suppress(\"KDocMissingDocumentation\")\npublic typealias BadResponseStatusException = ResponseException\n\n@Deprecated(\n \"Use [HttpCallValidator] instead.\",\n ReplaceWith(\"HttpCallValidator\"),\n DeprecationLevel.ERROR\n)\n@Suppress(\"KDocMissingDocumentation\")\npublic class ExpectSuccess {\n @Suppress(\"DEPRECATION_ERROR\")\n public companion object : HttpClientFeature<Unit, ExpectSuccess> {\n\n override val key: AttributeKey<ExpectSuccess>\n get() = error(\"Deprecated\")\n\n override fun prepare(block: Unit.() -> Unit): ExpectSuccess {\n error(\"Deprecated\")\n }\n\n override fun install(feature: ExpectSuccess, scope: HttpClient) {\n error(\"Deprecated\")\n }\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.features.HttpCallValidator.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.client.utils.*\nimport io.ktor.util.*\nimport io.ktor.util.pipeline.*\nimport kotlin.native.concurrent.*\n\n/**\n * Response validator method.\n *\n * You could throw an exception to fail the response.\n */\npublic typealias ResponseValidator = suspend (response: HttpResponse) -> Unit\n\n/**\n * Response exception handler method.\n */\npublic typealias CallExceptionHandler = suspend (cause: Throwable) -> Unit\n\n/**\n * Response validator feature is used for validate response and handle response exceptions.\n *\n * See also [Config] for additional details.\n */\npublic class HttpCallValidator internal constructor(\n private val responseValidators: List<ResponseValidator>,\n private val callExceptionHandlers: List<CallExceptionHandler>,\n private val expectSuccess: Boolean\n) {\n\n /**\n * Response validator feature is used for validate response and handle response exceptions.\n *\n * See also [Config] for additional details.\n */\n @Deprecated(\n \"This is going to become internal. \" +\n \"Please file a ticket and clarify, why do you need it.\"\n )\n public constructor(\n responseValidators: List<ResponseValidator>,\n callExceptionHandlers: List<CallExceptionHandler>\n ) : this(responseValidators, callExceptionHandlers, true)\n\n private suspend fun validateResponse(response: HttpResponse) {\n responseValidators.forEach { it(response) }\n }\n\n private suspend fun processException(cause: Throwable) {\n callExceptionHandlers.forEach { it(cause) }\n }\n\n /**\n * [HttpCallValidator] configuration.\n */\n public class Config {\n internal val responseValidators: MutableList<ResponseValidator> = mutableListOf()\n internal val responseExceptionHandlers: MutableList<CallExceptionHandler> = mutableListOf()\n\n /**\n * Terminate [HttpClient.receivePipeline] if status code is not successful (>=300).\n */\n\n @Deprecated(\n \"This property is ignored. Please use `expectSuccess` property in HttpClientConfig. \" +\n \"This is going to become internal.\"\n )\n public var expectSuccess: Boolean = true\n\n /**\n * Add [CallExceptionHandler].\n * Last added handler executes first.\n */\n public fun handleResponseException(block: CallExceptionHandler) {\n responseExceptionHandlers += block\n }\n\n /**\n * Add [ResponseValidator].\n * Last added validator executes first.\n */\n public fun validateResponse(block: ResponseValidator) {\n responseValidators += block\n }\n }\n\n public companion object : HttpClientFeature<Config, HttpCallValidator> {\n override val key: AttributeKey<HttpCallValidator> = AttributeKey(\"HttpResponseValidator\")\n\n override fun prepare(block: Config.() -> Unit): HttpCallValidator {\n val config = Config().apply(block)\n\n return HttpCallValidator(\n config.responseValidators.reversed(),\n config.responseExceptionHandlers.reversed(),\n config.expectSuccess\n )\n }\n\n override fun install(feature: HttpCallValidator, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Before) {\n try {\n context.attributes.computeIfAbsent(ExpectSuccessAttributeKey) { feature.expectSuccess }\n proceedWith(it)\n } catch (cause: Throwable) {\n val unwrappedCause = cause.unwrapCancellationException()\n feature.processException(unwrappedCause)\n throw unwrappedCause\n }\n }\n\n val BeforeReceive = PipelinePhase(\"BeforeReceive\")\n scope.responsePipeline.insertPhaseBefore(HttpResponsePipeline.Receive, BeforeReceive)\n scope.responsePipeline.intercept(BeforeReceive) { container ->\n try {\n proceedWith(container)\n } catch (cause: Throwable) {\n val unwrappedCause = cause.unwrapCancellationException()\n feature.processException(unwrappedCause)\n throw unwrappedCause\n }\n }\n\n scope[HttpSend].intercept { call, _ ->\n feature.validateResponse(call.response)\n call\n }\n }\n }\n}\n\n/**\n * Install [HttpCallValidator] with [block] configuration.\n */\npublic fun HttpClientConfig<*>.HttpResponseValidator(block: HttpCallValidator.Config.() -> Unit) {\n install(HttpCallValidator, block)\n}\n\n/**\n * Terminate [HttpClient.receivePipeline] if status code is not successful (>=300).\n */\npublic var HttpRequestBuilder.expectSuccess: Boolean\n get() = attributes.getOrNull(ExpectSuccessAttributeKey) ?: true\n set(value) = attributes.put(ExpectSuccessAttributeKey, value)\n\n@SharedImmutable\ninternal val ExpectSuccessAttributeKey = AttributeKey<Boolean>(\"ExpectSuccessAttribyteKey\")\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.util.*\nimport kotlin.native.concurrent.*\n\n@SharedImmutable\ninternal val FEATURE_INSTALLED_LIST = AttributeKey<Attributes>(\"ApplicationFeatureRegistry\")\n\n/**\n * Base interface representing a [HttpClient] feature.\n */\npublic interface HttpClientFeature<out TConfig : Any, TFeature : Any> {\n /**\n * The [AttributeKey] for this feature.\n */\n public val key: AttributeKey<TFeature>\n\n /**\n * Builds a [TFeature] by calling the [block] with a [TConfig] config instance as receiver.\n */\n public fun prepare(block: TConfig.() -> Unit = {}): TFeature\n\n /**\n * Installs the [feature] class for a [HttpClient] defined at [scope].\n */\n public fun install(feature: TFeature, scope: HttpClient)\n}\n\n/**\n * Try to get the [feature] installed in this client. Returns `null` if the feature was not previously installed.\n */\npublic fun <B : Any, F : Any> HttpClient.feature(feature: HttpClientFeature<B, F>): F? =\n attributes.getOrNull(FEATURE_INSTALLED_LIST)?.getOrNull(feature.key)\n\n/**\n * Find the [feature] installed in [HttpClient].\n *\n * @throws [IllegalStateException] if [feature] is not installed.\n */\npublic operator fun <B : Any, F : Any> HttpClient.get(feature: HttpClientFeature<B, F>): F {\n val requestedFeature = feature(feature)\n if (requestedFeature != null) {\n return requestedFeature\n }\n\n val message = \"Feature $feature is not installed. Consider using `install(${feature.key})` in client config first.\"\n error(message)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlin.math.*\n\n/**\n * [HttpClient] feature that encodes [String] request bodies to [TextContent]\n * and processes the response body as [String].\n *\n * To configure charsets set following properties in [HttpPlainText.Config].\n */\npublic class HttpPlainText internal constructor(\n charsets: Set<Charset>,\n charsetQuality: Map<Charset, Float>,\n sendCharset: Charset?,\n private val responseCharsetFallback: Charset\n) {\n private val requestCharset: Charset\n private val acceptCharsetHeader: String\n\n init {\n val withQuality = charsetQuality.toList().sortedByDescending { it.second }\n val withoutQuality = charsets.filter { !charsetQuality.containsKey(it) }.sortedBy { it.name }\n\n acceptCharsetHeader = buildString {\n withoutQuality.forEach {\n if (length > 0) append(\",\")\n append(it.name)\n }\n\n withQuality.forEach { (charset, quality) ->\n if (length > 0) append(\",\")\n\n check(quality in 0.0..1.0)\n\n val truncatedQuality = (100 * quality).roundToInt() / 100.0\n append(\"${charset.name};q=$truncatedQuality\")\n }\n\n if (isEmpty()) {\n append(responseCharsetFallback.name)\n }\n }\n\n requestCharset = sendCharset\n ?: withoutQuality.firstOrNull() ?: withQuality.firstOrNull()?.first ?: Charsets.UTF_8\n }\n\n /**\n * Charset configuration for [HttpPlainText] feature.\n */\n public class Config {\n internal val charsets: MutableSet<Charset> = mutableSetOf()\n internal val charsetQuality: MutableMap<Charset, Float> = mutableMapOf()\n\n /**\n * Add [charset] to allowed list with selected [quality].\n */\n public fun register(charset: Charset, quality: Float? = null) {\n quality?.let { check(it in 0.0..1.0) }\n\n charsets.add(charset)\n\n if (quality == null) {\n charsetQuality.remove(charset)\n } else {\n charsetQuality[charset] = quality\n }\n }\n\n /**\n * Explicit [Charset] for sending content.\n *\n * Use first with highest quality from [register] charset if null.\n */\n public var sendCharset: Charset? = null\n\n /**\n * Fallback charset for the response.\n * Use it if no charset specified.\n */\n public var responseCharsetFallback: Charset = Charsets.UTF_8\n\n /**\n * Default [Charset] to use.\n */\n @Suppress(\"unused\")\n @Deprecated(\n \"Use [register] method instead.\",\n replaceWith = ReplaceWith(\"register()\"),\n level = DeprecationLevel.ERROR\n )\n public var defaultCharset: Charset = Charsets.UTF_8\n }\n\n @Suppress(\"KDocMissingDocumentation\")\n public companion object Feature : HttpClientFeature<Config, HttpPlainText> {\n override val key: AttributeKey<HttpPlainText> = AttributeKey(\"HttpPlainText\")\n\n override fun prepare(block: Config.() -> Unit): HttpPlainText {\n val config = Config().apply(block)\n\n with(config) {\n return HttpPlainText(\n charsets,\n charsetQuality,\n sendCharset,\n responseCharsetFallback\n )\n }\n }\n\n override fun install(feature: HttpPlainText, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Render) { content ->\n feature.addCharsetHeaders(context)\n\n if (content !is String) {\n return@intercept\n }\n\n val contentType = context.contentType()\n if (contentType != null && contentType.contentType != ContentType.Text.Plain.contentType) {\n return@intercept\n }\n\n val contentCharset = contentType?.charset()\n proceedWith(feature.wrapContent(content, contentCharset))\n }\n\n scope.responsePipeline.intercept(HttpResponsePipeline.Parse) { (info, body) ->\n if (info.type != String::class || body !is ByteReadChannel) return@intercept\n\n val bodyBytes = body.readRemaining()\n val content = feature.read(context, bodyBytes)\n proceedWith(HttpResponseContainer(info, content))\n }\n }\n }\n\n private fun wrapContent(content: String, contentCharset: Charset?): Any {\n val charset = contentCharset ?: requestCharset\n return TextContent(content, ContentType.Text.Plain.withCharset(charset))\n }\n\n internal fun read(call: HttpClientCall, body: Input): String {\n val actualCharset = call.response.charset() ?: responseCharsetFallback\n return body.readText(charset = actualCharset)\n }\n\n internal fun addCharsetHeaders(context: HttpRequestBuilder) {\n if (context.headers[HttpHeaders.AcceptCharset] != null) return\n context.headers[HttpHeaders.AcceptCharset] = acceptCharsetHeader\n }\n\n /**\n * Deprecated\n */\n @Suppress(\"unused\", \"UNUSED_PARAMETER\")\n @Deprecated(\n \"Use [Config.register] method instead.\",\n replaceWith = ReplaceWith(\"register()\"),\n level = DeprecationLevel.ERROR\n )\n public var defaultCharset: Charset\n get() = error(\"defaultCharset is deprecated\")\n set(value) = error(\"defaultCharset is deprecated\")\n}\n\n/**\n * Configure client charsets.\n *\n * ```kotlin\n * val client = HttpClient {\n * Charsets {\n * register(Charsets.UTF_8)\n * register(Charsets.ISO_8859_1, quality = 0.1)\n * }\n * }\n * ```\n */\n@Suppress(\"FunctionName\")\npublic fun HttpClientConfig<*>.Charsets(block: HttpPlainText.Config.() -> Unit) {\n install(HttpPlainText, block)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport kotlinx.atomicfu.*\nimport kotlin.jvm.*\nimport kotlin.native.concurrent.*\n\n@ThreadLocal\nprivate val ALLOWED_FOR_REDIRECT: Set<HttpMethod> = setOf(HttpMethod.Get, HttpMethod.Head)\n\n/**\n * [HttpClient] feature that handles http redirect\n */\npublic class HttpRedirect {\n private val _checkHttpMethod = atomic(true)\n private val _allowHttpsDowngrade = atomic(false)\n\n /**\n * Check if the HTTP method is allowed for redirect.\n * Only [HttpMethod.Get] and [HttpMethod.Head] is allowed for implicit redirect.\n *\n * Please note: changing this flag could lead to security issues, consider changing the request URL instead.\n */\n public var checkHttpMethod: Boolean\n get() = _checkHttpMethod.value\n set(value) {\n _checkHttpMethod.value = value\n }\n\n /**\n * `true` value allows client redirect with downgrade from https to plain http.\n */\n public var allowHttpsDowngrade: Boolean\n get() = _allowHttpsDowngrade.value\n set(value) {\n _allowHttpsDowngrade.value = value\n }\n\n public companion object Feature : HttpClientFeature<HttpRedirect, HttpRedirect> {\n override val key: AttributeKey<HttpRedirect> = AttributeKey(\"HttpRedirect\")\n\n override fun prepare(block: HttpRedirect.() -> Unit): HttpRedirect = HttpRedirect().apply(block)\n\n override fun install(feature: HttpRedirect, scope: HttpClient) {\n scope[HttpSend].intercept { origin, context ->\n if (feature.checkHttpMethod && origin.request.method !in ALLOWED_FOR_REDIRECT) {\n return@intercept origin\n }\n\n handleCall(context, origin, feature.allowHttpsDowngrade)\n }\n }\n\n private suspend fun Sender.handleCall(\n context: HttpRequestBuilder,\n origin: HttpClientCall,\n allowHttpsDowngrade: Boolean\n ): HttpClientCall {\n if (!origin.response.status.isRedirect()) return origin\n\n var call = origin\n var requestBuilder = context\n val originProtocol = origin.request.url.protocol\n val originAuthority = origin.request.url.authority\n while (true) {\n val location = call.response.headers[HttpHeaders.Location]\n\n requestBuilder = HttpRequestBuilder().apply {\n takeFromWithExecutionContext(requestBuilder)\n url.parameters.clear()\n\n location?.let { url.takeFrom(it) }\n\n /**\n * Disallow redirect with a security downgrade.\n */\n if (!allowHttpsDowngrade && originProtocol.isSecure() && !url.protocol.isSecure()) {\n return call\n }\n\n if (originAuthority != url.authority) {\n headers.remove(HttpHeaders.Authorization)\n }\n }\n\n call = execute(requestBuilder)\n if (!call.response.status.isRedirect()) return call\n }\n }\n }\n}\n\nprivate fun HttpStatusCode.isRedirect(): Boolean = when (value) {\n HttpStatusCode.MovedPermanently.value,\n HttpStatusCode.Found.value,\n HttpStatusCode.TemporaryRedirect.value,\n HttpStatusCode.PermanentRedirect.value,\n HttpStatusCode.SeeOther.value -> true\n else -> false\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\n\n/**\n * Client HTTP feature that sets up [HttpRequestBuilder.executionContext] and completes it when the pipeline is fully\n * processed.\n */\ninternal class HttpRequestLifecycle {\n /**\n * Companion object for feature installation.\n */\n companion object Feature : HttpClientFeature<Unit, HttpRequestLifecycle> {\n\n override val key: AttributeKey<HttpRequestLifecycle> = AttributeKey(\"RequestLifecycle\")\n\n override fun prepare(block: Unit.() -> Unit): HttpRequestLifecycle = HttpRequestLifecycle()\n\n override fun install(feature: HttpRequestLifecycle, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Before) {\n val executionContext = Job(context.executionContext).also {\n it.makeShared()\n }\n\n attachToClientEngineJob(executionContext, scope.coroutineContext[Job]!!)\n\n try {\n context.executionContext = executionContext\n proceed()\n } catch (cause: Throwable) {\n executionContext.completeExceptionally(cause)\n throw cause\n } finally {\n executionContext.complete()\n }\n }\n }\n }\n}\n\n/**\n * Attach client engine job.\n */\nprivate fun attachToClientEngineJob(\n requestJob: CompletableJob,\n clientEngineJob: Job\n) {\n clientEngineJob.makeShared()\n\n val handler = clientEngineJob.invokeOnCompletion { cause ->\n if (cause != null) {\n requestJob.cancel(\"Engine failed\", cause)\n } else {\n requestJob.complete()\n }\n }\n\n requestJob.invokeOnCompletion {\n handler.dispose()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.client.utils.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.coroutines.*\n\n/**\n * HttpSend pipeline interceptor function\n */\npublic typealias HttpSendInterceptor = suspend Sender.(HttpClientCall, HttpRequestBuilder) -> HttpClientCall\n\n/**\n * HttpSend pipeline interceptor function backward compatible with previous implementation.\n */\npublic typealias HttpSendInterceptorBackwardCompatible = suspend Sender.(HttpClientCall) -> HttpClientCall\n\n/**\n * This interface represents a request send pipeline interceptor chain\n */\n@KtorExperimentalAPI\npublic interface Sender {\n /**\n * Execute send pipeline. It could start pipeline execution or replace the call\n */\n public suspend fun execute(requestBuilder: HttpRequestBuilder): HttpClientCall\n}\n\n/**\n * This is internal feature that is always installed.\n * @property maxSendCount is a maximum number of requests that can be sent during a call\n */\n@KtorExperimentalAPI\npublic class HttpSend(\n maxSendCount: Int = 20\n) {\n public var maxSendCount: Int by shared(maxSendCount)\n\n private val interceptors: MutableList<HttpSendInterceptor> = sharedList()\n\n init {\n makeShared()\n }\n\n /**\n * Install send pipeline starter interceptor\n */\n public fun intercept(block: HttpSendInterceptor) {\n interceptors += block\n }\n\n /**\n * Install send pipeline starter interceptor (backward compatible function).\n */\n @Deprecated(\"Intercept with one parameter is deprecated, use both call and request builder as parameters.\")\n public fun intercept(block: HttpSendInterceptorBackwardCompatible) {\n interceptors += { call, _ ->\n block(call)\n }\n }\n\n /**\n * Feature installation object\n */\n public companion object Feature : HttpClientFeature<HttpSend, HttpSend> {\n override val key: AttributeKey<HttpSend> = AttributeKey(\"HttpSend\")\n\n override fun prepare(block: HttpSend.() -> Unit): HttpSend = HttpSend().apply(block)\n\n override fun install(feature: HttpSend, scope: HttpClient) {\n // default send scenario\n scope.requestPipeline.intercept(HttpRequestPipeline.Send) { content ->\n check(content is OutgoingContent) {\n \"\"\"\n|Fail to serialize body. Content has type: ${content::class}, but OutgoingContent expected.\n|If you expect serialized body, please check that you have installed the corresponding feature(like `Json`) and set `Content-Type` header.\"\"\"\n .trimMargin()\n }\n context.body = content\n\n val sender = DefaultSender(feature.maxSendCount, scope)\n var currentCall = sender.execute(context)\n var callChanged: Boolean\n\n do {\n callChanged = false\n\n passInterceptors@ for (interceptor in feature.interceptors) {\n val transformed = interceptor(sender, currentCall, context)\n if (transformed === currentCall) continue@passInterceptors\n\n currentCall = transformed\n callChanged = true\n break@passInterceptors\n }\n } while (callChanged)\n\n proceedWith(currentCall)\n }\n }\n }\n\n private class DefaultSender(\n private val maxSendCount: Int,\n private val client: HttpClient\n ) : Sender {\n private var sentCount: Int = 0\n private var currentCall: HttpClientCall? = null\n\n override suspend fun execute(requestBuilder: HttpRequestBuilder): HttpClientCall {\n currentCall?.cancel()\n\n if (sentCount >= maxSendCount) {\n throw SendCountExceedException(\"Max send count $maxSendCount exceeded\")\n }\n\n sentCount++\n val sendResult = client.sendPipeline.execute(\n requestBuilder,\n requestBuilder.body\n )\n\n val call = sendResult as? HttpClientCall\n ?: error(\"Failed to execute send pipeline. Expected to got [HttpClientCall], but received $sendResult\")\n\n currentCall = call\n return call\n }\n }\n}\n\n/**\n * Thrown when too many actual requests were sent during a client call.\n * It could be caused by infinite or too long redirect sequence.\n * Maximum number of requests is limited by [HttpSend.maxSendCount]\n */\npublic class SendCountExceedException(message: String) : IllegalStateException(message)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\nimport io.ktor.client.engine.*\nimport io.ktor.client.request.*\nimport io.ktor.network.sockets.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.concurrent.*\nimport kotlinx.coroutines.*\n\n/**\n * Client HTTP timeout feature. There are no default values, so default timeouts will be taken from engine configuration\n * or considered as infinite time if engine doesn't provide them.\n */\npublic class HttpTimeout(\n private val requestTimeoutMillis: Long?,\n private val connectTimeoutMillis: Long?,\n private val socketTimeoutMillis: Long?\n) {\n /**\n * [HttpTimeout] extension configuration that is used during installation.\n */\n public class HttpTimeoutCapabilityConfiguration {\n private var _requestTimeoutMillis: Long? by shared(0)\n private var _connectTimeoutMillis: Long? by shared(0)\n private var _socketTimeoutMillis: Long? by shared(0)\n\n /**\n * Creates a new instance of [HttpTimeoutCapabilityConfiguration].\n */\n @InternalAPI\n public constructor(\n requestTimeoutMillis: Long? = null,\n connectTimeoutMillis: Long? = null,\n socketTimeoutMillis: Long? = null\n ) {\n this.requestTimeoutMillis = requestTimeoutMillis\n this.connectTimeoutMillis = connectTimeoutMillis\n this.socketTimeoutMillis = socketTimeoutMillis\n }\n\n /**\n * Request timeout in milliseconds.\n */\n public var requestTimeoutMillis: Long?\n get() = _requestTimeoutMillis\n set(value) {\n _requestTimeoutMillis = checkTimeoutValue(value)\n }\n\n /**\n * Connect timeout in milliseconds.\n */\n public var connectTimeoutMillis: Long?\n get() = _connectTimeoutMillis\n set(value) {\n _connectTimeoutMillis = checkTimeoutValue(value)\n }\n\n /**\n * Socket timeout (read and write) in milliseconds.\n */\n public var socketTimeoutMillis: Long?\n get() = _socketTimeoutMillis\n set(value) {\n _socketTimeoutMillis = checkTimeoutValue(value)\n }\n\n internal fun build(): HttpTimeout = HttpTimeout(requestTimeoutMillis, connectTimeoutMillis, socketTimeoutMillis)\n\n private fun checkTimeoutValue(value: Long?): Long? {\n require(value == null || value > 0) {\n \"Only positive timeout values are allowed, for infinite timeout use HttpTimeout.INFINITE_TIMEOUT_MS\"\n }\n return value\n }\n\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (other == null || this::class != other::class) return false\n\n other as HttpTimeoutCapabilityConfiguration\n\n if (_requestTimeoutMillis != other._requestTimeoutMillis) return false\n if (_connectTimeoutMillis != other._connectTimeoutMillis) return false\n if (_socketTimeoutMillis != other._socketTimeoutMillis) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n var result = _requestTimeoutMillis?.hashCode() ?: 0\n result = 31 * result + (_connectTimeoutMillis?.hashCode() ?: 0)\n result = 31 * result + (_socketTimeoutMillis?.hashCode() ?: 0)\n return result\n }\n\n public companion object {\n public val key: AttributeKey<HttpTimeoutCapabilityConfiguration> = AttributeKey(\"TimeoutConfiguration\")\n }\n }\n\n /**\n * Utils method that return true if at least one timeout is configured (has not null value).\n */\n private fun hasNotNullTimeouts() =\n requestTimeoutMillis != null || connectTimeoutMillis != null || socketTimeoutMillis != null\n\n /**\n * Companion object for feature installation.\n */\n public companion object Feature :\n HttpClientFeature<HttpTimeoutCapabilityConfiguration, HttpTimeout>,\n HttpClientEngineCapability<HttpTimeoutCapabilityConfiguration> {\n\n override val key: AttributeKey<HttpTimeout> = AttributeKey(\"TimeoutFeature\")\n\n /**\n * Infinite timeout in milliseconds.\n */\n public const val INFINITE_TIMEOUT_MS: Long = Long.MAX_VALUE\n\n override fun prepare(block: HttpTimeoutCapabilityConfiguration.() -> Unit): HttpTimeout =\n HttpTimeoutCapabilityConfiguration().apply(block).build()\n\n override fun install(feature: HttpTimeout, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Before) {\n var configuration = context.getCapabilityOrNull(HttpTimeout)\n if (configuration == null && feature.hasNotNullTimeouts()) {\n configuration = HttpTimeoutCapabilityConfiguration()\n context.setCapability(HttpTimeout, configuration)\n }\n\n configuration?.apply {\n connectTimeoutMillis = connectTimeoutMillis ?: feature.connectTimeoutMillis\n socketTimeoutMillis = socketTimeoutMillis ?: feature.socketTimeoutMillis\n requestTimeoutMillis = requestTimeoutMillis ?: feature.requestTimeoutMillis\n\n val requestTimeout = requestTimeoutMillis ?: feature.requestTimeoutMillis\n if (requestTimeout == null || requestTimeout == INFINITE_TIMEOUT_MS) return@apply\n\n val executionContext = context.executionContext\n val killer = scope.launch {\n delay(requestTimeout)\n executionContext.cancel(HttpRequestTimeoutException(context))\n }\n\n context.executionContext.invokeOnCompletion {\n killer.cancel()\n }\n }\n }\n }\n }\n}\n\n/**\n * Adds timeout boundaries to the request. Requires [HttpTimeout] feature to be installed.\n */\npublic fun HttpRequestBuilder.timeout(block: HttpTimeout.HttpTimeoutCapabilityConfiguration.() -> Unit): Unit =\n setCapability(HttpTimeout, HttpTimeout.HttpTimeoutCapabilityConfiguration().apply(block))\n\n/**\n * This exception is thrown in case request timeout exceeded.\n */\npublic class HttpRequestTimeoutException(\n request: HttpRequestBuilder\n) : CancellationException(\n \"Request timeout has been expired [url=${request.url.buildString()}, \" +\n \"request_timeout=${request.getCapabilityOrNull(HttpTimeout)?.requestTimeoutMillis ?: \"unknown\"} ms]\"\n)\n\n/**\n * This exception is thrown in case connect timeout exceeded.\n */\npublic fun ConnectTimeoutException(\n request: HttpRequestData,\n cause: Throwable? = null\n): ConnectTimeoutException = ConnectTimeoutException(\n \"Connect timeout has been expired [url=${request.url}, \" +\n \"connect_timeout=${request.getCapabilityOrNull(HttpTimeout)?.connectTimeoutMillis ?: \"unknown\"} ms]\",\n cause\n)\n\n/**\n * This exception is thrown in case connect timeout exceeded.\n */\npublic fun ConnectTimeoutException(\n url: String,\n timeout: Long?,\n cause: Throwable? = null\n): ConnectTimeoutException = ConnectTimeoutException(\n \"Connect timeout has been expired [url=$url, connect_timeout=${timeout ?: \"unknown\"} ms]\",\n cause\n)\n\n/**\n * This exception is thrown in case socket timeout (read or write) exceeded.\n */\npublic fun SocketTimeoutException(\n request: HttpRequestData,\n cause: Throwable? = null\n): SocketTimeoutException = SocketTimeoutException(\n \"Socket timeout has been expired [url=${request.url}, \" +\n \"socket_timeout=${request.getCapabilityOrNull(HttpTimeout)?.socketTimeoutMillis ?: \"unknown\"}] ms\",\n cause\n)\n\n/**\n * Convert long timeout in milliseconds to int value. To do that we need to consider [HttpTimeout.INFINITE_TIMEOUT_MS]\n * as zero and convert timeout value to [Int].\n */\n@InternalAPI\npublic fun convertLongTimeoutToIntWithInfiniteAsZero(timeout: Long): Int = when {\n timeout == HttpTimeout.INFINITE_TIMEOUT_MS -> 0\n timeout < Int.MIN_VALUE -> Int.MIN_VALUE\n timeout > Int.MAX_VALUE -> Int.MAX_VALUE\n else -> timeout.toInt()\n}\n\n/**\n * Convert long timeout in milliseconds to long value. To do that we need to consider [HttpTimeout.INFINITE_TIMEOUT_MS]\n * as zero and convert timeout value to [Int].\n */\n@InternalAPI\npublic fun convertLongTimeoutToLongWithInfiniteAsZero(timeout: Long): Long = when (timeout) {\n HttpTimeout.INFINITE_TIMEOUT_MS -> 0L\n else -> timeout\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.cookies\n\nimport io.ktor.client.*\nimport io.ktor.client.features.*\nimport io.ktor.client.features.cookies.HttpCookies.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\n/**\n * [HttpClient] feature that handles sent `Cookie`, and received `Set-Cookie` headers,\n * using a specific [storage] for storing and retrieving cookies.\n *\n * You can configure the [Config.storage] and to provide [Config.default] blocks to set\n * cookies when installing.\n */\npublic class HttpCookies(\n private val storage: CookiesStorage,\n private val defaults: List<suspend CookiesStorage.() -> Unit>\n) : Closeable {\n private val initializer: Job = GlobalScope.launch(Dispatchers.Unconfined) {\n defaults.forEach { it(storage) }\n }\n\n /**\n * Find all cookies by [requestUrl].\n */\n public suspend fun get(requestUrl: Url): List<Cookie> {\n initializer.join()\n return storage.get(requestUrl)\n }\n\n internal suspend fun sendCookiesWith(builder: HttpRequestBuilder) {\n val cookies = get(builder.url.clone().build())\n\n with(builder) {\n if (cookies.isNotEmpty()) {\n headers[HttpHeaders.Cookie] = renderClientCookies(cookies)\n } else {\n headers.remove(HttpHeaders.Cookie)\n }\n }\n }\n\n internal suspend fun saveCookiesFrom(response: HttpResponse) {\n val url = response.request.url\n response.setCookie().forEach {\n storage.addCookie(url, it)\n }\n }\n\n override fun close() {\n storage.close()\n }\n\n /**\n * [HttpCookies] configuration.\n */\n public class Config {\n private val defaults = mutableListOf<suspend CookiesStorage.() -> Unit>()\n\n /**\n * [CookiesStorage] that will be used at this feature.\n * By default it just uses an initially empty in-memory [AcceptAllCookiesStorage].\n */\n public var storage: CookiesStorage = AcceptAllCookiesStorage()\n\n /**\n * Registers a [block] that will be called when the configuration is complete the specified [storage].\n * The [block] can potentially add new cookies by calling [CookiesStorage.addCookie].\n */\n public fun default(block: suspend CookiesStorage.() -> Unit) {\n defaults.add(block)\n }\n\n internal fun build(): HttpCookies = HttpCookies(storage, defaults)\n }\n\n public companion object : HttpClientFeature<Config, HttpCookies> {\n override fun prepare(block: Config.() -> Unit): HttpCookies = Config().apply(block).build()\n\n override val key: AttributeKey<HttpCookies> = AttributeKey(\"HttpCookies\")\n\n override fun install(feature: HttpCookies, scope: HttpClient) {\n scope.sendPipeline.intercept(HttpSendPipeline.State) {\n feature.sendCookiesWith(context)\n }\n\n scope.receivePipeline.intercept(HttpReceivePipeline.State) { response ->\n feature.saveCookiesFrom(response)\n }\n }\n }\n}\n\nprivate fun renderClientCookies(cookies: List<Cookie>): String = buildString {\n cookies.forEach {\n append(it.name)\n append('=')\n append(encodeCookieValue(it.value, it.encoding))\n append(';')\n }\n}\n\n/**\n * Gets all the cookies for the specified [url] for this [HttpClient].\n */\npublic suspend fun HttpClient.cookies(url: Url): List<Cookie> = feature(HttpCookies)?.get(url) ?: emptyList()\n\n/**\n * Gets all the cookies for the specified [urlString] for this [HttpClient].\n */\npublic suspend fun HttpClient.cookies(urlString: String): List<Cookie> =\n feature(HttpCookies)?.get(Url(urlString)) ?: emptyList()\n\n/**\n * Find the [Cookie] by [name]\n */\npublic operator fun List<Cookie>.get(name: String): Cookie? = find { it.name == name }\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.observer\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport kotlin.coroutines.*\n\n/**\n * Wrap existing [HttpClientCall] with new [content].\n */\n@Deprecated(\n \"Parameter [shouldCloseOrigin] is deprecated\",\n ReplaceWith(\"wrapWithContent(content)\"),\n level = DeprecationLevel.ERROR\n)\npublic fun HttpClientCall.wrapWithContent(\n content: ByteReadChannel,\n shouldCloseOrigin: Boolean\n): HttpClientCall = wrapWithContent(content)\n\n/**\n * Wrap existing [HttpClientCall] with new [content].\n */\n@KtorExperimentalAPI\npublic fun HttpClientCall.wrapWithContent(content: ByteReadChannel): HttpClientCall {\n val currentClient = client ?: error(\"Fail to create response observer in different native thread.\")\n\n return DelegatedCall(currentClient, content, this)\n}\n\ninternal class DelegatedCall(\n client: HttpClient,\n content: ByteReadChannel,\n originCall: HttpClientCall\n) : HttpClientCall(client) {\n\n init {\n request = DelegatedRequest(this, originCall.request)\n response = DelegatedResponse(this, content, originCall.response)\n }\n}\n\ninternal class DelegatedRequest(\n override val call: HttpClientCall,\n origin: HttpRequest\n) : HttpRequest by origin\n\ninternal class DelegatedResponse(\n override val call: HttpClientCall,\n override val content: ByteReadChannel,\n private val origin: HttpResponse\n) : HttpResponse() {\n override val coroutineContext: CoroutineContext = origin.coroutineContext\n\n override val status: HttpStatusCode get() = origin.status\n\n override val version: HttpProtocolVersion get() = origin.version\n\n override val requestTime: GMTDate get() = origin.requestTime\n\n override val responseTime: GMTDate get() = origin.responseTime\n\n override val headers: Headers get() = origin.headers\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.observer\n\nimport io.ktor.client.*\nimport io.ktor.client.features.*\nimport io.ktor.client.statement.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\n\n/**\n * [ResponseObserver] callback.\n */\npublic typealias ResponseHandler = suspend (HttpResponse) -> Unit\n\n/**\n * Observe response feature.\n */\npublic class ResponseObserver(\n private val responseHandler: ResponseHandler\n) {\n public class Config {\n internal var responseHandler: ResponseHandler = {}\n\n /**\n * Set response handler for logging.\n */\n public fun onResponse(block: ResponseHandler) {\n responseHandler = block\n }\n }\n\n public companion object Feature : HttpClientFeature<Config, ResponseObserver> {\n\n override val key: AttributeKey<ResponseObserver> = AttributeKey(\"BodyInterceptor\")\n\n override fun prepare(block: Config.() -> Unit): ResponseObserver =\n ResponseObserver(Config().apply(block).responseHandler)\n\n override fun install(feature: ResponseObserver, scope: HttpClient) {\n scope.receivePipeline.intercept(HttpReceivePipeline.After) { response ->\n val (loggingContent, responseContent) = response.content.split(response)\n\n val newClientCall = context.wrapWithContent(responseContent)\n val sideCall = newClientCall.wrapWithContent(loggingContent)\n\n scope.launch {\n try {\n feature.responseHandler(sideCall.response)\n } catch (_: Throwable) {\n }\n\n val content = sideCall.response.content\n if (!content.isClosedForRead) {\n content.discard()\n }\n }\n\n context.response = newClientCall.response\n context.request = newClientCall.request\n\n @Suppress(\"UNCHECKED_CAST\")\n (response.coroutineContext[Job] as CompletableJob).complete()\n proceedWith(context.response)\n }\n }\n }\n}\n\n/**\n * Install [ResponseObserver] feature in client.\n */\npublic fun HttpClientConfig<*>.ResponseObserver(block: ResponseHandler) {\n install(ResponseObserver) {\n responseHandler = block\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.websocket\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.http.cio.websocket.*\n\n/**\n * Install [WebSockets] feature using the [config] as configuration.\n */\npublic fun HttpClientConfig<*>.WebSockets(config: WebSockets.Config.() -> Unit) {\n install(WebSockets) {\n config()\n }\n}\n\n/**\n * Open [DefaultClientWebSocketSession].\n */\n@OptIn(WebSocketInternalAPI::class)\npublic suspend fun HttpClient.webSocketSession(\n block: HttpRequestBuilder.() -> Unit\n): DefaultClientWebSocketSession = request {\n url {\n protocol = URLProtocol.WS\n port = protocol.defaultPort\n }\n block()\n}\n\n/**\n * Open [DefaultClientWebSocketSession].\n */\n@OptIn(WebSocketInternalAPI::class)\npublic suspend fun HttpClient.webSocketSession(\n method: HttpMethod = HttpMethod.Get,\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n block: HttpRequestBuilder.() -> Unit = {}\n): DefaultClientWebSocketSession = webSocketSession {\n this.method = method\n url(\"ws\", host, port, path)\n block()\n}\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.webSocket(\n request: HttpRequestBuilder.() -> Unit,\n block: suspend DefaultClientWebSocketSession.() -> Unit\n) {\n val session = request<HttpStatement> {\n url {\n protocol = URLProtocol.WS\n port = protocol.defaultPort\n }\n request()\n }\n\n session.receive<DefaultClientWebSocketSession, Unit> {\n try {\n block(it)\n } finally {\n it.close()\n }\n }\n}\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.webSocket(\n method: HttpMethod = HttpMethod.Get,\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n) {\n webSocket(\n {\n this.method = method\n url(\"ws\", host, port, path)\n request()\n },\n block\n )\n}\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.webSocket(\n urlString: String,\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n) {\n webSocket(\n HttpMethod.Get,\n \"localhost\",\n DEFAULT_PORT,\n \"/\",\n {\n url.protocol = URLProtocol.WS\n url.port = port\n\n url.takeFrom(urlString)\n request()\n },\n block\n )\n}\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.ws(\n method: HttpMethod = HttpMethod.Get,\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = webSocket(method, host, port, path, request, block)\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.ws(\n request: HttpRequestBuilder.() -> Unit,\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = webSocket(request, block)\n\n/**\n * Open [block] with [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.ws(\n urlString: String,\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = webSocket(urlString, request, block)\n\n/**\n * Open [block] with secure [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.wss(\n request: HttpRequestBuilder.() -> Unit,\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = webSocket(\n {\n url.protocol = URLProtocol.WSS\n url.port = url.protocol.defaultPort\n request()\n },\n block = block\n)\n\n/**\n * Open [block] with secure [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.wss(\n urlString: String,\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = wss(\n {\n url.takeFrom(urlString)\n request()\n },\n block = block\n)\n\n/**\n * Open [block] with secure [DefaultClientWebSocketSession].\n */\npublic suspend fun HttpClient.wss(\n method: HttpMethod = HttpMethod.Get,\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n request: HttpRequestBuilder.() -> Unit = {},\n block: suspend DefaultClientWebSocketSession.() -> Unit\n): Unit = webSocket(\n method,\n host,\n port,\n path,\n request = {\n url.protocol = URLProtocol.WSS\n url.port = port\n\n request()\n },\n block = block\n)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.statement\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.engine.*\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\n/**\n * Prepared statement for http client request.\n * This statement doesn't perform any network requests until [execute] method call.\n *\n * [HttpStatement] is safe to execute multiple times.\n */\npublic class HttpStatement(\n private val builder: HttpRequestBuilder,\n private val client: HttpClient\n) {\n init {\n checkCapabilities()\n }\n\n /**\n * Executes this statement and call the [block] with the streaming [response].\n *\n * The [response] argument holds a network connection until the [block] isn't completed. You can read the body\n * on-demand or at once with [receive<T>()] method.\n *\n * After [block] finishes, [response] will be completed body will be discarded or released depends on the engine configuration.\n *\n * Please note: the [response] instance will be canceled and shouldn't be passed outside of [block].\n */\n public suspend fun <T> execute(block: suspend (response: HttpResponse) -> T): T {\n val response: HttpResponse = executeUnsafe()\n\n try {\n return block(response)\n } finally {\n response.cleanup()\n }\n }\n\n /**\n * Executes this statement and download the response.\n * After the method finishes, the client downloads the response body in memory and release the connection.\n *\n * To receive exact type you consider using [receive<T>()] method.\n */\n public suspend fun execute(): HttpResponse = execute {\n val savedCall = it.call.save()\n savedCall.response\n }\n\n /**\n * Executes this statement and run [HttpClient.responsePipeline] with the response and expected type [T].\n *\n * Note if T is a streaming type, you should manage how to close it manually.\n */\n @OptIn(ExperimentalStdlibApi::class)\n public suspend inline fun <reified T> receive(): T = when (T::class) {\n HttpStatement::class -> this as T\n HttpResponse::class -> execute() as T\n else -> {\n val response = executeUnsafe()\n try {\n response.receive<T>()\n } finally {\n response.complete()\n }\n }\n }\n\n /**\n * Executes this statement and run the [block] with a [HttpClient.responsePipeline] execution result.\n *\n * Note that T can be a streamed type such as [ByteReadChannel].\n */\n public suspend inline fun <reified T, R> receive(crossinline block: suspend (response: T) -> R): R {\n val response: HttpResponse = executeUnsafe()\n try {\n val result = response.receive<T>()\n return block(result)\n } finally {\n response.cleanup()\n }\n }\n\n /**\n * Return [HttpResponse] with open streaming body.\n */\n @PublishedApi\n internal suspend fun executeUnsafe(): HttpResponse {\n val builder = HttpRequestBuilder().takeFromWithExecutionContext(builder)\n @Suppress(\"DEPRECATION_ERROR\")\n val call = client.execute(builder)\n return call.response\n }\n\n /**\n * Complete [HttpResponse] and release resources.\n */\n @PublishedApi\n internal suspend fun HttpResponse.cleanup() {\n val job = coroutineContext[Job]!! as CompletableJob\n\n job.apply {\n complete()\n try {\n content.cancel()\n } catch (_: Throwable) {\n }\n join()\n }\n }\n\n /**\n * Check that all request configuration related to client capabilities have correspondent features installed.\n */\n private fun checkCapabilities() {\n builder.attributes.getOrNull(ENGINE_CAPABILITIES_KEY)?.keys\n ?.filterIsInstance<HttpClientFeature<*, *>>()\n ?.forEach {\n requireNotNull(client.feature(it)) {\n \"Consider installing $it feature because the request requires it to be installed\"\n }\n }\n }\n\n override fun toString(): String = \"HttpStatement[${builder.url.buildString()}]\"\n}\n\n@Deprecated(\n \"[HttpStatement] isn't closeable.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"this.execute<T>(block)\")\n)\n@Suppress(\"unused\", \"KDocMissingDocumentation\", \"UNUSED_PARAMETER\")\npublic fun <T> HttpStatement.use(block: suspend (response: HttpResponse) -> T) {\n}\n\n@Deprecated(\n \"Unbound [HttpResponse] is deprecated. Consider using [execute()] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"this.execute()\")\n)\n@Suppress(\"KDocMissingDocumentation\", \"unused\")\npublic val HttpStatement.response: HttpResponse\n get() = error(\"Unbound [HttpClientCall] is deprecated. Consider using [HttpResponse] instead.\")\n\n/**\n * Read the [HttpResponse.content] as a String. You can pass an optional [charset]\n * to specify a charset in the case no one is specified as part of the Content-Type response.\n * If no charset specified either as parameter or as part of the response,\n * [io.ktor.client.features.HttpPlainText] settings will be used.\n *\n * Note that [fallbackCharset] parameter will be ignored if the response already has a charset.\n * So it just acts as a fallback, honoring the server preference.\n */\npublic suspend fun HttpResponse.readText(fallbackCharset: Charset? = null): String {\n val originCharset = charset() ?: fallbackCharset ?: Charsets.UTF_8\n val decoder = originCharset.newDecoder()\n val input = receive<Input>()\n\n return decoder.decode(input)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\n\n@Suppress(\"KDocMissingDocumentation\")\n@InternalAPI\npublic abstract class ClientUpgradeContent : OutgoingContent.NoContent() {\n private val content: ByteChannel by lazy { ByteChannel() }\n\n public val output: ByteWriteChannel get() = content\n\n public suspend fun pipeTo(output: ByteWriteChannel) {\n content.copyAndClose(output)\n }\n\n public abstract fun verify(headers: Headers)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.client.call.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport kotlin.coroutines.*\n\n/**\n * Default [HttpRequest] implementation.\n */\n@InternalAPI\npublic open class DefaultHttpRequest(override val call: HttpClientCall, data: HttpRequestData) : HttpRequest {\n override val coroutineContext: CoroutineContext get() = call.coroutineContext\n\n override val method: HttpMethod = data.method\n\n override val url: Url = data.url\n\n override val content: OutgoingContent = data.body\n\n override val headers: Headers = data.headers\n\n override val attributes: Attributes = data.attributes\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.engine.*\nimport io.ktor.client.utils.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * A request for [HttpClient], first part of [HttpClientCall].\n */\npublic interface HttpRequest : HttpMessage, CoroutineScope {\n /**\n * The associated [HttpClientCall] containing both\n * the underlying [HttpClientCall.request] and [HttpClientCall.response].\n */\n public val call: HttpClientCall\n\n override val coroutineContext: CoroutineContext get() = call.coroutineContext\n\n /**\n * The [HttpMethod] or HTTP VERB used for this request.\n */\n public val method: HttpMethod\n\n /**\n * The [Url] representing the endpoint and the uri for this request.\n */\n public val url: Url\n\n /**\n * Typed [Attributes] associated to this call serving as a lightweight container.\n */\n public val attributes: Attributes\n\n @Deprecated(\n \"Binary compatibility.\",\n level = DeprecationLevel.HIDDEN\n )\n @Suppress(\"unused\", \"KDocMissingDocumentation\")\n public val executionContext: Job\n get() = coroutineContext[Job]!!\n\n /**\n * An [OutgoingContent] representing the request body\n */\n public val content: OutgoingContent\n}\n\n/**\n * Class for building [HttpRequestData].\n */\npublic class HttpRequestBuilder : HttpMessageBuilder {\n /**\n * [URLBuilder] to configure the URL for this request.\n */\n public val url: URLBuilder = URLBuilder()\n\n /**\n * [HttpMethod] used by this request. [HttpMethod.Get] by default.\n */\n public var method: HttpMethod = HttpMethod.Get\n\n /**\n * [HeadersBuilder] to configure the headers for this request.\n */\n override val headers: HeadersBuilder = HeadersBuilder()\n\n /**\n * The [body] for this request. Initially [EmptyContent].\n */\n public var body: Any = EmptyContent\n\n /**\n * A deferred used to control the execution of this request.\n */\n @KtorExperimentalAPI\n public var executionContext: Job = SupervisorJob()\n .also { it.makeShared() }\n internal set(value) {\n value.makeShared()\n field = value\n }\n\n /**\n * Call specific attributes.\n */\n public val attributes: Attributes = Attributes(concurrent = true)\n\n /**\n * Executes a [block] that configures the [URLBuilder] associated to this request.\n */\n public fun url(block: URLBuilder.(URLBuilder) -> Unit): Unit = url.block(url)\n\n /**\n * Create immutable [HttpRequestData]\n */\n public fun build(): HttpRequestData = HttpRequestData(\n url.build(),\n method,\n headers.build(),\n body as? OutgoingContent ?: error(\"No request transformation found: $body\"),\n executionContext,\n attributes\n )\n\n /**\n * Set request specific attributes specified by [block].\n */\n public fun setAttributes(block: Attributes.() -> Unit) {\n attributes.apply(block)\n }\n\n /**\n * Mutates [this] copying all the data from another [builder] using it as base.\n */\n @InternalAPI\n public fun takeFromWithExecutionContext(builder: HttpRequestBuilder): HttpRequestBuilder {\n executionContext = builder.executionContext\n return takeFrom(builder)\n }\n\n /**\n * Mutates [this] copying all the data but execution context from another [builder] using it as base.\n */\n public fun takeFrom(builder: HttpRequestBuilder): HttpRequestBuilder {\n method = builder.method\n body = builder.body\n url.takeFrom(builder.url)\n url.encodedPath = if (url.encodedPath.isBlank()) \"/\" else url.encodedPath\n headers.appendAll(builder.headers)\n builder.attributes.allKeys.forEach {\n @Suppress(\"UNCHECKED_CAST\")\n attributes.put(it as AttributeKey<Any>, builder.attributes[it])\n }\n\n return this\n }\n\n /**\n * Set capability configuration.\n */\n @KtorExperimentalAPI\n public fun <T : Any> setCapability(key: HttpClientEngineCapability<T>, capability: T) {\n val capabilities = attributes.computeIfAbsent(ENGINE_CAPABILITIES_KEY) { sharedMap() }\n capabilities[key] = capability\n }\n\n /**\n * Retrieve capability by key.\n */\n @KtorExperimentalAPI\n public fun <T : Any> getCapabilityOrNull(key: HttpClientEngineCapability<T>): T? {\n @Suppress(\"UNCHECKED_CAST\")\n return attributes.getOrNull(ENGINE_CAPABILITIES_KEY)?.get(key) as T?\n }\n\n public companion object\n}\n\n/**\n * Actual data of the [HttpRequest], including [url], [method], [headers], [body] and [executionContext].\n * Built by [HttpRequestBuilder].\n */\npublic class HttpRequestData @InternalAPI constructor(\n public val url: Url,\n public val method: HttpMethod,\n public val headers: Headers,\n public val body: OutgoingContent,\n public val executionContext: Job,\n public val attributes: Attributes\n) {\n /**\n * Retrieve extension by it's key.\n */\n @KtorExperimentalAPI\n public fun <T> getCapabilityOrNull(key: HttpClientEngineCapability<T>): T? {\n @Suppress(\"UNCHECKED_CAST\")\n return attributes.getOrNull(ENGINE_CAPABILITIES_KEY)?.get(key) as T?\n }\n\n /**\n * All extension keys associated with this request.\n */\n internal val requiredCapabilities: Set<HttpClientEngineCapability<*>> =\n attributes.getOrNull(ENGINE_CAPABILITIES_KEY)?.keys ?: emptySet()\n\n override fun toString(): String = \"HttpRequestData(url=$url, method=$method)\"\n}\n\n/**\n * Data prepared for [HttpResponse].\n */\npublic class HttpResponseData constructor(\n public val statusCode: HttpStatusCode,\n public val requestTime: GMTDate,\n public val headers: Headers,\n public val version: HttpProtocolVersion,\n public val body: Any,\n public val callContext: CoroutineContext\n) {\n public val responseTime: GMTDate = GMTDate()\n\n override fun toString(): String = \"HttpResponseData=(statusCode=$statusCode)\"\n}\n\n/**\n * Executes a [block] that configures the [HeadersBuilder] associated to this request.\n */\npublic fun HttpRequestBuilder.headers(block: HeadersBuilder.() -> Unit): HeadersBuilder = headers.apply(block)\n\n/**\n * Mutates [this] copying all the data from another [request] using it as base.\n */\npublic fun HttpRequestBuilder.takeFrom(request: HttpRequest): HttpRequestBuilder {\n method = request.method\n body = request.content\n url.takeFrom(request.url)\n headers.appendAll(request.headers)\n\n return this\n}\n\n/**\n * Executes a [block] that configures the [URLBuilder] associated to this request.\n */\npublic fun HttpRequestBuilder.url(block: URLBuilder.() -> Unit): Unit = block(url)\n\n/**\n * Sets the [HttpRequestBuilder] from [request].\n */\npublic fun HttpRequestBuilder.takeFrom(request: HttpRequestData): HttpRequestBuilder {\n method = request.method\n body = request.body\n url.takeFrom(request.url)\n headers.appendAll(request.headers)\n\n return this\n}\n\n/**\n * Executes a [block] that configures the [URLBuilder] associated to thisrequest.\n */\npublic operator fun HttpRequestBuilder.Companion.invoke(block: URLBuilder.() -> Unit): HttpRequestBuilder =\n HttpRequestBuilder().apply { url(block) }\n\n/**\n * Sets the [url] using the specified [scheme], [host], [port] and [path].\n */\npublic fun HttpRequestBuilder.url(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n block: URLBuilder.() -> Unit = {}\n): Unit { // ktlint-disable filename no-unit-return\n url.apply {\n protocol = URLProtocol.createOrDefault(scheme)\n this.host = host\n this.port = port\n encodedPath = path\n block(url)\n }\n}\n\n/**\n * Constructs a [HttpRequestBuilder] from URL information: [scheme], [host], [port] and [path]\n * and optionally further configures it using [block].\n */\npublic operator fun HttpRequestBuilder.Companion.invoke(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n block: URLBuilder.() -> Unit = {}\n): HttpRequestBuilder = HttpRequestBuilder().apply { url(scheme, host, port, path, block) }\n\n/**\n * Sets the [HttpRequestBuilder.url] from [urlString].\n */\npublic fun HttpRequestBuilder.url(urlString: String): Unit { // ktlint-disable filename no-unit-return\n url.takeFrom(urlString)\n}\n\n@InternalAPI\n@Suppress(\"KDocMissingDocumentation\")\npublic fun HttpRequestData.isUpgradeRequest(): Boolean {\n return body is ClientUpgradeContent\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.client.*\nimport io.ktor.http.*\n\n/**\n * Executes a [HttpClient] GET request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.get(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = get {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] POST request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.post(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = post {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] PUT request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.put(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = put {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] PATCH request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.patch(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = patch {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] OPTIONS request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.options(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = options {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] HEAD request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.head(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = head {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Executes a [HttpClient] HEAD request, with the specified [url] as Url and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.delete(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = delete {\n this.url.takeFrom(url)\n block()\n}\n\n/**\n * Sets the [HttpRequestBuilder.url] from [url].\n */\npublic fun HttpRequestBuilder.url(url: Url): Unit { // ktlint-disable no-unit-return\n this.url.takeFrom(url)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request.forms\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\n\n/**\n * Submit [formParameters] request.\n *\n * If [encodeInQuery] specified encode [formParameters] in url parameters and use [HttpMethod.Get] for the request.\n * Otherwise send [HttpMethod.Post] request with [formParameters] encoded in body.\n *\n * [formParameters] encoded using application/x-www-form-urlencoded format.\n */\npublic suspend inline fun <reified T> HttpClient.submitForm(\n formParameters: Parameters = Parameters.Empty,\n encodeInQuery: Boolean = false,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n if (encodeInQuery) {\n method = HttpMethod.Get\n url.parameters.appendAll(formParameters)\n } else {\n method = HttpMethod.Post\n body = FormDataContent(formParameters)\n }\n\n block()\n}\n\n/**\n * Submit [formParameters] request.\n *\n * If [encodeInQuery] specified encode [formParameters] in url parameters and use [HttpMethod.Get] for the request.\n * Otherwise send [HttpMethod.Post] request with [formParameters] encoded in body.\n *\n * [url] destination\n * [formParameters] encoded using application/x-www-form-urlencoded format.\n */\npublic suspend inline fun <reified T> HttpClient.submitForm(\n url: String,\n formParameters: Parameters = Parameters.Empty,\n encodeInQuery: Boolean = false,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = submitForm(formParameters, encodeInQuery) {\n url(url)\n block()\n}\n\n/**\n * Send [HttpMethod.Post] request with [formData] encoded in body.\n * [formData] encoded using multipart/form-data format.\n * https://tools.ietf.org/html/rfc2045\n */\npublic suspend inline fun <reified T> HttpClient.submitFormWithBinaryData(\n formData: List<PartData>,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n method = HttpMethod.Post\n body = MultiPartFormDataContent(formData)\n block()\n}\n\n/**\n * Send [HttpMethod.Post] request with [formData] encoded in body.\n * [url] destination\n * [formData] encoded using multipart/form-data format.\n *\n * https://tools.ietf.org/html/rfc2045\n */\npublic suspend inline fun <reified T> HttpClient.submitFormWithBinaryData(\n url: String,\n formData: List<PartData>,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = submitFormWithBinaryData(formData) {\n url(url)\n block()\n}\n\n/**\n * Submit [formParameters] request.\n *\n * If [encodeInQuery] specified encode [formParameters] in url parameters and use [HttpMethod.Get] for the request.\n * Otherwise send [HttpMethod.Post] request with [formParameters] encoded in body.\n *\n * [formParameters] encoded using application/x-www-form-urlencoded format.\n */\npublic suspend inline fun <reified T> HttpClient.submitForm(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = 80,\n path: String = \"/\",\n formParameters: Parameters = Parameters.Empty,\n encodeInQuery: Boolean = false,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = submitForm(formParameters, encodeInQuery) {\n url(scheme, host, port, path)\n apply(block)\n}\n\n/**\n * Send [HttpMethod.Post] request with [formData] encoded in body.\n * [formData] encoded using multipart/form-data format.\n * https://tools.ietf.org/html/rfc2045\n */\npublic suspend inline fun <reified T> HttpClient.submitFormWithBinaryData(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = 80,\n path: String = \"/\",\n formData: List<PartData> = emptyList(),\n block: HttpRequestBuilder.() -> Unit = {}\n): T = submitFormWithBinaryData(formData) {\n url(scheme, host, port, path)\n apply(block)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request.forms\n\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.core.*\nimport kotlin.contracts.*\n\n/**\n * Multipart form item. Use it to build form in client.\n *\n * @param key multipart name\n * @param value content, could be [String], [Number] or [Input]\n * @param headers part headers, note that some servers may fail if an unknown header provided\n */\npublic data class FormPart<T : Any>(val key: String, val value: T, val headers: Headers = Headers.Empty)\n\n/**\n * Build multipart form from [values].\n */\npublic fun formData(vararg values: FormPart<*>): List<PartData> {\n val result = mutableListOf<PartData>()\n\n values.forEach { (key, value, headers) ->\n val partHeaders = HeadersBuilder().apply {\n append(HttpHeaders.ContentDisposition, \"form-data; name=${key.escapeIfNeeded()}\")\n appendAll(headers)\n }\n val part = when (value) {\n is String -> PartData.FormItem(value, {}, partHeaders.build())\n is Number -> PartData.FormItem(value.toString(), {}, partHeaders.build())\n is ByteArray -> {\n partHeaders.append(HttpHeaders.ContentLength, value.size.toString())\n PartData.BinaryItem({ ByteReadPacket(value) }, {}, partHeaders.build())\n }\n is ByteReadPacket -> {\n partHeaders.append(HttpHeaders.ContentLength, value.remaining.toString())\n PartData.BinaryItem({ value.copy() }, { value.close() }, partHeaders.build())\n }\n is InputProvider -> {\n val size = value.size\n if (size != null) {\n partHeaders.append(HttpHeaders.ContentLength, size.toString())\n }\n PartData.BinaryItem(value.block, {}, partHeaders.build())\n }\n is Input -> error(\"Can't use [Input] as part of form: $value. Consider using [InputProvider] instead.\")\n else -> error(\"Unknown form content type: $value\")\n }\n\n result += part\n }\n\n return result\n}\n\n/**\n * Build multipart form using [block] function.\n */\npublic fun formData(block: FormBuilder.() -> Unit): List<PartData> =\n formData(*FormBuilder().apply(block).build().toTypedArray())\n\n/**\n * Form builder type used in [formData] builder function.\n */\npublic class FormBuilder internal constructor() {\n private val parts = mutableListOf<FormPart<*>>()\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n @InternalAPI\n public fun <T : Any> append(key: String, value: T, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n public fun append(key: String, value: String, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n public fun append(key: String, value: Number, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n public fun append(key: String, value: ByteArray, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n public fun append(key: String, value: InputProvider, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[InputProvider(block)] with optional [headers].\n */\n public fun appendInput(key: String, headers: Headers = Headers.Empty, size: Long? = null, block: () -> Input) {\n parts += FormPart(key, InputProvider(size, block), headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n public fun append(key: String, value: ByteReadPacket, headers: Headers = Headers.Empty) {\n parts += FormPart(key, value, headers)\n }\n\n /**\n * Append a pair [key]:[value] with optional [headers].\n */\n @Suppress(\"UNUSED_PARAMETER\")\n @Deprecated(\n \"Input is not reusable. Please use [InputProvider] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"appendInput(key, headers) { /* create fresh input here */ }\")\n )\n public fun append(key: String, value: Input, headers: Headers = Headers.Empty) {\n error(\"Input is not reusable. Please use [InputProvider] instead.\")\n }\n\n /**\n * Append a form [part].\n */\n public fun <T : Any> append(part: FormPart<T>) {\n parts += part\n }\n\n internal fun build(): List<FormPart<*>> = parts\n}\n\n/**\n * Append a form part with the specified [key] using [bodyBuilder] for it's body.\n */\n@OptIn(ExperimentalContracts::class)\npublic inline fun FormBuilder.append(\n key: String,\n headers: Headers = Headers.Empty,\n size: Long? = null,\n crossinline bodyBuilder: BytePacketBuilder.() -> Unit\n) {\n contract {\n callsInPlace(bodyBuilder, InvocationKind.EXACTLY_ONCE)\n }\n append(FormPart(key, InputProvider(size) { buildPacket { bodyBuilder() } }, headers))\n}\n\n/**\n * Reusable [Input] form entry.\n *\n * @property size estimate for data produced by the block or `null` if no size estimation known\n * @param block: content generator\n */\n@KtorExperimentalAPI\npublic class InputProvider(public val size: Long? = null, public val block: () -> Input)\n\n/**\n * Append a form part with the specified [key], [filename] and optional [contentType] using [bodyBuilder] for it's body.\n */\n@OptIn(ExperimentalContracts::class)\npublic fun FormBuilder.append(\n key: String,\n filename: String,\n contentType: ContentType? = null,\n size: Long? = null,\n bodyBuilder: BytePacketBuilder.() -> Unit\n) {\n contract {\n callsInPlace(bodyBuilder, InvocationKind.EXACTLY_ONCE)\n }\n\n val headersBuilder = HeadersBuilder()\n headersBuilder[HttpHeaders.ContentDisposition] = \"filename=${filename.escapeIfNeeded()}\"\n contentType?.run { headersBuilder[HttpHeaders.ContentType] = this.toString() }\n val headers = headersBuilder.build()\n\n append(key, headers, size, bodyBuilder)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.util.pipeline.*\n\n/**\n * [HttpClient] Pipeline used for executing [HttpRequest].\n */\npublic class HttpRequestPipeline(\n override val developmentMode: Boolean = false\n) : Pipeline<Any, HttpRequestBuilder>(Before, State, Transform, Render, Send) {\n /**\n * All interceptors accept payload as [subject] and try to convert it to [OutgoingContent]\n * Last phase should proceed with [HttpClientCall]\n */\n public companion object Phases {\n /**\n * The earliest phase that happens before any other\n */\n public val Before: PipelinePhase = PipelinePhase(\"Before\")\n\n /**\n * Use this phase to modify request with shared state\n */\n public val State: PipelinePhase = PipelinePhase(\"State\")\n\n /**\n * Transform request body to supported render format\n */\n public val Transform: PipelinePhase = PipelinePhase(\"Transform\")\n\n /**\n * Encode request body to [OutgoingContent]\n */\n public val Render: PipelinePhase = PipelinePhase(\"Render\")\n\n /**\n * Phase for [HttpSend] feature\n */\n public val Send: PipelinePhase = PipelinePhase(\"Send\")\n }\n}\n\n/**\n * [HttpClient] Pipeline used for sending [HttpRequest] to remote server.\n */\npublic class HttpSendPipeline(\n override val developmentMode: Boolean = false\n) : Pipeline<Any, HttpRequestBuilder>(Before, State, Monitoring, Engine, Receive) {\n\n public companion object Phases {\n /**\n * The earliest phase that happens before any other.\n */\n public val Before: PipelinePhase = PipelinePhase(\"Before\")\n\n /**\n * Use this phase to modify request with shared state.\n */\n public val State: PipelinePhase = PipelinePhase(\"State\")\n\n /**\n * Use this phase for logging and other actions that don't modify request or shared data.\n */\n public val Monitoring: PipelinePhase = PipelinePhase(\"Monitoring\")\n\n /**\n * Send request to remote server.\n */\n public val Engine: PipelinePhase = PipelinePhase(\"Engine\")\n\n /**\n * Receive pipeline execution phase.\n */\n public val Receive: PipelinePhase = PipelinePhase(\"Receive\")\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.statement.*\nimport io.ktor.client.utils.*\nimport io.ktor.http.*\n\n/**\n * Executes a [HttpClient] request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.request(\n builder: HttpRequestBuilder = HttpRequestBuilder()\n): T = HttpStatement(builder, this).receive()\n\n/**\n * Executes a [HttpClient] request, with the information configured in [builder] block\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.request(block: HttpRequestBuilder.() -> Unit): T =\n request(HttpRequestBuilder().apply(block))\n\n/**\n * Executes a [HttpClient] request, with the [urlString] and the information configured in builder [block]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.request(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request(\n HttpRequestBuilder().apply {\n url(urlString)\n block()\n }\n)\n\n/**\n * Executes a [HttpClient] request, with the [url] and the information configured in builder [block]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.request(\n url: Url,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request(\n HttpRequestBuilder().apply {\n url(url)\n block()\n }\n)\n\n/**\n * Executes a [HttpClient] GET request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.get(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Get\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] POST request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.post(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Post\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] PUT request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.put(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Put\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] DELETE request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.delete(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Delete\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] OPTIONS request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.options(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Options\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] PATCH request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.patch(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Patch\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] HEAD request, with the information from the [builder]\n * and tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.head(builder: HttpRequestBuilder): T {\n builder.method = HttpMethod.Head\n return request(builder)\n}\n\n/**\n * Executes a [HttpClient] GET request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.get(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Get\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] POST request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.post(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Post\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] PUT request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.put(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Put\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] DELETE request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.delete(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Delete\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] PATCH request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.patch(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Patch\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] HEAD request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.head(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Head\n this.body = body\n apply(block)\n}\n\n/**\n * Executes a [HttpClient] OPTIONS request, with the specified [scheme], [host], [port], [path] and [body].\n * And allows to further configure the request, using a [block] receiving an [HttpRequestBuilder].\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.options(\n scheme: String = \"http\",\n host: String = \"localhost\",\n port: Int = DEFAULT_PORT,\n path: String = \"/\",\n body: Any = EmptyContent,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = request {\n url(scheme, host, port, path)\n method = HttpMethod.Options\n this.body = body\n apply(block)\n}\n\n/**\n * Creates a [HttpRequestBuilder] and configures it with a [block] of code.\n */\npublic fun request(block: HttpRequestBuilder.() -> Unit): HttpRequestBuilder = HttpRequestBuilder().apply(block)\n\n/**\n * Executes a [HttpClient] GET request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.get(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = get {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] POST request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.post(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = post {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] PUT request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.put(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = put {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] DELETE request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.delete(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = delete {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] OPTIONS request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.options(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = options {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] PATCH request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.patch(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = patch {\n url.takeFrom(urlString)\n block()\n}\n\n/**\n * Executes a [HttpClient] HEAD request, with the specified [url] as URL and\n * an optional [block] receiving an [HttpRequestBuilder] for further configuring the request.\n *\n * Tries to receive a specific type [T], if fails, an exception is thrown.\n */\npublic suspend inline fun <reified T> HttpClient.head(\n urlString: String,\n block: HttpRequestBuilder.() -> Unit = {}\n): T = head {\n url.takeFrom(urlString)\n block()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request.forms\n\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlin.native.concurrent.*\nimport kotlin.random.*\n\n@ThreadLocal\nprivate val RN_BYTES = \"\\r\\n\".toByteArray()\n\n/**\n * [OutgoingContent] with for application/x-www-form-urlencoded formatted request.\n *\n * @param formData: data to send.\n */\npublic class FormDataContent(\n public val formData: Parameters\n) : OutgoingContent.ByteArrayContent() {\n private val content = formData.formUrlEncode().toByteArray()\n\n override val contentLength: Long = content.size.toLong()\n override val contentType: ContentType = ContentType.Application.FormUrlEncoded.withCharset(Charsets.UTF_8)\n\n override fun bytes(): ByteArray = content\n}\n\n/**\n * [OutgoingContent] for multipart/form-data formatted request.\n *\n * @param parts: form part data\n */\npublic class MultiPartFormDataContent(\n parts: List<PartData>\n) : OutgoingContent.WriteChannelContent() {\n private val boundary: String = generateBoundary()\n private val BOUNDARY_BYTES = \"--$boundary\\r\\n\".toByteArray()\n private val LAST_BOUNDARY_BYTES = \"--$boundary--\\r\\n\".toByteArray()\n\n private val BODY_OVERHEAD_SIZE = LAST_BOUNDARY_BYTES.size\n private val PART_OVERHEAD_SIZE = RN_BYTES.size * 2 + BOUNDARY_BYTES.size\n\n private val rawParts: List<PreparedPart> = parts.map { part ->\n val headersBuilder = BytePacketBuilder()\n for ((key, values) in part.headers.entries()) {\n headersBuilder.writeText(\"$key: ${values.joinToString(\"; \")}\")\n headersBuilder.writeFully(RN_BYTES)\n }\n\n val bodySize = part.headers[HttpHeaders.ContentLength]?.toLong()\n when (part) {\n is PartData.FileItem -> {\n val headers = headersBuilder.build().readBytes()\n val size = bodySize?.plus(PART_OVERHEAD_SIZE)?.plus(headers.size)\n PreparedPart(headers, part.provider, size)\n }\n is PartData.BinaryItem -> {\n val headers = headersBuilder.build().readBytes()\n val size = bodySize?.plus(PART_OVERHEAD_SIZE)?.plus(headers.size)\n PreparedPart(headers, part.provider, size)\n }\n is PartData.FormItem -> {\n val bytes = buildPacket { writeText(part.value) }.readBytes()\n val provider = { buildPacket { writeFully(bytes) } }\n if (bodySize == null) {\n headersBuilder.writeText(\"${HttpHeaders.ContentLength}: ${bytes.size}\")\n headersBuilder.writeFully(RN_BYTES)\n }\n\n val headers = headersBuilder.build().readBytes()\n val size = bytes.size + PART_OVERHEAD_SIZE + headers.size\n PreparedPart(headers, provider, size.toLong())\n }\n }\n }\n\n override val contentLength: Long?\n\n override val contentType: ContentType = ContentType.MultiPart.FormData.withParameter(\"boundary\", boundary)\n\n init {\n var rawLength: Long? = 0\n for (part in rawParts) {\n val size = part.size\n if (size == null) {\n rawLength = null\n break\n }\n\n rawLength = rawLength?.plus(size)\n }\n\n if (rawLength != null) {\n rawLength += BODY_OVERHEAD_SIZE\n }\n\n contentLength = rawLength\n }\n\n override suspend fun writeTo(channel: ByteWriteChannel) {\n try {\n for (part in rawParts) {\n channel.writeFully(BOUNDARY_BYTES)\n channel.writeFully(part.headers)\n channel.writeFully(RN_BYTES)\n\n part.provider().use { input ->\n input.copyTo(channel)\n }\n\n channel.writeFully(RN_BYTES)\n }\n\n channel.writeFully(LAST_BOUNDARY_BYTES)\n } catch (cause: Throwable) {\n channel.close(cause)\n } finally {\n channel.close()\n }\n }\n}\n\nprivate fun generateBoundary(): String = buildString {\n repeat(32) {\n append(Random.nextInt().toString(16))\n }\n}.take(70)\n\nprivate class PreparedPart(\n val headers: ByteArray,\n val provider: () -> Input,\n val size: Long?\n)\n\nprivate suspend fun Input.copyTo(channel: ByteWriteChannel) {\n if (this is ByteReadPacket) {\n channel.writePacket(this)\n return\n }\n\n while (!this@copyTo.endOfInput) {\n channel.write { freeSpace, startOffset, endExclusive ->\n this@copyTo.readAvailable(freeSpace, startOffset, endExclusive - startOffset).toInt()\n }\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.statement\n\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport kotlin.coroutines.*\n\n@InternalAPI\npublic class DefaultHttpResponse(\n override val call: HttpClientCall,\n responseData: HttpResponseData\n) : HttpResponse() {\n override val coroutineContext: CoroutineContext = responseData.callContext\n\n override val status: HttpStatusCode = responseData.statusCode\n\n override val version: HttpProtocolVersion = responseData.version\n\n override val requestTime: GMTDate = responseData.requestTime\n\n override val responseTime: GMTDate = responseData.responseTime\n\n override val content: ByteReadChannel = responseData.body as? ByteReadChannel\n ?: ByteReadChannel.Empty\n\n override val headers: Headers = responseData.headers\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.statement\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.util.pipeline.*\n\n/**\n * [HttpClient] Pipeline used for executing [HttpResponse].\n */\npublic class HttpResponsePipeline(\n override val developmentMode: Boolean = false\n) : Pipeline<HttpResponseContainer, HttpClientCall>(\n Receive,\n Parse,\n Transform,\n State,\n After\n) {\n public companion object Phases {\n /**\n * The earliest phase that happens before any other\n */\n public val Receive: PipelinePhase = PipelinePhase(\"Receive\")\n\n /**\n * Decode response body\n */\n public val Parse: PipelinePhase = PipelinePhase(\"Parse\")\n\n /**\n * Transform response body to expected format\n */\n public val Transform: PipelinePhase = PipelinePhase(\"Transform\")\n\n /**\n * Use this phase to store request shared state\n */\n public val State: PipelinePhase = PipelinePhase(\"State\")\n\n /**\n * Latest response pipeline phase\n */\n public val After: PipelinePhase = PipelinePhase(\"After\")\n }\n}\n\n/**\n * [HttpClient] Pipeline used for receiving [HttpResponse] without any processing.\n */\npublic class HttpReceivePipeline(\n override val developmentMode: Boolean = false\n) : Pipeline<HttpResponse, HttpClientCall>(Before, State, After) {\n public companion object Phases {\n /**\n * The earliest phase that happens before any other\n */\n public val Before: PipelinePhase = PipelinePhase(\"Before\")\n\n /**\n * Use this phase to store request shared state\n */\n public val State: PipelinePhase = PipelinePhase(\"State\")\n\n /**\n * Latest response pipeline phase\n */\n public val After: PipelinePhase = PipelinePhase(\"After\")\n }\n}\n\n/**\n * Class representing a typed [response] with an attached [expectedType].\n * @param expectedType: information about expected type.\n * @param response: current response state.\n */\npublic data class HttpResponseContainer(val expectedType: TypeInfo, val response: Any)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.request\n\nimport io.ktor.http.*\nimport io.ktor.util.date.*\n\n/**\n * Gets the associated URL's host.\n */\npublic var HttpRequestBuilder.host: String\n get() = url.host\n set(value) {\n url.host = value\n }\n\n/**\n * Gets the associated URL's port.\n */\npublic var HttpRequestBuilder.port: Int\n get() = url.port\n set(value) {\n url.port = value\n }\n\n/**\n * Sets a single header of [key] with a specific [value] if the value is not null.\n */\npublic fun HttpRequestBuilder.header(key: String, value: Any?): Unit =\n value?.let { headers.append(key, it.toString()) } ?: Unit\n\n/**\n * Sets a single header of [key] with a specific [value] if the value is not null.\n */\npublic fun HttpRequestBuilder.cookie(\n name: String,\n value: String,\n maxAge: Int = 0,\n expires: GMTDate? = null,\n domain: String? = null,\n path: String? = null,\n secure: Boolean = false,\n httpOnly: Boolean = false,\n extensions: Map<String, String?> = emptyMap()\n): Unit { // ktlint-disable no-unit-return\n val renderedCookie = Cookie(\n name = name,\n value = value,\n maxAge = maxAge,\n expires = expires,\n domain = domain,\n path = path,\n secure = secure,\n httpOnly = httpOnly,\n extensions = extensions\n ).let(::renderCookieHeader)\n\n if (HttpHeaders.Cookie !in headers) {\n headers.append(HttpHeaders.Cookie, renderedCookie)\n return\n }\n // Client cookies are stored in a single header \"Cookies\" and multiple values are separated with \";\"\n headers[HttpHeaders.Cookie] = headers[HttpHeaders.Cookie] + \"; \" + renderedCookie\n}\n\n/**\n * Sets a single URL query parameter of [key] with a specific [value] if the value is not null. Can not be used to set\n * form parameters in the body.\n */\npublic fun HttpRequestBuilder.parameter(key: String, value: Any?): Unit =\n value?.let { url.parameters.append(key, it.toString()) } ?: Unit\n\n/**\n * Sets the `Accept` header with a specific [contentType].\n */\npublic fun HttpRequestBuilder.accept(contentType: ContentType): Unit =\n headers.append(HttpHeaders.Accept, contentType.toString())\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\n@file:Suppress(\"KDocMissingDocumentation\")\n\npackage io.ktor.client.response\n\nimport io.ktor.http.*\nimport io.ktor.utils.io.charsets.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n@Deprecated(\n \"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\",\n level = DeprecationLevel.ERROR,\n replaceWith = ReplaceWith(\"HttpStatement\", \"io.ktor.client.statement.*\")\n)\npublic class HttpResponse : CoroutineScope, HttpMessage {\n override val coroutineContext: CoroutineContext\n get() = error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n override val headers: Headers\n get() = error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n}\n\n@Suppress(\"DEPRECATION_ERROR\", \"unused\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\n@Deprecated(\n \"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\",\n level = DeprecationLevel.ERROR\n)\npublic suspend fun HttpResponse.readText(charset: Charset? = null): String {\n error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n}\n\n/**\n * Exactly reads [count] bytes of the [HttpResponse.content].\n */\n@Deprecated(\n \"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"DEPRECATION_ERROR\", \"unused\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpResponse.readBytes(count: Int): ByteArray {\n error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n}\n\n/**\n * Reads the whole [HttpResponse.content] if Content-Length was specified.\n * Otherwise it just reads one byte.\n */\n@Deprecated(\n \"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"DEPRECATION_ERROR\", \"unused\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpResponse.readBytes(): ByteArray {\n error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n}\n\n/**\n * Efficiently discards the remaining bytes of [HttpResponse.content].\n */\n@Deprecated(\n \"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\",\n level = DeprecationLevel.ERROR\n)\n@Suppress(\"DEPRECATION_ERROR\", \"unused\", \"UNUSED_PARAMETER\", \"RedundantSuspendModifier\")\npublic suspend fun HttpResponse.discardRemaining() {\n error(\"Unbound streaming [HttpResponse] is deprecated. Consider using [HttpStatement] instead.\")\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.statement\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\n\n/**\n * A response for [HttpClient], second part of [HttpClientCall].\n */\npublic abstract class HttpResponse : HttpMessage, CoroutineScope {\n /**\n * The associated [HttpClientCall] containing both\n * the underlying [HttpClientCall.request] and [HttpClientCall.response].\n */\n public abstract val call: HttpClientCall\n\n /**\n * The [HttpStatusCode] returned by the server. It includes both,\n * the [HttpStatusCode.description] and the [HttpStatusCode.value] (code).\n */\n public abstract val status: HttpStatusCode\n\n /**\n * HTTP version. Usually [HttpProtocolVersion.HTTP_1_1] or [HttpProtocolVersion.HTTP_2_0].\n */\n public abstract val version: HttpProtocolVersion\n\n /**\n * [GMTDate] of the request start.\n */\n public abstract val requestTime: GMTDate\n\n /**\n * [GMTDate] of the response start.\n */\n public abstract val responseTime: GMTDate\n\n /**\n * Unmodified [ByteReadChannel] with the raw payload of the response.\n *\n * **Note:** this content doesn't go through any interceptors from [HttpResponsePipeline].\n * If you need modified content, use [HttpResponse::receive<ByteReadChannel>] function.\n */\n public abstract val content: ByteReadChannel\n\n override fun toString(): String = \"HttpResponse[${request.url}, $status]\"\n}\n\n/**\n * [HttpRequest] associated with this response.\n */\npublic val HttpResponse.request: HttpRequest get() = call.request\n\n@Suppress(\"unused\", \"KDocMissingDocumentation\")\n@Deprecated(\"Close is obsolete for [HttpResponse]\", replaceWith = ReplaceWith(\"this\"))\npublic fun HttpResponse.close() {\n}\n\n@Suppress(\"UNUSED_PARAMETER\", \"KDocMissingDocumentation\", \"unused\")\n@Deprecated(\"Use is obsolete for [HttpResponse]\", replaceWith = ReplaceWith(\"this.also(block)\"))\npublic fun HttpResponse.use(block: () -> Unit) {\n}\n\n@Suppress(\"unused\", \"KDocMissingDocumentation\")\n@Deprecated(\"[response] is obsolete for [HttpResponse]\", replaceWith = ReplaceWith(\"this\"))\npublic val HttpResponse.response: HttpResponse\n get() = this\n\n@InternalAPI\n@PublishedApi\ninternal fun HttpResponse.complete() {\n val job = coroutineContext[Job]!! as CompletableJob\n job.complete()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.statement\n\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Exactly reads [count] bytes of the [HttpResponse.content].\n */\npublic suspend fun HttpResponse.readBytes(count: Int): ByteArray = ByteArray(count).also {\n content.readFully(it)\n}\n\n/**\n * Reads the whole [HttpResponse.content] if Content-Length was specified.\n * Otherwise it just reads one byte.\n */\npublic suspend fun HttpResponse.readBytes(): ByteArray = content.readRemaining().readBytes()\n\n/**\n * Efficiently discards the remaining bytes of [HttpResponse.content].\n */\npublic suspend fun HttpResponse.discardRemaining() {\n content.discard()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.utils\n\nimport io.ktor.util.*\n\n/**\n * List of [CacheControl] known values.\n */\n@Suppress(\"KDocMissingDocumentation\", \"MemberVisibilityCanBePrivate\")\n@KtorExperimentalAPI\npublic object CacheControl {\n public const val MAX_AGE: String = \"max-age\"\n public const val MIN_FRESH: String = \"min-fresh\"\n public const val ONLY_IF_CACHED: String = \"only-if-cached\"\n\n public const val MAX_STALE: String = \"max-stale\"\n public const val NO_CACHE: String = \"no-cache\"\n public const val NO_STORE: String = \"no-store\"\n public const val NO_TRANSFORM: String = \"no-transform\"\n\n public const val MUST_REVALIDATE: String = \"must-revalidate\"\n public const val PUBLIC: String = \"public\"\n public const val PRIVATE: String = \"private\"\n public const val PROXY_REVALIDATE: String = \"proxy-revalidate\"\n public const val S_MAX_AGE: String = \"s-maxage\"\n\n // ------- binary compatibility\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getMAX_AGE(): String = MAX_AGE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getMIN_FRESH(): String = MIN_FRESH\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getONLY_IF_CACHED(): String = ONLY_IF_CACHED\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getMAX_STALE(): String = MAX_STALE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getNO_CACHE(): String = NO_CACHE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getNO_STORE(): String = NO_STORE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getNO_TRANSFORM(): String = NO_TRANSFORM\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getMUST_REVALIDATE(): String = MUST_REVALIDATE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getPUBLIC(): String = PUBLIC\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getPRIVATE(): String = PRIVATE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getPROXY_REVALIDATE(): String = PROXY_REVALIDATE\n\n @Suppress(\"unused\", \"KDocMissingDocumentation\", \"FunctionName\")\n @Deprecated(\"Compatibility\", level = DeprecationLevel.HIDDEN)\n public fun getS_MAX_AGE(): String = S_MAX_AGE\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.utils\n\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Concrete [OutgoingContent] without a payload.\n */\npublic object EmptyContent : OutgoingContent.NoContent() {\n override val contentLength: Long = 0\n\n override fun toString(): String = \"EmptyContent\"\n}\n\n/**\n * Generates a new [OutgoingContent] of the same abstract type\n * but with [OutgoingContent.headers] transformed by the specified [block].\n */\npublic fun OutgoingContent.wrapHeaders(block: (Headers) -> Headers): OutgoingContent = when (this) {\n is OutgoingContent.NoContent -> object : OutgoingContent.NoContent() {\n override val contentLength: Long? get() = this@wrapHeaders.contentLength\n override val contentType: ContentType? get() = this@wrapHeaders.contentType\n override val status: HttpStatusCode? get() = this@wrapHeaders.status\n\n override val headers: Headers = block(this@wrapHeaders.headers)\n }\n is OutgoingContent.ReadChannelContent -> object : OutgoingContent.ReadChannelContent() {\n override val contentLength: Long? get() = this@wrapHeaders.contentLength\n override val contentType: ContentType? get() = this@wrapHeaders.contentType\n override val status: HttpStatusCode? get() = this@wrapHeaders.status\n\n override val headers: Headers = block(this@wrapHeaders.headers)\n\n override fun readFrom(): ByteReadChannel = this@wrapHeaders.readFrom()\n\n override fun readFrom(range: LongRange): ByteReadChannel = this@wrapHeaders.readFrom(range)\n }\n is OutgoingContent.WriteChannelContent -> object : OutgoingContent.WriteChannelContent() {\n override val contentLength: Long? get() = this@wrapHeaders.contentLength\n override val contentType: ContentType? get() = this@wrapHeaders.contentType\n override val status: HttpStatusCode? get() = this@wrapHeaders.status\n\n override val headers: Headers = block(this@wrapHeaders.headers)\n\n override suspend fun writeTo(channel: ByteWriteChannel) = this@wrapHeaders.writeTo(channel)\n }\n is OutgoingContent.ByteArrayContent -> object : OutgoingContent.ByteArrayContent() {\n override val contentLength: Long? get() = this@wrapHeaders.contentLength\n override val contentType: ContentType? get() = this@wrapHeaders.contentType\n override val status: HttpStatusCode? get() = this@wrapHeaders.status\n\n override val headers: Headers = block(this@wrapHeaders.headers)\n\n override fun bytes(): ByteArray = this@wrapHeaders.bytes()\n }\n is OutgoingContent.ProtocolUpgrade -> object : OutgoingContent.ProtocolUpgrade() {\n override val contentLength: Long? get() = this@wrapHeaders.contentLength\n override val contentType: ContentType? get() = this@wrapHeaders.contentType\n\n override val headers: Headers = block(this@wrapHeaders.headers)\n\n override suspend fun upgrade(\n input: ByteReadChannel,\n output: ByteWriteChannel,\n engineContext: CoroutineContext,\n userContext: CoroutineContext\n ): Job = this@wrapHeaders.upgrade(input, output, engineContext, userContext)\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.network.sockets\n\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.errors.*\nimport kotlinx.coroutines.*\n\n/**\n * This exception is thrown in case connect timeout exceeded.\n */\npublic expect class ConnectTimeoutException(message: String, cause: Throwable? = null) : IOException\n\n/**\n * This exception is thrown in case socket timeout (read or write) exceeded.\n */\npublic expect class SocketTimeoutException(message: String, cause: Throwable? = null) : IOException\n\n/**\n * Returns [ByteReadChannel] with [ByteChannel.close] handler that returns [SocketTimeoutException] instead of\n * [SocketTimeoutException].\n */\n@InternalAPI\npublic fun CoroutineScope.mapEngineExceptions(input: ByteReadChannel, request: HttpRequestData): ByteReadChannel {\n if (PlatformUtils.IS_NATIVE) {\n return input\n }\n\n val replacementChannel = ByteChannelWithMappedExceptions(request)\n\n writer(channel = replacementChannel) {\n try {\n input.copyAndClose(replacementChannel)\n } catch (cause: Throwable) {\n input.cancel(cause)\n }\n }\n\n return replacementChannel\n}\n\n/**\n * Returns [ByteWriteChannel] with [ByteChannel.close] handler that returns [SocketTimeoutException] instead of\n * [SocketTimeoutException].\n */\n@InternalAPI\npublic fun CoroutineScope.mapEngineExceptions(output: ByteWriteChannel, request: HttpRequestData): ByteWriteChannel {\n if (PlatformUtils.IS_NATIVE) {\n return output\n }\n\n val replacementChannel = ByteChannelWithMappedExceptions(request)\n\n writer(channel = replacementChannel) {\n try {\n replacementChannel.copyAndClose(output)\n } catch (cause: Throwable) {\n replacementChannel.close(cause)\n }\n }\n\n return replacementChannel\n}\n\n/**\n * Creates [ByteChannel] that maps close exceptions (close the channel with [SocketTimeoutException] if asked to\n * close it with [SocketTimeoutException]).\n */\ninternal expect fun ByteChannelWithMappedExceptions(request: HttpRequestData): ByteChannel\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.utils\n\nimport io.ktor.http.*\nimport io.ktor.util.*\n\n/**\n * Builds an instance of [Headers] using the [block] function.\n */\npublic fun buildHeaders(block: HeadersBuilder.() -> Unit = {}): Headers =\n HeadersBuilder().apply(block).build()\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js\n\nimport io.ktor.client.engine.*\nimport io.ktor.client.engine.js.compatibility.*\nimport io.ktor.client.engine.js.node.*\nimport io.ktor.client.features.*\nimport io.ktor.client.features.websocket.*\nimport io.ktor.client.request.*\nimport io.ktor.client.utils.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.util.date.*\nimport kotlinx.coroutines.*\nimport org.w3c.dom.*\nimport org.w3c.dom.events.*\nimport kotlin.coroutines.*\n\ninternal class JsClientEngine(override val config: HttpClientEngineConfig) : HttpClientEngineBase(\"ktor-js\") {\n\n override val dispatcher = Dispatchers.Default\n\n override val supportedCapabilities = setOf(HttpTimeout, WebSocketCapability)\n\n init {\n check(config.proxy == null) { \"Proxy unsupported in Js engine.\" }\n }\n\n override suspend fun execute(data: HttpRequestData): HttpResponseData {\n val callContext = callContext()\n\n if (data.isUpgradeRequest()) {\n return executeWebSocketRequest(data, callContext)\n }\n\n val requestTime = GMTDate()\n val rawRequest = data.toRaw(callContext)\n val rawResponse = commonFetch(data.url.toString(), rawRequest)\n\n val status = HttpStatusCode(rawResponse.status.toInt(), rawResponse.statusText)\n val headers = rawResponse.headers.mapToKtor()\n val version = HttpProtocolVersion.HTTP_1_1\n\n val body = CoroutineScope(callContext).readBody(rawResponse)\n\n return HttpResponseData(\n status,\n requestTime,\n headers,\n version,\n body,\n callContext\n )\n }\n\n private suspend fun executeWebSocketRequest(\n request: HttpRequestData,\n callContext: CoroutineContext\n ): HttpResponseData {\n val requestTime = GMTDate()\n\n val urlString = request.url.toString()\n val socket = if (PlatformUtils.IS_NODE) {\n NodeWebsocket(urlString)\n } else {\n WebSocket(urlString)\n }\n\n try {\n socket.awaitConnection()\n } catch (cause: Throwable) {\n callContext.cancel(CancellationException(\"Failed to connect to $urlString\", cause))\n throw cause\n }\n\n val session = JsWebSocketSession(callContext, socket)\n\n return HttpResponseData(\n HttpStatusCode.OK,\n requestTime,\n Headers.Empty,\n HttpProtocolVersion.HTTP_1_1,\n session,\n callContext\n )\n }\n}\n\nprivate suspend fun WebSocket.awaitConnection(): WebSocket = suspendCancellableCoroutine { continuation ->\n if (continuation.isCancelled) return@suspendCancellableCoroutine\n\n val eventListener = { event: Event ->\n when (event.type) {\n \"open\" -> continuation.resume(this)\n \"error\" -> continuation.resumeWithException(WebSocketException(JSON.stringify(event)))\n }\n }\n\n addEventListener(\"open\", callback = eventListener)\n addEventListener(\"error\", callback = eventListener)\n\n continuation.invokeOnCancellation {\n removeEventListener(\"open\", callback = eventListener)\n removeEventListener(\"error\", callback = eventListener)\n\n if (it != null) {\n this@awaitConnection.close()\n }\n }\n}\n\nprivate fun org.w3c.fetch.Headers.mapToKtor(): Headers = buildHeaders {\n this@mapToKtor.asDynamic().forEach { value: String, key: String ->\n append(key, value)\n }\n\n Unit\n}\n\n/**\n * Wrapper for javascript `error` objects.\n * @property origin: fail reason\n */\npublic class JsError(public val origin: dynamic) : Throwable(\"Error from javascript[$origin].\")\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js\n\nimport io.ktor.client.engine.*\nimport io.ktor.client.engine.js.node.*\nimport io.ktor.client.request.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport org.khronos.webgl.*\nimport org.w3c.fetch.*\nimport kotlin.coroutines.*\n\ninternal suspend fun HttpRequestData.toRaw(callContext: CoroutineContext): RequestInit {\n val jsHeaders = if (PlatformUtils.IS_BROWSER) {\n Headers()\n } else {\n NodeFetch.Headers()\n }\n mergeHeaders(headers, body) { key, value ->\n jsHeaders.set(key, value)\n }\n\n val bodyBytes = when (val content = body) {\n is OutgoingContent.ByteArrayContent -> content.bytes()\n is OutgoingContent.ReadChannelContent -> content.readFrom().readRemaining().readBytes()\n is OutgoingContent.WriteChannelContent -> {\n GlobalScope.writer(callContext) {\n content.writeTo(channel)\n }.channel.readRemaining().readBytes()\n }\n else -> null\n }?.let { Uint8Array(it.toTypedArray()) }\n\n return RequestInit(\n method = method.value,\n headers = jsHeaders,\n body = bodyBytes,\n redirect = RequestRedirect.FOLLOW\n )\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js.compatibility\n\nimport io.ktor.client.engine.js.browser.*\nimport io.ktor.client.engine.js.node.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.browser.*\nimport kotlinx.coroutines.*\nimport org.w3c.fetch.*\nimport kotlin.coroutines.*\nimport kotlin.js.*\n\ninternal suspend fun commonFetch(\n input: String,\n init: RequestInit\n): Response = suspendCancellableCoroutine { continuation ->\n val controller = if (PlatformUtils.IS_BROWSER) {\n AbortController()\n } else {\n NodeAbortController()\n }\n init.signal = controller.signal\n\n continuation.invokeOnCancellation {\n controller.abort()\n }\n\n val promise: Promise<Response> = if (PlatformUtils.IS_BROWSER) {\n window.fetch(input, init)\n } else {\n nodeFetch(input, init)\n }\n\n promise.then(\n onFulfilled = {\n continuation.resume(it)\n },\n onRejected = {\n continuation.resumeWithException(Error(\"Fail to fetch\", it))\n }\n )\n}\n\ninternal fun CoroutineScope.readBody(\n response: Response\n): ByteReadChannel = if (PlatformUtils.IS_BROWSER) {\n readBodyBrowser(response)\n} else {\n readBodyNode(response)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js\n\nimport kotlinx.coroutines.*\nimport org.khronos.webgl.*\nimport kotlin.coroutines.*\nimport kotlin.js.*\n\ninternal external interface ReadableStream {\n public fun getReader(): ReadableStreamReader\n}\n\ninternal external interface ReadResult {\n val done: Boolean\n val value: Uint8Array?\n}\n\ninternal external interface ReadableStreamReader {\n public fun cancel(reason: dynamic): Promise<dynamic>\n public fun read(): Promise<ReadResult>\n}\n\ninternal suspend fun ReadableStreamReader.readChunk(): Uint8Array? = suspendCancellableCoroutine { continuation ->\n read().then {\n val chunk = it.value\n val result = if (it.done || chunk == null) null else chunk\n continuation.resumeWith(Result.success(result))\n }.catch { cause ->\n continuation.resumeWithException(cause)\n }\n}\n\n@Suppress(\"UnsafeCastFromDynamic\")\ninternal fun Uint8Array.asByteArray(): ByteArray {\n return Int8Array(buffer, byteOffset, length).asDynamic()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js.browser\n\nimport io.ktor.client.engine.js.*\nimport io.ktor.client.engine.js.ReadableStream\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport org.w3c.fetch.*\n\ninternal fun CoroutineScope.readBodyBrowser(response: Response): ByteReadChannel {\n @Suppress(\"UNCHECKED_CAST_TO_EXTERNAL_INTERFACE\")\n val stream = response.body as? ReadableStream ?: error(\"Fail to obtain native stream: ${response.asDynamic()}\")\n return channelFromStream(stream)\n}\n\ninternal fun CoroutineScope.channelFromStream(\n stream: ReadableStream\n): ByteReadChannel = writer {\n val reader = stream.getReader()\n while (true) {\n try {\n val chunk = reader.readChunk() ?: break\n channel.writeFully(chunk.asByteArray())\n } catch (cause: Throwable) {\n reader.cancel(cause)\n throw cause\n }\n }\n}.channel\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.utils\n\nimport io.ktor.util.*\nimport io.ktor.util.collections.*\n\ninternal fun <K : Any, V : Any> sharedMap(): MutableMap<K, V> {\n if (PlatformUtils.IS_NATIVE) {\n return ConcurrentMap()\n }\n\n return mutableMapOf()\n}\n\ninternal fun <V> sharedList(): MutableList<V> {\n if (PlatformUtils.IS_NATIVE) {\n return ConcurrentList()\n }\n\n return mutableListOf()\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client\n\nimport io.ktor.client.engine.js.*\n\n/**\n * Constructs an asynchronous [HttpClient] using optional [block] for configuring this client.\n *\n * The [HttpClientEngine] is selected from the dependencies.\n * https://ktor.io/clients/http-client/engines.html\n */\npublic actual fun HttpClient(\n block: HttpClientConfig<*>.() -> Unit\n): HttpClient = HttpClient(JsClient(), block)\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine\n\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\n\n/**\n * Create call context with the specified [parentJob] to be used during call execution in the engine. Call context\n * inherits [coroutineContext], but overrides job and coroutine name so that call job's parent is [parentJob] and\n * call coroutine's name is \"call-context\".\n */\ninternal actual suspend fun HttpClientEngine.createCallContext(parentJob: Job): CoroutineContext {\n val callJob = Job(parentJob)\n val callContext = coroutineContext + callJob + CALL_COROUTINE\n\n attachToUserJob(callJob)\n\n return callContext\n}\n","package io.ktor.client.engine\n\nimport io.ktor.http.*\nimport io.ktor.util.network.*\n\n/**\n * Proxy configuration.\n *\n * See [ProxyBuilder] to create proxy.\n */\npublic actual class ProxyConfig\n\n/**\n * [ProxyConfig] factory.\n */\npublic actual object ProxyBuilder {\n /**\n * Create http proxy from [url].\n */\n public actual fun http(url: Url): ProxyConfig {\n error(\"Proxy unsupported in js client engine.\")\n }\n\n /**\n * Create socks proxy from [host] and [port].\n */\n public actual fun socks(host: String, port: Int): ProxyConfig {\n error(\"Proxy unsupported in js client engine.\")\n }\n}\n\n/**\n * Resolve remote address of [ProxyConfig].\n *\n * This operations can block.\n */\npublic actual fun ProxyConfig.resolveAddress(): NetworkAddress {\n error(\"Proxy unsupported in js client engine.\")\n}\n\n/**\n * Type of configured proxy.\n */\npublic actual val ProxyConfig.type: ProxyType\n get() = error(\"Proxy unsupported in js client engine.\")\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js\n\nimport io.ktor.client.engine.*\n\n/**\n * [HttpClientEngineFactory] using a fetch API to execute requests.\n */\npublic object Js : HttpClientEngineFactory<HttpClientEngineConfig> {\n override fun create(block: HttpClientEngineConfig.() -> Unit): HttpClientEngine =\n JsClientEngine(HttpClientEngineConfig().apply(block))\n}\n\n@JsName(\"JsClient\")\npublic fun JsClient(): HttpClientEngineFactory<HttpClientEngineConfig> = Js\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// NOTE: THIS FILE IS AUTO-GENERATED, DO NOT EDIT!\n// See github.com/kotlin/dukat for details\n\npackage org.w3c.fetch\n\nimport kotlin.js.*\nimport org.khronos.webgl.*\nimport org.w3c.css.masking.*\nimport org.w3c.dom.*\nimport org.w3c.dom.clipboard.*\nimport org.w3c.dom.css.*\nimport org.w3c.dom.encryptedmedia.*\nimport org.w3c.dom.events.*\nimport org.w3c.dom.mediacapture.*\nimport org.w3c.dom.mediasource.*\nimport org.w3c.dom.parsing.*\nimport org.w3c.dom.pointerevents.*\nimport org.w3c.dom.svg.*\nimport org.w3c.dom.url.*\nimport org.w3c.files.*\nimport org.w3c.notifications.*\nimport org.w3c.performance.*\nimport org.w3c.workers.*\nimport org.w3c.xhr.*\n\n/**\n * Exposes the JavaScript [Headers](https://developer.mozilla.org/en/docs/Web/API/Headers) to Kotlin\n */\npublic external open class Headers(init: dynamic = definedExternally) {\n fun append(name: String, value: String)\n fun delete(name: String)\n fun get(name: String): String?\n fun has(name: String): Boolean\n fun set(name: String, value: String)\n}\n\n/**\n * Exposes the JavaScript [Body](https://developer.mozilla.org/en/docs/Web/API/Body) to Kotlin\n */\npublic external interface Body {\n val bodyUsed: Boolean\n fun arrayBuffer(): Promise<ArrayBuffer>\n fun blob(): Promise<Blob>\n fun formData(): Promise<FormData>\n fun json(): Promise<Any?>\n fun text(): Promise<String>\n}\n\n/**\n * Exposes the JavaScript [Request](https://developer.mozilla.org/en/docs/Web/API/Request) to Kotlin\n */\npublic external open class Request(input: dynamic, init: RequestInit = definedExternally) : Body {\n open val method: String\n open val url: String\n open val headers: Headers\n open val type: RequestType\n open val destination: RequestDestination\n open val referrer: String\n open val referrerPolicy: dynamic\n open val mode: RequestMode\n open val credentials: RequestCredentials\n open val cache: RequestCache\n open val redirect: RequestRedirect\n open val integrity: String\n open val keepalive: Boolean\n override val bodyUsed: Boolean\n fun clone(): Request\n override fun arrayBuffer(): Promise<ArrayBuffer>\n override fun blob(): Promise<Blob>\n override fun formData(): Promise<FormData>\n override fun json(): Promise<Any?>\n override fun text(): Promise<String>\n}\n\npublic external interface RequestInit {\n var method: String?\n get() = definedExternally\n set(value) = definedExternally\n var headers: dynamic\n get() = definedExternally\n set(value) = definedExternally\n var body: dynamic\n get() = definedExternally\n set(value) = definedExternally\n var referrer: String?\n get() = definedExternally\n set(value) = definedExternally\n var referrerPolicy: dynamic\n get() = definedExternally\n set(value) = definedExternally\n var mode: RequestMode?\n get() = definedExternally\n set(value) = definedExternally\n var credentials: RequestCredentials?\n get() = definedExternally\n set(value) = definedExternally\n var cache: RequestCache?\n get() = definedExternally\n set(value) = definedExternally\n var redirect: RequestRedirect?\n get() = definedExternally\n set(value) = definedExternally\n var integrity: String?\n get() = definedExternally\n set(value) = definedExternally\n var keepalive: Boolean?\n get() = definedExternally\n set(value) = definedExternally\n var window: Any?\n get() = definedExternally\n set(value) = definedExternally\n}\n\n@kotlin.internal.InlineOnly\npublic inline fun RequestInit(method: String? = undefined, headers: dynamic = undefined, body: dynamic = undefined, referrer: String? = undefined, referrerPolicy: dynamic = undefined, mode: RequestMode? = undefined, credentials: RequestCredentials? = undefined, cache: RequestCache? = undefined, redirect: RequestRedirect? = undefined, integrity: String? = undefined, keepalive: Boolean? = undefined, window: Any? = undefined): RequestInit {\n val o = js(\"({})\")\n o[\"method\"] = method\n o[\"headers\"] = headers\n o[\"body\"] = body\n o[\"referrer\"] = referrer\n o[\"referrerPolicy\"] = referrerPolicy\n o[\"mode\"] = mode\n o[\"credentials\"] = credentials\n o[\"cache\"] = cache\n o[\"redirect\"] = redirect\n o[\"integrity\"] = integrity\n o[\"keepalive\"] = keepalive\n o[\"window\"] = window\n return o\n}\n\n/**\n * Exposes the JavaScript [Response](https://developer.mozilla.org/en/docs/Web/API/Response) to Kotlin\n */\npublic external open class Response(body: dynamic = definedExternally, init: ResponseInit = definedExternally) : Body {\n open val type: ResponseType\n open val url: String\n open val redirected: Boolean\n open val status: Short\n open val ok: Boolean\n open val statusText: String\n open val headers: Headers\n open val body: dynamic\n open val trailer: Promise<Headers>\n override val bodyUsed: Boolean\n fun clone(): Response\n override fun arrayBuffer(): Promise<ArrayBuffer>\n override fun blob(): Promise<Blob>\n override fun formData(): Promise<FormData>\n override fun json(): Promise<Any?>\n override fun text(): Promise<String>\n\n companion object {\n fun error(): Response\n fun redirect(url: String, status: Short = definedExternally): Response\n }\n}\n\npublic external interface ResponseInit {\n var status: Short? /* = 200 */\n get() = definedExternally\n set(value) = definedExternally\n var statusText: String? /* = \"OK\" */\n get() = definedExternally\n set(value) = definedExternally\n var headers: dynamic\n get() = definedExternally\n set(value) = definedExternally\n}\n\n@kotlin.internal.InlineOnly\npublic inline fun ResponseInit(status: Short? = 200, statusText: String? = \"OK\", headers: dynamic = undefined): ResponseInit {\n val o = js(\"({})\")\n o[\"status\"] = status\n o[\"statusText\"] = statusText\n o[\"headers\"] = headers\n return o\n}\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestType {\n companion object\n}\n\npublic inline val RequestType.Companion.EMPTY: RequestType get() = \"\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.AUDIO: RequestType get() = \"audio\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.FONT: RequestType get() = \"font\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.IMAGE: RequestType get() = \"image\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.SCRIPT: RequestType get() = \"script\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.STYLE: RequestType get() = \"style\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.TRACK: RequestType get() = \"track\".asDynamic().unsafeCast<RequestType>()\n\npublic inline val RequestType.Companion.VIDEO: RequestType get() = \"video\".asDynamic().unsafeCast<RequestType>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestDestination {\n companion object\n}\n\npublic inline val RequestDestination.Companion.EMPTY: RequestDestination get() = \"\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.DOCUMENT: RequestDestination get() = \"document\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.EMBED: RequestDestination get() = \"embed\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.FONT: RequestDestination get() = \"font\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.IMAGE: RequestDestination get() = \"image\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.MANIFEST: RequestDestination get() = \"manifest\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.MEDIA: RequestDestination get() = \"media\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.OBJECT: RequestDestination get() = \"object\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.REPORT: RequestDestination get() = \"report\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.SCRIPT: RequestDestination get() = \"script\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.SERVICEWORKER: RequestDestination get() = \"serviceworker\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.SHAREDWORKER: RequestDestination get() = \"sharedworker\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.STYLE: RequestDestination get() = \"style\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.WORKER: RequestDestination get() = \"worker\".asDynamic().unsafeCast<RequestDestination>()\n\npublic inline val RequestDestination.Companion.XSLT: RequestDestination get() = \"xslt\".asDynamic().unsafeCast<RequestDestination>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestMode {\n companion object\n}\n\npublic inline val RequestMode.Companion.NAVIGATE: RequestMode get() = \"navigate\".asDynamic().unsafeCast<RequestMode>()\n\npublic inline val RequestMode.Companion.SAME_ORIGIN: RequestMode get() = \"same-origin\".asDynamic().unsafeCast<RequestMode>()\n\npublic inline val RequestMode.Companion.NO_CORS: RequestMode get() = \"no-cors\".asDynamic().unsafeCast<RequestMode>()\n\npublic inline val RequestMode.Companion.CORS: RequestMode get() = \"cors\".asDynamic().unsafeCast<RequestMode>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestCredentials {\n companion object\n}\n\npublic inline val RequestCredentials.Companion.OMIT: RequestCredentials get() = \"omit\".asDynamic().unsafeCast<RequestCredentials>()\n\npublic inline val RequestCredentials.Companion.SAME_ORIGIN: RequestCredentials get() = \"same-origin\".asDynamic().unsafeCast<RequestCredentials>()\n\npublic inline val RequestCredentials.Companion.INCLUDE: RequestCredentials get() = \"include\".asDynamic().unsafeCast<RequestCredentials>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestCache {\n companion object\n}\n\npublic inline val RequestCache.Companion.DEFAULT: RequestCache get() = \"default\".asDynamic().unsafeCast<RequestCache>()\n\npublic inline val RequestCache.Companion.NO_STORE: RequestCache get() = \"no-store\".asDynamic().unsafeCast<RequestCache>()\n\npublic inline val RequestCache.Companion.RELOAD: RequestCache get() = \"reload\".asDynamic().unsafeCast<RequestCache>()\n\npublic inline val RequestCache.Companion.NO_CACHE: RequestCache get() = \"no-cache\".asDynamic().unsafeCast<RequestCache>()\n\npublic inline val RequestCache.Companion.FORCE_CACHE: RequestCache get() = \"force-cache\".asDynamic().unsafeCast<RequestCache>()\n\npublic inline val RequestCache.Companion.ONLY_IF_CACHED: RequestCache get() = \"only-if-cached\".asDynamic().unsafeCast<RequestCache>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface RequestRedirect {\n companion object\n}\n\npublic inline val RequestRedirect.Companion.FOLLOW: RequestRedirect get() = \"follow\".asDynamic().unsafeCast<RequestRedirect>()\n\npublic inline val RequestRedirect.Companion.ERROR: RequestRedirect get() = \"error\".asDynamic().unsafeCast<RequestRedirect>()\n\npublic inline val RequestRedirect.Companion.MANUAL: RequestRedirect get() = \"manual\".asDynamic().unsafeCast<RequestRedirect>()\n\n/* please, don't implement this interface! */\n@Suppress(\"NESTED_CLASS_IN_EXTERNAL_INTERFACE\")\npublic external interface ResponseType {\n companion object\n}\n\npublic inline val ResponseType.Companion.BASIC: ResponseType get() = \"basic\".asDynamic().unsafeCast<ResponseType>()\n\npublic inline val ResponseType.Companion.CORS: ResponseType get() = \"cors\".asDynamic().unsafeCast<ResponseType>()\n\npublic inline val ResponseType.Companion.DEFAULT: ResponseType get() = \"default\".asDynamic().unsafeCast<ResponseType>()\n\npublic inline val ResponseType.Companion.ERROR: ResponseType get() = \"error\".asDynamic().unsafeCast<ResponseType>()\n\npublic inline val ResponseType.Companion.OPAQUE: ResponseType get() = \"opaque\".asDynamic().unsafeCast<ResponseType>()\n\npublic inline val ResponseType.Companion.OPAQUEREDIRECT: ResponseType get() = \"opaqueredirect\".asDynamic().unsafeCast<ResponseType>()","/*\n * Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js.compatibility\n\nimport org.w3c.dom.events.*\nimport org.w3c.fetch.*\n\n// https://youtrack.jetbrains.com/issue/KT-29243\n/**\n * https://fetch.spec.whatwg.org/#dom-request-signal\n */\ninternal var RequestInit.signal: AbortSignal\n get() = asDynamic().signal as AbortSignal\n set(newValue) {\n asDynamic().signal = newValue\n }\n\n/**\n * Exposes the JavaScript [AbortController](https://dom.spec.whatwg.org/#interface-abortcontroller) to Kotlin\n */\ninternal open external class AbortController {\n var signal: AbortSignal\n fun abort()\n}\n\n/**\n * Exposes the JavaScript [AbortSignal](https://dom.spec.whatwg.org/#interface-AbortSignal) to Kotlin\n */\ninternal abstract external class AbortSignal : EventTarget {\n var aborted: Boolean\n var onabort: ((AbortSignal, ev: Event) -> Any)?\n get() = definedExternally\n set(value) = definedExternally\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.engine.js.node\n\nimport io.ktor.client.engine.js.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.*\nimport org.khronos.webgl.ArrayBuffer\nimport org.khronos.webgl.Uint8Array\nimport org.w3c.fetch.*\n\ninternal fun CoroutineScope.readBodyNode(response: Response): ByteReadChannel = writer {\n val body: dynamic = response.body ?: error(\"Fail to get body\")\n\n val responseData = Channel<ByteArray>(1)\n\n body.on(\"data\") { chunk: ArrayBuffer ->\n responseData.offer(Uint8Array(chunk).asByteArray())\n body.pause()\n }\n\n body.on(\"error\") { error ->\n val cause = JsError(error)\n responseData.close(cause)\n channel.close(cause)\n }\n\n body.on(\"end\") {\n responseData.close()\n }\n\n try {\n for (chunk in responseData) {\n channel.writeFully(chunk)\n body.resume()\n }\n } catch (cause: Throwable) {\n body.destroy(cause)\n throw cause\n }\n}.channel\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features\n\nimport io.ktor.client.*\n\ninternal actual fun HttpClient.platformDefaultTransformers() {}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.websocket\n\nimport io.ktor.http.cio.websocket.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.*\nimport org.khronos.webgl.*\nimport org.w3c.dom.*\nimport kotlin.coroutines.*\n\ninternal class JsWebSocketSession(\n override val coroutineContext: CoroutineContext,\n private val websocket: WebSocket\n) : DefaultWebSocketSession {\n private val _closeReason: CompletableDeferred<CloseReason> = CompletableDeferred()\n private val _incoming: Channel<Frame> = Channel(Channel.UNLIMITED)\n private val _outgoing: Channel<Frame> = Channel(Channel.UNLIMITED)\n\n override val incoming: ReceiveChannel<Frame> = _incoming\n override val outgoing: SendChannel<Frame> = _outgoing\n\n @ExperimentalWebSocketExtensionApi\n override val extensions: List<WebSocketExtension<*>> get() = emptyList()\n\n override val closeReason: Deferred<CloseReason?> = _closeReason\n\n override var maxFrameSize: Long\n get() = Long.MAX_VALUE\n set(value) {}\n\n init {\n websocket.binaryType = BinaryType.ARRAYBUFFER\n\n websocket.addEventListener(\n \"message\",\n callback = {\n val event = it.unsafeCast<MessageEvent>()\n\n launch {\n val data = event.data\n\n val frame: Frame = when (data) {\n is ArrayBuffer -> Frame.Binary(false, Int8Array(data).unsafeCast<ByteArray>())\n is String -> Frame.Text(data)\n else -> {\n val error = IllegalStateException(\"Unknown frame type: ${event.type}\")\n _closeReason.completeExceptionally(error)\n throw error\n }\n }\n\n _incoming.offer(frame)\n }\n }\n )\n\n websocket.addEventListener(\n \"error\",\n callback = {\n val cause = WebSocketException(\"$it\")\n _closeReason.completeExceptionally(cause)\n _incoming.close(cause)\n _outgoing.cancel()\n }\n )\n\n websocket.addEventListener(\n \"close\",\n callback = { event: dynamic ->\n launch {\n val reason = CloseReason(event.code as Short, event.reason as String)\n _closeReason.complete(reason)\n _incoming.send(Frame.Close(reason))\n _incoming.close()\n\n _outgoing.cancel()\n }\n }\n )\n\n launch {\n @OptIn(ExperimentalCoroutinesApi::class)\n _outgoing.consumeEach {\n when (it.frameType) {\n FrameType.TEXT -> {\n val text = it.data\n websocket.send(String(text))\n }\n FrameType.BINARY -> {\n val source = it.data as Int8Array\n val frameData = source.buffer.slice(\n source.byteOffset,\n source.byteOffset + source.byteLength\n )\n\n websocket.send(frameData)\n }\n FrameType.CLOSE -> {\n val data = buildPacket { writeFully(it.data) }\n val code = data.readShort()\n val reason = data.readText()\n _closeReason.complete(CloseReason(code, reason))\n if (code.isReservedStatusCode()) {\n websocket.close()\n } else {\n websocket.close(code, reason)\n }\n }\n FrameType.PING, FrameType.PONG -> {\n // ignore\n }\n }\n }\n }\n\n coroutineContext[Job]?.invokeOnCompletion { cause ->\n if (cause == null) {\n websocket.close()\n } else {\n websocket.close(CloseReason.Codes.INTERNAL_ERROR.code, \"Client failed\")\n }\n }\n }\n\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n override fun start(negotiatedExtensions: List<WebSocketExtension<*>>) {\n require(negotiatedExtensions.isEmpty()) { \"Extensions are not supported.\" }\n }\n\n override suspend fun flush() {\n }\n\n @Deprecated(\n \"Use cancel() instead.\",\n ReplaceWith(\"cancel()\", \"kotlinx.coroutines.cancel\")\n )\n override fun terminate() {\n _incoming.cancel()\n _outgoing.cancel()\n _closeReason.cancel(\"WebSocket terminated\")\n websocket.close()\n }\n\n private fun Short.isReservedStatusCode(): Boolean {\n return CloseReason.Codes.byCode(this).let { resolved ->\n @Suppress(\"DEPRECATION\")\n resolved == null || resolved == CloseReason.Codes.CLOSED_ABNORMALLY\n }\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","(function (root, factory) {\n if (typeof define === 'function' && define.amd)\n define(['exports', 'kotlin', 'react', 'kotlin-wrappers-kotlin-extensions-jsLegacy', 'kotlinx-coroutines-core'], factory);\n else if (typeof exports === 'object')\n factory(module.exports, require('kotlin'), require('react'), require('kotlin-wrappers-kotlin-extensions-jsLegacy'), require('kotlinx-coroutines-core'));\n else {\n if (typeof kotlin === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-jsLegacy'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'kotlin-wrappers-kotlin-react-jsLegacy'.\");\n }if (typeof react === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-jsLegacy'. Its dependency 'react' was not found. Please, check whether 'react' is loaded prior to 'kotlin-wrappers-kotlin-react-jsLegacy'.\");\n }if (typeof this['kotlin-wrappers-kotlin-extensions-jsLegacy'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-jsLegacy'. Its dependency 'kotlin-wrappers-kotlin-extensions-jsLegacy' was not found. Please, check whether 'kotlin-wrappers-kotlin-extensions-jsLegacy' is loaded prior to 'kotlin-wrappers-kotlin-react-jsLegacy'.\");\n }if (typeof this['kotlinx-coroutines-core'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-jsLegacy'. Its dependency 'kotlinx-coroutines-core' was not found. Please, check whether 'kotlinx-coroutines-core' is loaded prior to 'kotlin-wrappers-kotlin-react-jsLegacy'.\");\n }root['kotlin-wrappers-kotlin-react-jsLegacy'] = factory(typeof this['kotlin-wrappers-kotlin-react-jsLegacy'] === 'undefined' ? {} : this['kotlin-wrappers-kotlin-react-jsLegacy'], kotlin, react, this['kotlin-wrappers-kotlin-extensions-jsLegacy'], this['kotlinx-coroutines-core']);\n }\n}(this, function (_, Kotlin, $module$react, $module$kotlin_wrappers_kotlin_extensions_jsLegacy, $module$kotlinx_coroutines_core) {\n 'use strict';\n var $$importsForInline$$ = _.$$importsForInline$$ || (_.$$importsForInline$$ = {});\n var Unit = Kotlin.kotlin.Unit;\n var Kind_CLASS = Kotlin.Kind.CLASS;\n var Annotation = Kotlin.kotlin.Annotation;\n var createElement = $module$react.createElement;\n var emptyList = Kotlin.kotlin.collections.emptyList_287e2$;\n var clone = $module$kotlin_wrappers_kotlin_extensions_jsLegacy.kotlinext.js.clone_issdgt$;\n var defineInlineFunction = Kotlin.defineInlineFunction;\n var wrapFunction = Kotlin.wrapFunction;\n var listOf = Kotlin.kotlin.collections.listOf_mh5how$;\n var Children = $module$react.Children;\n var addAll = Kotlin.kotlin.collections.addAll_ye1y7v$;\n var throwCCE = Kotlin.throwCCE;\n var cloneElement = $module$react.cloneElement;\n var first = Kotlin.kotlin.collections.first_2p1efm$;\n var ArrayList_init = Kotlin.kotlin.collections.ArrayList_init_287e2$;\n var copyToArray = Kotlin.kotlin.collections.copyToArray;\n var collectionSizeOrDefault = Kotlin.kotlin.collections.collectionSizeOrDefault_ba2ldo$;\n var ArrayList_init_0 = Kotlin.kotlin.collections.ArrayList_init_ww73n8$;\n var checkIndexOverflow = Kotlin.kotlin.collections.checkIndexOverflow_za3lpa$;\n var IllegalStateException_init = Kotlin.kotlin.IllegalStateException_init_pdl1vj$;\n var get_js = Kotlin.kotlin.js.get_js_1yb8b7$;\n var coroutines = $module$kotlinx_coroutines_core.kotlinx.coroutines;\n var Throwable = Error;\n var COROUTINE_SUSPENDED = Kotlin.kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED;\n var CoroutineImpl = Kotlin.kotlin.coroutines.CoroutineImpl;\n var launch = $module$kotlinx_coroutines_core.kotlinx.coroutines.launch_s496o7$;\n var Component = $module$react.Component;\n var Any = Object;\n var ReadWriteProperty = Kotlin.kotlin.properties.ReadWriteProperty;\n var to = Kotlin.kotlin.to_ujzrz7$;\n var rawUseEffect = $module$react.useEffect;\n RElementBuilder.prototype = Object.create(RBuilder.prototype);\n RElementBuilder.prototype.constructor = RElementBuilder;\n RComponent.prototype = Object.create(Component.prototype);\n RComponent.prototype.constructor = RComponent;\n function RBuilder() {\n this.childList = ArrayList_init();\n }\n RBuilder.prototype.child_52psg1$ = function (element) {\n this.childList.add_11rb$(element);\n return element;\n };\n RBuilder.prototype.unaryPlus_84gpoi$ = function ($receiver) {\n this.childList.add_11rb$($receiver);\n };\n RBuilder.prototype.unaryPlus_pdl1vz$ = function ($receiver) {\n this.childList.add_11rb$($receiver);\n };\n RBuilder.prototype.child_k3oess$ = function (type, props, children) {\n return this.child_52psg1$(createElement.apply(null, [type, props].concat(copyToArray(children))));\n };\n RBuilder.prototype.child_4dvv5y$ = function (type, props, handler) {\n var $receiver = new RElementBuilder(props);\n handler($receiver);\n var children = $receiver.childList;\n return this.child_k3oess$(type, props, children);\n };\n RBuilder.prototype.invoke_eb8iu4$ = function ($receiver, handler) {\n return this.child_4dvv5y$($receiver, {}, handler);\n };\n RBuilder.prototype.invoke_csqs6z$ = function ($receiver, value, handler) {\n var $receiver_0 = {};\n $receiver_0.value = value;\n return this.child_4dvv5y$($receiver, $receiver_0, handler);\n };\n function RBuilder$invoke$lambda$lambda$lambda(closure$handler, closure$value) {\n return function ($receiver) {\n closure$handler($receiver, closure$value);\n return Unit;\n };\n }\n function RBuilder$invoke$lambda$lambda(closure$handler) {\n return function (value) {\n return buildElements(RBuilder$invoke$lambda$lambda$lambda(closure$handler, value));\n };\n }\n function RBuilder$invoke$lambda($receiver) {\n return Unit;\n }\n RBuilder.prototype.invoke_ory6b3$ = function ($receiver, handler) {\n var $receiver_0 = {};\n $receiver_0.children = RBuilder$invoke$lambda$lambda(handler);\n return this.child_4dvv5y$($receiver, $receiver_0, RBuilder$invoke$lambda);\n };\n RBuilder.prototype.node_rwypko$ = function ($receiver, props, children) {\n if (children === void 0)\n children = emptyList();\n return this.child_k3oess$($receiver, clone(props), children);\n };\n RBuilder.prototype.child_ssazr1$ = function (klazz, handler) {\n return this.invoke_eb8iu4$(get_rClass(klazz), handler);\n };\n RBuilder.prototype.child_t7en6a$ = defineInlineFunction('kotlin-wrappers-kotlin-react-jsLegacy.react.RBuilder.child_t7en6a$', wrapFunction(function () {\n var getKClass = Kotlin.getKClass;\n return function (C_0, isC, handler) {\n return this.child_ssazr1$(getKClass(C_0), handler);\n };\n }));\n function RBuilder$childFunction$lambda(closure$children) {\n return function (value) {\n var $receiver = new RBuilder();\n closure$children($receiver, value);\n return first($receiver.childList);\n };\n }\n RBuilder.prototype.childFunction_2656uf$ = function (klazz, handler, children) {\n var tmp$ = get_rClass(klazz);\n var $receiver = new RElementBuilder({});\n handler($receiver);\n return this.child_k3oess$(tmp$, $receiver.attrs, listOf(RBuilder$childFunction$lambda(children)));\n };\n RBuilder.prototype.childFunction_khdow9$ = defineInlineFunction('kotlin-wrappers-kotlin-react-jsLegacy.react.RBuilder.childFunction_khdow9$', wrapFunction(function () {\n var getKClass = Kotlin.getKClass;\n return function (C_0, isC, handler, children) {\n return this.childFunction_2656uf$(getKClass(C_0), handler, children);\n };\n }));\n RBuilder.prototype.node_3ecl1l$ = function (klazz, props, children) {\n if (children === void 0)\n children = emptyList();\n return this.node_rwypko$(get_rClass(klazz), props, children);\n };\n RBuilder.prototype.node_e2hqbc$ = defineInlineFunction('kotlin-wrappers-kotlin-react-jsLegacy.react.RBuilder.node_e2hqbc$', wrapFunction(function () {\n var emptyList = Kotlin.kotlin.collections.emptyList_287e2$;\n var getKClass = Kotlin.getKClass;\n return function (C_0, isC, props, children) {\n if (children === void 0)\n children = emptyList();\n return this.node_3ecl1l$(getKClass(C_0), props, children);\n };\n }));\n RBuilder.prototype.children_yllgzm$ = function ($receiver) {\n addAll(this.childList, Children.toArray(get_children($receiver)));\n };\n RBuilder.prototype.children_48djri$ = function ($receiver, value) {\n var tmp$;\n this.childList.add_11rb$((typeof (tmp$ = get_children($receiver)) === 'function' ? tmp$ : throwCCE())(value));\n };\n RBuilder.prototype.renderEach_3b8uhr$ = function ($receiver, fn) {\n var tmp$ = this.childList;\n var destination = ArrayList_init_0(collectionSizeOrDefault($receiver, 10));\n var tmp$_0;\n tmp$_0 = $receiver.iterator();\n while (tmp$_0.hasNext()) {\n var item = tmp$_0.next();\n var tmp$_1 = destination.add_11rb$;\n var $receiver_0 = new RBuilder();\n fn($receiver_0, item);\n tmp$_1.call(destination, first($receiver_0.childList));\n }\n tmp$.add_11rb$(copyToArray(destination));\n };\n RBuilder.prototype.renderEachIndexed_a4qrr7$ = function ($receiver, fn) {\n var tmp$ = this.childList;\n var destination = ArrayList_init_0(collectionSizeOrDefault($receiver, 10));\n var tmp$_0, tmp$_0_0;\n var index = 0;\n tmp$_0 = $receiver.iterator();\n while (tmp$_0.hasNext()) {\n var item = tmp$_0.next();\n var tmp$_1 = destination.add_11rb$;\n var index_0 = checkIndexOverflow((tmp$_0_0 = index, index = tmp$_0_0 + 1 | 0, tmp$_0_0));\n var $receiver_0 = new RBuilder();\n fn($receiver_0, index_0, item);\n tmp$_1.call(destination, first($receiver_0.childList));\n }\n tmp$.add_11rb$(copyToArray(destination));\n };\n RBuilder.prototype.withKey_s5hl0b$ = function ($receiver, newKey) {\n var index = this.childList.indexOf_11rb$($receiver);\n if (index >= 0) {\n this.childList.removeAt_za3lpa$(index);\n var $receiver_0 = {};\n set_key($receiver_0, newKey);\n var elementWithKey = cloneElement($receiver, $receiver_0);\n this.childList.add_wxm5ur$(index, elementWithKey);\n }};\n RBuilder.prototype.withKey_pspxar$ = function ($receiver, newKey) {\n this.withKey_s5hl0b$($receiver, newKey.toString());\n };\n RBuilder.$metadata$ = {kind: Kind_CLASS, simpleName: 'RBuilder', interfaces: []};\n function buildElements(handler) {\n var tmp$;\n var $receiver = new RBuilder();\n handler($receiver);\n var nodes = $receiver.childList;\n switch (nodes.size) {\n case 0:\n tmp$ = null;\n break;\n case 1:\n tmp$ = first(nodes);\n break;\n default:var tmp$_0 = $module$react.Fragment;\n var $receiver_0 = {};\n tmp$ = createElement.apply(null, [tmp$_0, $receiver_0].concat(copyToArray(nodes)));\n break;\n }\n return tmp$;\n }\n function RElementBuilder(attrs) {\n RBuilder.call(this);\n this.attrs_iyt8sk$_0 = attrs;\n }\n Object.defineProperty(RElementBuilder.prototype, 'attrs', {get: function () {\n return this.attrs_iyt8sk$_0;\n }});\n RElementBuilder.prototype.attrs_slhiwc$ = function (handler) {\n handler(this.attrs);\n };\n Object.defineProperty(RElementBuilder.prototype, 'key', {configurable: true, get: function () {\n throw IllegalStateException_init(''.toString());\n }, set: function (value) {\n set_key(this.attrs, value);\n }});\n Object.defineProperty(RElementBuilder.prototype, 'ref', {configurable: true, get: function () {\n throw IllegalStateException_init(''.toString());\n }, set: function (value) {\n set_ref(this.attrs, value);\n }});\n RElementBuilder.prototype.ref_5ij4lk$ = function (handler) {\n ref(this.attrs, handler);\n };\n RElementBuilder.$metadata$ = {kind: Kind_CLASS, simpleName: 'RElementBuilder', interfaces: [RBuilder]};\n function functionalComponent$lambda$lambda(closure$func, closure$props) {\n return function ($receiver) {\n closure$func($receiver, closure$props);\n return Unit;\n };\n }\n function functionalComponent$lambda(closure$func) {\n return function (props) {\n return buildElements(functionalComponent$lambda$lambda(closure$func, props));\n };\n }\n function functionalComponent(displayName, func) {\n if (displayName === void 0)\n displayName = null;\n var fc = functionalComponent$lambda(func);\n if (displayName != null) {\n fc.displayName = displayName;\n }return fc;\n }\n function child$lambda($receiver) {\n return Unit;\n }\n function child($receiver, component, props, handler) {\n if (props === void 0) {\n props = {};\n }if (handler === void 0)\n handler = child$lambda;\n return $receiver.child_4dvv5y$(component, props, handler);\n }\n function get_rClass($receiver) {\n return get_js($receiver);\n }\n function get_children($receiver) {\n return $receiver.children;\n }\n function set_key($receiver, value) {\n $receiver.key = value;\n }\n function set_ref($receiver, value) {\n $receiver.ref = value;\n }\n function ref($receiver, ref) {\n $receiver.ref = ref;\n }\n function setState$lambda(closure$buildState) {\n return function (it) {\n var builder = closure$buildState;\n var $receiver = clone(it);\n builder($receiver);\n return $receiver;\n };\n }\n function setState($receiver, buildState) {\n $receiver.setState(setState$lambda(buildState));\n }\n function RComponent() {\n }\n RComponent.prototype.init_bc6fkx$ = function ($receiver) {\n };\n RComponent.prototype.init_65a95q$ = function ($receiver, props) {\n };\n RComponent.prototype.children_ss14n$ = function ($receiver) {\n $receiver.children_yllgzm$(this.props);\n };\n RComponent.prototype.children_tgvp6h$ = function ($receiver, value) {\n $receiver.children_48djri$(this.props, value);\n };\n function RComponent$render$lambda(this$RComponent) {\n return function ($receiver) {\n this$RComponent.render_ss14n$($receiver);\n return Unit;\n };\n }\n RComponent.prototype.render = function () {\n return buildElements(RComponent$render$lambda(this));\n };\n RComponent.$metadata$ = {kind: Kind_CLASS, simpleName: 'RComponent', interfaces: []};\n function RComponent_init_0(props, $this) {\n $this = $this || Object.create(RComponent.prototype);\n Component.call($this, props);\n RComponent.call($this);\n var $receiver = {};\n $this.init_65a95q$($receiver, props);\n $this.state = $receiver;\n return $this;\n }\n function RStateDelegate(state, setState) {\n this.state_0 = state;\n this.setState_0 = setState;\n }\n RStateDelegate.prototype.component1 = function () {\n return this.state_0;\n };\n RStateDelegate.prototype.component2 = function () {\n return this.setState_0;\n };\n RStateDelegate.prototype.getValue_lrcp0p$ = function (thisRef, property) {\n return this.state_0;\n };\n RStateDelegate.prototype.setValue_9rddgb$ = function (thisRef, property, value) {\n this.setState_0(value);\n };\n RStateDelegate.$metadata$ = {kind: Kind_CLASS, simpleName: 'RStateDelegate', interfaces: [ReadWriteProperty]};\n function useEffect$lambda(closure$effect) {\n return function () {\n closure$effect();\n return undefined;\n };\n }\n function useEffect(dependencies, effect) {\n if (dependencies === void 0)\n dependencies = null;\n var rawEffect = useEffect$lambda(effect);\n if (dependencies != null) {\n rawUseEffect(rawEffect, copyToArray(dependencies));\n } else {\n rawUseEffect(rawEffect);\n }\n }\n var package$react = _.react || (_.react = {});\n $$importsForInline$$['kotlin-wrappers-kotlin-extensions-jsLegacy'] = $module$kotlin_wrappers_kotlin_extensions_jsLegacy;\n package$react.RBuilder = RBuilder;\n package$react.buildElements_zepujl$ = buildElements;\n package$react.RElementBuilder = RElementBuilder;\n package$react.functionalComponent_7g4vsr$ = functionalComponent;\n package$react.child_9r8yuv$ = child;\n $$importsForInline$$.react = $module$react;\n package$react.get_rClass_inwa2g$ = get_rClass;\n package$react.get_children_yllgzm$ = get_children;\n package$react.set_key_38rnt0$ = set_key;\n package$react.set_ref_jjyqia$ = set_ref;\n package$react.ref_dpkau5$ = ref;\n package$react.setState_kpl3tw$ = setState;\n package$react.RComponent_init_8bz2yq$ = RComponent_init_0;\n package$react.RComponent = RComponent;\n package$react.RStateDelegate = RStateDelegate;\n package$react.useEffect_wrbdb4$ = useEffect;\n return _;\n}));\n\n//# sourceMappingURL=kotlin-wrappers-kotlin-react-jsLegacy.js.map\n","package com.arkivanov.mvikotlin.rx\n\n// Expect/actual workaround for https://github.com/arkivanov/MVIKotlin/issues/145\nexpect fun <T> observer(onComplete: () -> Unit = {}, onNext: (T) -> Unit = {}): Observer<T>\n","package com.arkivanov.mvikotlin.rx\n\nactual fun <T> observer(onComplete: () -> Unit, onNext: (T) -> Unit): Observer<T> =\n ObserverImpl(onComplete, onNext)\n\nprivate class ObserverImpl<T>(\n private val onComplete: () -> Unit,\n private val onNext: (T) -> Unit\n) : Observer<T> {\n override fun onNext(value: T) {\n onNext.invoke(value)\n }\n\n override fun onComplete() {\n onComplete.invoke()\n }\n}\n",null,null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.database.TokenDBQueries\nimport com.shabinder.common.di.spotify.authenticateSpotify\nimport com.shabinder.common.models.spotify.TokenData\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.launch\nimport kotlinx.datetime.Clock\n\nclass TokenStore(\n private val dir: Dir,\n private val logger: Kermit,\n) {\n private val db: TokenDBQueries?\n get() = dir.db?.tokenDBQueries\n\n private fun save(token: TokenData) {\n if (!token.access_token.isNullOrBlank() && token.expiry != null)\n db?.add(token.access_token!!, token.expiry!! + Clock.System.now().epochSeconds)\n }\n\n suspend fun getToken(): TokenData? {\n var token: TokenData? = db?.select()?.executeAsOneOrNull()?.let {\n TokenData(it.accessToken, null, it.expiry)\n }\n logger.d { \"System Time:${Clock.System.now().epochSeconds} , Token Expiry:${token?.expiry}\" }\n if (Clock.System.now().epochSeconds > token?.expiry ?: 0 || token == null) {\n logger.d { \"Requesting New Token\" }\n token = authenticateSpotify()\n GlobalScope.launch { token?.access_token?.let { save(token) } }\n }\n return token\n }\n}\n",null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.database.createDatabase\nimport com.shabinder.common.database.getLogger\nimport com.shabinder.common.di.providers.GaanaProvider\nimport com.shabinder.common.di.providers.SpotifyProvider\nimport com.shabinder.common.di.providers.YoutubeMp3\nimport com.shabinder.common.di.providers.YoutubeMusic\nimport io.ktor.client.HttpClient\nimport io.ktor.client.features.json.JsonFeature\nimport io.ktor.client.features.json.serializer.KotlinxSerializer\nimport io.ktor.client.features.logging.DEFAULT\nimport io.ktor.client.features.logging.LogLevel\nimport io.ktor.client.features.logging.Logger\nimport io.ktor.client.features.logging.Logging\nimport kotlinx.serialization.json.Json\nimport org.koin.core.context.startKoin\nimport org.koin.dsl.KoinAppDeclaration\nimport org.koin.dsl.module\n\nfun initKoin(enableNetworkLogs: Boolean = false, appDeclaration: KoinAppDeclaration = {}) =\n startKoin {\n appDeclaration()\n modules(commonModule(enableNetworkLogs = enableNetworkLogs))\n }\n\nfun commonModule(enableNetworkLogs: Boolean) = module {\n single { createHttpClient(enableNetworkLogs = enableNetworkLogs) }\n single { Dir(get(), createDatabase()) }\n single { Kermit(getLogger()) }\n single { TokenStore(get(), get()) }\n single { YoutubeMusic(get(), get()) }\n single { SpotifyProvider(get(), get(), get()) }\n single { GaanaProvider(get(), get(), get()) }\n single { YoutubeProvider(get(), get(), get()) }\n single { YoutubeMp3(get(), get(), get()) }\n single { FetchPlatformQueryResult(get(), get(), get(), get(), get(), get()) }\n}\n\nval kotlinxSerializer = KotlinxSerializer(\n Json {\n isLenient = true\n ignoreUnknownKeys = true\n }\n)\n\nfun createHttpClient(enableNetworkLogs: Boolean = false, serializer: KotlinxSerializer = kotlinxSerializer) = HttpClient {\n install(JsonFeature) {\n this.serializer = serializer\n }\n if (enableNetworkLogs) {\n install(Logging) {\n logger = Logger.DEFAULT\n level = LogLevel.INFO\n }\n }\n}\nval ktorHttpClient = HttpClient {}\n",null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.database.createDatabase\nimport com.shabinder.common.di.utils.removeIllegalChars\nimport com.shabinder.common.models.DownloadResult\nimport com.shabinder.common.models.TrackDetails\nimport com.shabinder.database.Database\nimport io.ktor.client.request.get\nimport io.ktor.client.statement.HttpStatement\nimport io.ktor.http.contentLength\nimport io.ktor.http.isSuccess\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport kotlin.math.roundToInt\n\nexpect class Dir(\n logger: Kermit,\n database: Database? = createDatabase()\n) {\n val db: Database?\n fun isPresent(path: String): Boolean\n fun fileSeparator(): String\n fun defaultDir(): String\n fun imageCacheDir(): String\n fun createDirectory(dirPath: String)\n suspend fun cacheImage(image: Any, path: String) // in Android = ImageBitmap, Desktop = BufferedImage\n suspend fun loadImage(url: String): Picture\n suspend fun clearCache()\n suspend fun saveFileWithMetadata(mp3ByteArray: ByteArray, trackDetails: TrackDetails)\n fun addToLibrary(path: String)\n}\n\nsuspend fun downloadFile(url: String): Flow<DownloadResult> {\n return flow {\n val client = createHttpClient()\n val response = client.get<HttpStatement>(url).execute()\n val data = ByteArray(response.contentLength()!!.toInt())\n var offset = 0\n do {\n val currentRead = response.content.readAvailable(data, offset, data.size)\n offset += currentRead\n val progress = (offset * 100f / data.size).roundToInt()\n emit(DownloadResult.Progress(progress))\n } while (currentRead > 0)\n if (response.status.isSuccess()) {\n emit(DownloadResult.Success(data))\n } else {\n emit(DownloadResult.Error(\"File not downloaded\"))\n }\n client.close()\n }\n}\nfun getNameURL(url: String): String {\n return url.substring(url.lastIndexOf('/', url.lastIndexOf('/') - 1) + 1, url.length).replace('/', '_')\n}\n/*\n* Call this function at startup!\n* */\nfun Dir.createDirectories() {\n createDirectory(defaultDir())\n createDirectory(imageCacheDir())\n createDirectory(defaultDir() + \"Tracks/\")\n createDirectory(defaultDir() + \"Albums/\")\n createDirectory(defaultDir() + \"Playlists/\")\n createDirectory(defaultDir() + \"YT_Downloads/\")\n}\nfun Dir.finalOutputDir(itemName: String, type: String, subFolder: String, defaultDir: String, extension: String = \".mp3\"): String =\n defaultDir + removeIllegalChars(type) + this.fileSeparator() +\n if (subFolder.isEmpty())\"\" else { removeIllegalChars(subFolder) + this.fileSeparator() } +\n removeIllegalChars(itemName) + extension\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport com.shabinder.common.database.DownloadRecordDatabaseQueries\nimport com.shabinder.common.di.providers.GaanaProvider\nimport com.shabinder.common.di.providers.SpotifyProvider\nimport com.shabinder.common.di.providers.YoutubeMp3\nimport com.shabinder.common.di.providers.YoutubeMusic\nimport com.shabinder.common.models.PlatformQueryResult\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\n\nclass FetchPlatformQueryResult(\n private val gaanaProvider: GaanaProvider,\n private val spotifyProvider: SpotifyProvider,\n val youtubeProvider: YoutubeProvider,\n val youtubeMusic: YoutubeMusic,\n val youtubeMp3: YoutubeMp3,\n private val dir: Dir\n) {\n private val db: DownloadRecordDatabaseQueries?\n get() = dir.db?.downloadRecordDatabaseQueries\n\n suspend fun query(link: String): PlatformQueryResult? {\n val result = when {\n // SPOTIFY\n link.contains(\"spotify\", true) ->\n spotifyProvider.query(link)\n\n // YOUTUBE\n link.contains(\"youtube.com\", true) || link.contains(\"youtu.be\", true) ->\n youtubeProvider.query(link)\n\n // GAANA\n link.contains(\"gaana\", true) ->\n gaanaProvider.query(link)\n\n else -> {\n null\n }\n }\n result?.run {\n withContext(Dispatchers.Default) {\n db?.add(\n folderType, title, link, coverUrl, trackList.size.toLong()\n )\n }\n }\n return result\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.gaana\n\nimport com.shabinder.common.di.currentPlatform\nimport com.shabinder.common.models.AllPlatforms\nimport com.shabinder.common.models.corsProxy\nimport com.shabinder.common.models.gaana.GaanaAlbum\nimport com.shabinder.common.models.gaana.GaanaArtistDetails\nimport com.shabinder.common.models.gaana.GaanaArtistTracks\nimport com.shabinder.common.models.gaana.GaanaPlaylist\nimport com.shabinder.common.models.gaana.GaanaSong\nimport io.ktor.client.HttpClient\nimport io.ktor.client.request.get\n\nval corsApi get() = if (currentPlatform is AllPlatforms.Js) {\n corsProxy.url\n} // \"https://spotiflyer-cors.azurewebsites.net/\" //\"https://spotiflyer-cors.herokuapp.com/\"//\"https://cors.bridged.cc/\"\nelse \"\"\n\nprivate const val TOKEN = \"b2e6d7fbc136547a940516e9b77e5990\"\nprivate val BASE_URL get() = \"${corsApi}https://api.gaana.com\"\n\ninterface GaanaRequests {\n\n val httpClient: HttpClient\n\n /*\n * Api Request: http://api.gaana.com/?type=playlist&subtype=playlist_detail&seokey=gaana-dj-hindi-top-50-1&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON\n *\n * subtype : [\"most_popular_playlist\" , \"playlist_home_featured\" ,\"playlist_detail\" ,\"user_playlist\" ,\"topCharts\"]\n **/\n suspend fun getGaanaPlaylist(\n type: String = \"playlist\",\n subtype: String = \"playlist_detail\",\n seokey: String,\n format: String = \"JSON\",\n limit: Int = 2000\n ): GaanaPlaylist {\n return httpClient.get(\n \"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit\"\n )\n }\n\n /*\n * Api Request: http://api.gaana.com/?type=album&subtype=album_detail&seokey=kabir-singh&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON\n *\n * subtype : [\"most_popular\" , \"new_release\" ,\"featured_album\" ,\"similar_album\" ,\"all_albums\", \"album\" ,\"album_detail\" ,\"album_detail_info\"]\n **/\n suspend fun getGaanaAlbum(\n type: String = \"album\",\n subtype: String = \"album_detail\",\n seokey: String,\n format: String = \"JSON\",\n limit: Int = 2000\n ): GaanaAlbum {\n return httpClient.get(\n \"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit\"\n )\n }\n\n /*\n * Api Request: http://api.gaana.com/?type=song&subtype=song_detail&seokey=pachtaoge&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON\n *\n * subtype : [\"most_popular\" , \"hot_songs\" ,\"recommendation\" ,\"song_detail\"]\n **/\n suspend fun getGaanaSong(\n type: String = \"song\",\n subtype: String = \"song_detail\",\n seokey: String,\n format: String = \"JSON\",\n ): GaanaSong {\n return httpClient.get(\n \"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format\"\n )\n }\n\n /*\n * Api Request: https://api.gaana.com/?type=artist&subtype=artist_details_info&seokey=neha-kakkar&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON\n *\n * subtype : [\"most_popular\" , \"artist_list\" ,\"artist_track_listing\" ,\"artist_album\" ,\"similar_artist\",\"artist_details\" ,\"artist_details_info\"]\n **/\n suspend fun getGaanaArtistDetails(\n type: String = \"artist\",\n subtype: String = \"artist_details_info\",\n seokey: String,\n format: String = \"JSON\",\n ): GaanaArtistDetails {\n return httpClient.get(\n \"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format\"\n )\n }\n\n /*\n * Api Request: http://api.gaana.com/?type=artist&subtype=artist_track_listing&seokey=neha-kakkar&limit=50&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON\n *\n * subtype : [\"most_popular\" , \"artist_list\" ,\"artist_track_listing\" ,\"artist_album\" ,\"similar_artist\",\"artist_details\" ,\"artist_details_info\"]\n **/\n suspend fun getGaanaArtistTracks(\n type: String = \"artist\",\n subtype: String = \"artist_track_listing\",\n seokey: String,\n format: String = \"JSON\",\n limit: Int = 50\n ): GaanaArtistTracks {\n return httpClient.get(\n \"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit\"\n )\n }\n}\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.providers\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.finalOutputDir\nimport com.shabinder.common.di.gaana.GaanaRequests\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.PlatformQueryResult\nimport com.shabinder.common.models.TrackDetails\nimport com.shabinder.common.models.gaana.GaanaTrack\nimport com.shabinder.common.models.spotify.Source\nimport io.ktor.client.HttpClient\n\nclass GaanaProvider(\n override val httpClient: HttpClient,\n private val logger: Kermit,\n private val dir: Dir,\n) : GaanaRequests {\n\n private val gaanaPlaceholderImageUrl = \"https://a10.gaanacdn.com/images/social/gaana_social.jpg\"\n\n suspend fun query(fullLink: String): PlatformQueryResult? {\n // Link Schema: https://gaana.com/type/link\n val gaanaLink = fullLink.substringAfter(\"gaana.com/\")\n\n val link = gaanaLink.substringAfterLast('/', \"error\")\n val type = gaanaLink.substringBeforeLast('/', \"error\").substringAfterLast('/')\n\n // Error\n if (type == \"Error\" || link == \"Error\") {\n return null\n }\n return gaanaSearch(\n type,\n link\n )\n }\n\n private suspend fun gaanaSearch(\n type: String,\n link: String,\n ): PlatformQueryResult {\n val result = PlatformQueryResult(\n folderType = \"\",\n subFolder = link,\n title = link,\n coverUrl = gaanaPlaceholderImageUrl,\n trackList = listOf(),\n Source.Gaana\n )\n logger.i { \"GAANA SEARCH: $type - $link\" }\n with(result) {\n when (type) {\n \"song\" -> {\n getGaanaSong(seokey = link).tracks.firstOrNull()?.also {\n folderType = \"Tracks\"\n subFolder = \"\"\n it.updateStatusIfPresent(folderType, subFolder)\n trackList = listOf(it).toTrackDetailsList(folderType, subFolder)\n title = it.track_title\n coverUrl = it.artworkLink\n }\n }\n \"album\" -> {\n getGaanaAlbum(seokey = link).also {\n folderType = \"Albums\"\n subFolder = link\n it.tracks.forEach { track ->\n track.updateStatusIfPresent(folderType, subFolder)\n }\n trackList = it.tracks.toTrackDetailsList(folderType, subFolder)\n title = link\n coverUrl = it.custom_artworks.size_480p\n }\n }\n \"playlist\" -> {\n getGaanaPlaylist(seokey = link).also {\n folderType = \"Playlists\"\n subFolder = link\n it.tracks.forEach { track ->\n track.updateStatusIfPresent(folderType, subFolder)\n }\n trackList = it.tracks.toTrackDetailsList(folderType, subFolder)\n title = link\n // coverUrl.value = \"TODO\"\n coverUrl = gaanaPlaceholderImageUrl\n }\n }\n \"artist\" -> {\n folderType = \"Artist\"\n subFolder = link\n coverUrl = gaanaPlaceholderImageUrl\n getGaanaArtistDetails(seokey = link).artist.firstOrNull()\n ?.also {\n title = it.name\n coverUrl = it.artworkLink ?: gaanaPlaceholderImageUrl\n }\n getGaanaArtistTracks(seokey = link).also {\n it.tracks?.forEach { track ->\n track.updateStatusIfPresent(folderType, subFolder)\n }\n trackList = it.tracks?.toTrackDetailsList(folderType, subFolder) ?: emptyList()\n }\n }\n else -> {\n // TODO Handle Error\n }\n }\n return result\n }\n }\n\n private fun List<GaanaTrack>.toTrackDetailsList(type: String, subFolder: String) = this.map {\n TrackDetails(\n title = it.track_title,\n artists = it.artist.map { artist -> artist?.name.toString() },\n durationSec = it.duration,\n albumArtPath = dir.imageCacheDir() + (it.artworkLink.substringBeforeLast('/').substringAfterLast('/')) + \".jpeg\",\n albumName = it.album_title,\n year = it.release_date,\n comment = \"Genres:${it.genre?.map { genre -> genre?.name }?.reduceOrNull { acc, s -> acc + s }}\",\n trackUrl = it.lyrics_url,\n downloaded = it.downloaded ?: DownloadStatus.NotDownloaded,\n source = Source.Gaana,\n albumArtURL = it.artworkLink,\n outputFilePath = dir.finalOutputDir(it.track_title, type, subFolder, dir.defaultDir()/*,\".m4a\"*/)\n )\n }\n private fun GaanaTrack.updateStatusIfPresent(folderType: String, subFolder: String) {\n if (dir.isPresent(\n dir.finalOutputDir(\n track_title,\n folderType,\n subFolder,\n dir.defaultDir()\n )\n )\n ) { // Download Already Present!!\n downloaded = DownloadStatus.Downloaded\n }\n }\n}\n","/*\n * Copyright (c) 2021 Shabinder Singh\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.providers\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.TokenStore\nimport com.shabinder.common.di.currentPlatform\nimport com.shabinder.common.di.finalOutputDir\nimport com.shabinder.common.di.kotlinxSerializer\nimport com.shabinder.common.di.spotify.SpotifyRequests\nimport com.shabinder.common.di.spotify.authenticateSpotify\nimport com.shabinder.common.models.AllPlatforms\nimport com.shabinder.common.models.PlatformQueryResult\nimport com.shabinder.common.models.TrackDetails\nimport com.shabinder.common.models.spotify.Album\nimport com.shabinder.common.models.spotify.Image\nimport com.shabinder.common.models.spotify.Source\nimport com.shabinder.common.models.spotify.Track\nimport io.ktor.client.HttpClient\nimport io.ktor.client.features.defaultRequest\nimport io.ktor.client.features.json.JsonFeature\nimport io.ktor.client.request.header\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.launch\n\nclass SpotifyProvider(\n private val tokenStore: TokenStore,\n private val logger: Kermit,\n private val dir: Dir,\n) : SpotifyRequests {\n\n init {\n logger.d { \"Creating Spotify Provider\" }\n GlobalScope.launch(Dispatchers.Default) {\n if (currentPlatform is AllPlatforms.Js) {\n authenticateSpotifyClient(override = true)\n } else authenticateSpotifyClient()\n }\n }\n\n override suspend fun authenticateSpotifyClient(override: Boolean): HttpClient? {\n val token = if (override) authenticateSpotify() else tokenStore.getToken()\n return if (token == null) {\n logger.d { \"Please Check your Network Connection\" }\n null\n } else {\n logger.d { \"Spotify Provider Created with $token\" }\n httpClient = HttpClient {\n defaultRequest {\n header(\"Authorization\", \"Bearer ${token.access_token}\")\n }\n install(JsonFeature) {\n serializer = kotlinxSerializer\n }\n }\n httpClient\n }\n }\n\n override lateinit var httpClient: HttpClient\n\n suspend fun query(fullLink: String): PlatformQueryResult? {\n\n if (!this::httpClient.isInitialized) {\n authenticateSpotifyClient()\n }\n\n var spotifyLink =\n \"https://\" + fullLink.substringAfterLast(\"https://\").substringBefore(\" \").trim()\n\n if (!spotifyLink.contains(\"open.spotify\")) {\n // Very Rare instance\n spotifyLink = resolveLink(spotifyLink)\n }\n\n val link = spotifyLink.substringAfterLast('/', \"Error\").substringBefore('?')\n val type = spotifyLink.substringBeforeLast('/', \"Error\").substringAfterLast('/')\n\n if (type == \"Error\" || link == \"Error\") {\n return null\n }\n\n if (type == \"episode\" || type == \"show\") {\n // TODO Implementation\n return null\n }\n\n return spotifySearch(\n type,\n link\n )\n }\n\n private suspend fun spotifySearch(\n type: String,\n link: String\n ): PlatformQueryResult {\n val result = PlatformQueryResult(\n folderType = \"\",\n subFolder = \"\",\n title = \"\",\n coverUrl = \"\",\n trackList = listOf(),\n Source.Spotify\n )\n with(result) {\n when (type) {\n \"track\" -> {\n getTrack(link).also {\n folderType = \"Tracks\"\n subFolder = \"\"\n it.updateStatusIfPresent(folderType, subFolder)\n trackList = listOf(it).toTrackDetailsList(folderType, subFolder)\n title = it.name.toString()\n coverUrl = (\n it.album?.images?.elementAtOrNull(1)?.url\n ?: it.album?.images?.elementAtOrNull(0)?.url\n ).toString()\n }\n }\n\n \"album\" -> {\n val albumObject = getAlbum(link)\n folderType = \"Albums\"\n subFolder = albumObject.name.toString()\n albumObject.tracks?.items?.forEach {\n it.updateStatusIfPresent(folderType, subFolder)\n it.album = Album(\n images = listOf(\n Image(\n url = albumObject.images?.elementAtOrNull(1)?.url\n ?: albumObject.images?.elementAtOrNull(0)?.url\n )\n )\n )\n }\n albumObject.tracks?.items?.toTrackDetailsList(folderType, subFolder).let {\n if (it.isNullOrEmpty()) {\n // TODO Handle Error\n } else {\n trackList = it\n title = albumObject.name.toString()\n coverUrl = (\n albumObject.images?.elementAtOrNull(1)?.url\n ?: albumObject.images?.elementAtOrNull(0)?.url\n ).toString()\n }\n }\n }\n\n \"playlist\" -> {\n val playlistObject = getPlaylist(link)\n folderType = \"Playlists\"\n subFolder = playlistObject.name.toString()\n val tempTrackList = mutableListOf<Track>()\n // log(\"Tracks Fetched\", playlistObject.tracks?.items?.size.toString())\n playlistObject.tracks?.items?.forEach {\n it.track?.let { it1 ->\n it1.updateStatusIfPresent(folderType, subFolder)\n tempTrackList.add(it1)\n }\n }\n var moreTracksAvailable = !playlistObject.tracks?.next.isNullOrBlank()\n\n while (moreTracksAvailable) {\n // Check For More Tracks If available\n val moreTracks =\n getPlaylistTracks(link, offset = tempTrackList.size)\n moreTracks.items?.forEach {\n it.track?.let { it1 -> tempTrackList.add(it1) }\n }\n moreTracksAvailable = !moreTracks.next.isNullOrBlank()\n }\n // log(\"Total Tracks Fetched\", tempTrackList.size.toString())\n trackList = tempTrackList.toTrackDetailsList(folderType, subFolder)\n title = playlistObject.name.toString()\n coverUrl = playlistObject.images?.elementAtOrNull(1)?.url\n ?: playlistObject.images?.firstOrNull()?.url.toString()\n }\n \"episode\" -> { // TODO\n }\n \"show\" -> { // TODO\n }\n else -> {\n // TODO Handle Error\n }\n }\n }\n return result\n }\n\n /*\n * New Link Schema: https://link.tospotify.com/kqTBblrjQbb,\n * Fetching Standard Link: https://open.spotify.com/playlist/37i9dQZF1DX9RwfGbeGQwP?si=iWz7B1tETiunDntnDo3lSQ&_branch_match_id=862039436205270630\n * */\n private suspend fun resolveLink(\n url: String\n ): String {\n val response = getResponse(url)\n val regex = \"\"\"https://open\\.spotify\\.com.+\\w\"\"\".toRegex()\n return regex.find(response)?.value.toString()\n }\n\n private fun List<Track>.toTrackDetailsList(type: String, subFolder: String) = this.map {\n TrackDetails(\n title = it.name.toString(),\n artists = it.artists?.map { artist -> artist?.name.toString() } ?: listOf(),\n durationSec = (it.duration_ms / 1000).toInt(),\n albumArtPath = dir.imageCacheDir() + (it.album?.images?.elementAtOrNull(1)?.url ?: it.album?.images?.firstOrNull()?.url.toString()).substringAfterLast('/') + \".jpeg\",\n albumName = it.album?.name,\n year = it.album?.release_date,\n comment = \"Genres:${it.album?.genres?.joinToString()}\",\n trackUrl = it.href,\n downloaded = it.downloaded,\n source = Source.Spotify,\n albumArtURL = it.album?.images?.elementAtOrNull(1)?.url ?: it.album?.images?.firstOrNull()?.url.toString(),\n outputFilePath = dir.finalOutputDir(it.name.toString(), type, subFolder, dir.defaultDir()/*,\".m4a\"*/)\n )\n }\n private fun Track.updateStatusIfPresent(folderType: String, subFolder: String) {\n if (dir.isPresent(\n dir.finalOutputDir(\n name.toString(),\n folderType,\n subFolder,\n dir.defaultDir()\n )\n )\n ) { // Download Already Present!!\n downloaded = com.shabinder.common.models.DownloadStatus.Downloaded\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.providers\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.currentPlatform\nimport com.shabinder.common.di.youtubeMp3.Yt1sMp3\nimport com.shabinder.common.models.AllPlatforms\nimport io.ktor.client.HttpClient\n\nclass YoutubeMp3(\n override val httpClient: HttpClient,\n private val logger: Kermit,\n private val dir: Dir,\n) : Yt1sMp3 {\n suspend fun getMp3DownloadLink(videoID: String): String? = getLinkFromYt1sMp3(videoID)?.let {\n if (currentPlatform is AllPlatforms.Js/* && corsProxy !is CorsProxy.PublicProxyWithExtension*/)\n \"https://kind-grasshopper-73.telebit.io/cors/$it\"\n else it\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.providers\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.gaana.corsApi\nimport com.shabinder.common.models.TrackDetails\nimport com.shabinder.common.models.YoutubeTrack\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch\nimport io.ktor.client.HttpClient\nimport io.ktor.client.request.headers\nimport io.ktor.client.request.post\nimport io.ktor.http.ContentType\nimport io.ktor.http.contentType\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.JsonArray\nimport kotlinx.serialization.json.buildJsonArray\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.contentOrNull\nimport kotlinx.serialization.json.jsonArray\nimport kotlinx.serialization.json.jsonObject\nimport kotlinx.serialization.json.jsonPrimitive\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport kotlin.math.absoluteValue\n\nprivate const val apiKey = \"AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30\"\n\nclass YoutubeMusic constructor(\n private val logger: Kermit,\n private val httpClient: HttpClient,\n) {\n private val tag = \"YT Music\"\n\n suspend fun getYTIDBestMatch(query: String, trackDetails: TrackDetails): String? {\n return sortByBestMatch(\n getYTTracks(query),\n trackName = trackDetails.title,\n trackArtists = trackDetails.artists,\n trackDurationSec = trackDetails.durationSec\n ).keys.firstOrNull()\n }\n private suspend fun getYTTracks(query: String): List<YoutubeTrack> {\n val youtubeTracks = mutableListOf<YoutubeTrack>()\n\n val responseObj = Json.parseToJsonElement(getYoutubeMusicResponse(query))\n\n val contentBlocks = responseObj.jsonObject[\"contents\"]\n ?.jsonObject?.get(\"sectionListRenderer\")\n ?.jsonObject?.get(\"contents\")?.jsonArray\n\n val resultBlocks = mutableListOf<JsonArray>()\n if (contentBlocks != null) {\n for (cBlock in contentBlocks) {\n /**\n *Ignore user-suggestion\n *The 'itemSectionRenderer' field is for user notices (stuff like - 'showing\n *results for xyz, search for abc instead') we have no use for them, the for\n *loop below if throw a keyError if we don't ignore them\n */\n if (cBlock.jsonObject.containsKey(\"itemSectionRenderer\")) {\n continue\n }\n\n for (\n contents in cBlock.jsonObject[\"musicShelfRenderer\"]?.jsonObject?.get(\"contents\")?.jsonArray\n ?: listOf()\n ) {\n /**\n * apparently content Blocks without an 'overlay' field don't have linkBlocks\n * I have no clue what they are and why there even exist\n *\n if(!contents.containsKey(\"overlay\")){\n println(contents)\n continue\n TODO check and correct\n }*/\n\n val result = contents.jsonObject[\"musicResponsiveListItemRenderer\"]\n ?.jsonObject?.get(\"flexColumns\")?.jsonArray\n\n // Add the linkBlock\n val linkBlock = contents.jsonObject[\"musicResponsiveListItemRenderer\"]\n ?.jsonObject?.get(\"overlay\")\n ?.jsonObject?.get(\"musicItemThumbnailOverlayRenderer\")\n ?.jsonObject?.get(\"content\")\n ?.jsonObject?.get(\"musicPlayButtonRenderer\")\n ?.jsonObject?.get(\"playNavigationEndpoint\")\n\n // detailsBlock is always a list, so we just append the linkBlock to it\n // instead of carrying along all the other junk from \"musicResponsiveListItemRenderer\"\n val finalResult = buildJsonArray {\n result?.let { add(it) }\n linkBlock?.let { add(it) }\n }\n resultBlocks.add(finalResult)\n }\n }\n\n /* We only need results that are Songs or Videos, so we filter out the rest, since\n ! Songs and Videos are supplied with different details, extracting all details from\n ! both is just carrying on redundant data, so we also have to selectively extract\n ! relevant details. What you need to know to understand how we do that here:\n !\n ! Songs details are ALWAYS in the following order:\n ! 0 - Name\n ! 1 - Type (Song)\n ! 2 - com.shabinder.spotiflyer.models.gaana.Artist\n ! 3 - Album\n ! 4 - Duration (mm:ss)\n !\n ! Video details are ALWAYS in the following order:\n ! 0 - Name\n ! 1 - Type (Video)\n ! 2 - Channel\n ! 3 - Viewers\n ! 4 - Duration (hh:mm:ss)\n !\n ! We blindly gather all the details we get our hands on, then\n ! cherry pick the details we need based on their index numbers,\n ! we do so only if their Type is 'Song' or 'Video\n */\n\n for (result in resultBlocks) {\n\n // Blindly gather available details\n val availableDetails = mutableListOf<String>()\n\n /*\n Filter Out dummies here itself\n ! 'musicResponsiveListItemFlexColumnRenderer' should have more that one\n ! sub-block, if not its a dummy, why does the YTM response contain dummies?\n ! I have no clue. We skip these.\n\n ! Remember that we appended the linkBlock to result, treating that like the\n ! other constituents of a result block will lead to errors, hence the 'in\n ! result[:-1] ,i.e., skip last element in array '\n */\n for (detailArray in result.subList(0, result.size - 1)) {\n for (detail in detailArray.jsonArray) {\n if (detail.jsonObject[\"musicResponsiveListItemFlexColumnRenderer\"]?.jsonObject?.size ?: 0 < 2) continue\n\n // if not a dummy, collect All Variables\n val details = detail.jsonObject[\"musicResponsiveListItemFlexColumnRenderer\"]\n ?.jsonObject?.get(\"text\")\n ?.jsonObject?.get(\"runs\")?.jsonArray ?: listOf()\n\n for (d in details) {\n d.jsonObject[\"text\"]?.jsonPrimitive?.contentOrNull?.let {\n if (it != \" • \") {\n availableDetails.add(it)\n }\n }\n }\n }\n }\n // logger.d(\"YT Music details\"){availableDetails.toString()}\n /*\n ! Filter Out non-Song/Video results and incomplete results here itself\n ! From what we know about detail order, note that [1] - indicate result type\n */\n if (availableDetails.size == 5 && availableDetails[1] in listOf(\"Song\", \"Video\")) {\n\n // skip if result is in hours instead of minutes (no song is that long)\n if (availableDetails[4].split(':').size != 2) continue\n\n /*\n ! grab Video ID\n ! this is nested as [playlistEndpoint/watchEndpoint][videoId/playlistId/...]\n ! so hardcoding the dict keys for data look up is an ardours process, since\n ! the sub-block pattern is fixed even though the key isn't, we just\n ! reference the dict keys by index\n */\n\n val videoId: String? = result.last().jsonObject[\"watchEndpoint\"]?.jsonObject?.get(\"videoId\")?.jsonPrimitive?.content\n val ytTrack = YoutubeTrack(\n name = availableDetails[0],\n type = availableDetails[1],\n artist = availableDetails[2],\n duration = availableDetails[4],\n videoId = videoId\n )\n youtubeTracks.add(ytTrack)\n }\n }\n }\n // logger.d {youtubeTracks.joinToString(\"\\n\")}\n return youtubeTracks\n }\n\n private fun sortByBestMatch(\n ytTracks: List<YoutubeTrack>,\n trackName: String,\n trackArtists: List<String>,\n trackDurationSec: Int,\n ): Map<String, Int> {\n /*\n * \"linksWithMatchValue\" is map with Youtube VideoID and its rating/match with 100 as Max Value\n **/\n val linksWithMatchValue = mutableMapOf<String, Int>()\n\n for (result in ytTracks) {\n\n // LoweCasing Name to match Properly\n // most song results on youtube go by $artist - $songName or artist1/artist2\n var hasCommonWord = false\n\n val resultName = result.name?.toLowerCase()?.replace(\"-\", \" \")?.replace(\"/\", \" \") ?: \"\"\n val trackNameWords = trackName.toLowerCase().split(\" \")\n\n for (nameWord in trackNameWords) {\n if (nameWord.isNotBlank() && FuzzySearch.partialRatio(nameWord, resultName) > 85) hasCommonWord = true\n }\n\n // Skip this Result if No Word is Common in Name\n if (!hasCommonWord) {\n // log(\"YT Api Removing\", result.toString())\n continue\n }\n\n // Find artist match\n // Will Be Using Fuzzy Search Because YT Spelling might be mucked up\n // match = (no of artist names in result) / (no. of artist names on spotify) * 100\n var artistMatchNumber = 0\n\n if (result.type == \"Song\") {\n for (artist in trackArtists) {\n if (FuzzySearch.ratio(artist.toLowerCase(), result.artist?.toLowerCase() ?: \"\") > 85)\n artistMatchNumber++\n }\n } else { // i.e. is a Video\n for (artist in trackArtists) {\n if (FuzzySearch.partialRatio(artist.toLowerCase(), result.name?.toLowerCase() ?: \"\") > 85)\n artistMatchNumber++\n }\n }\n\n if (artistMatchNumber == 0) {\n // logger.d{ \"YT Api Removing: $result\" }\n continue\n }\n\n val artistMatch = (artistMatchNumber / trackArtists.size) * 100\n\n // Duration Match\n /*! time match = 100 - (delta(duration)**2 / original duration * 100)\n ! difference in song duration (delta) is usually of the magnitude of a few\n ! seconds, we need to amplify the delta if it is to have any meaningful impact\n ! wen we calculate the avg match value*/\n val difference = result.duration?.split(\":\")?.get(0)?.toInt()?.times(60)\n ?.plus(result.duration?.split(\":\")?.get(1)?.toInt() ?: 0)\n ?.minus(trackDurationSec)?.absoluteValue ?: 0\n val nonMatchValue: Float = ((difference * difference).toFloat() / trackDurationSec.toFloat())\n val durationMatch = 100 - (nonMatchValue * 100)\n\n val avgMatch = (artistMatch + durationMatch) / 2\n linksWithMatchValue[result.videoId.toString()] = avgMatch.toInt()\n }\n // logger.d(\"YT Api Result\"){\"$trackName - $linksWithMatchValue\"}\n return linksWithMatchValue.toList().sortedByDescending { it.second }.toMap().also {\n logger.d(tag) { \"Match Found for $trackName - ${!it.isNullOrEmpty()}\" }\n }\n }\n\n private suspend fun getYoutubeMusicResponse(query: String): String {\n return httpClient.post(\"${corsApi}https://music.youtube.com/youtubei/v1/search?alt=json&key=$apiKey\") {\n contentType(ContentType.Application.Json)\n headers {\n append(\"referer\", \"https://music.youtube.com/search\")\n }\n body = buildJsonObject {\n putJsonObject(\"context\") {\n putJsonObject(\"client\") {\n put(\"clientName\", \"WEB_REMIX\")\n put(\"clientVersion\", \"0.1\")\n }\n }\n put(\"query\", query)\n }\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.spotify\n\nimport com.shabinder.common.di.isInternetAvailable\nimport com.shabinder.common.di.kotlinxSerializer\nimport com.shabinder.common.models.spotify.TokenData\nimport io.ktor.client.HttpClient\nimport io.ktor.client.features.auth.Auth\nimport io.ktor.client.features.auth.providers.basic\nimport io.ktor.client.features.json.JsonFeature\nimport io.ktor.client.request.forms.FormDataContent\nimport io.ktor.client.request.post\nimport io.ktor.http.Parameters\n\nsuspend fun authenticateSpotify(): TokenData? {\n return if (isInternetAvailable) spotifyAuthClient.post(\"https://accounts.spotify.com/api/token\") {\n body = FormDataContent(Parameters.build { append(\"grant_type\", \"client_credentials\") })\n } else null\n}\n\nprivate val spotifyAuthClient by lazy {\n HttpClient {\n val clientId = \"694d8bf4f6ec420fa66ea7fb4c68f89d\"\n val clientSecret = \"02ca2d4021a7452dae2328b47a6e8fe8\"\n\n install(Auth) {\n basic {\n sendWithoutRequest = true\n username = clientId\n password = clientSecret\n }\n }\n install(JsonFeature) {\n serializer = kotlinxSerializer\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.spotify\n\nimport com.shabinder.common.di.gaana.corsApi\nimport com.shabinder.common.models.spotify.Album\nimport com.shabinder.common.models.spotify.PagingObjectPlaylistTrack\nimport com.shabinder.common.models.spotify.Playlist\nimport com.shabinder.common.models.spotify.Track\nimport io.ktor.client.HttpClient\nimport io.ktor.client.request.get\n\nprivate val BASE_URL get() = \"${corsApi}https://api.spotify.com/v1\"\n\ninterface SpotifyRequests {\n\n val httpClient: HttpClient\n\n suspend fun authenticateSpotifyClient(override: Boolean = false): HttpClient?\n\n suspend fun getPlaylist(playlistID: String): Playlist {\n return httpClient.get(\"$BASE_URL/playlists/$playlistID\")\n }\n\n suspend fun getPlaylistTracks(\n playlistID: String?,\n offset: Int = 0,\n limit: Int = 100\n ): PagingObjectPlaylistTrack {\n return httpClient.get(\"$BASE_URL/playlists/$playlistID/tracks?offset=$offset&limit=$limit\")\n }\n\n suspend fun getTrack(id: String?): Track {\n return httpClient.get(\"$BASE_URL/tracks/$id\")\n }\n\n suspend fun getEpisode(id: String?): Track {\n return httpClient.get(\"$BASE_URL/episodes/$id\")\n }\n\n suspend fun getShow(id: String?): Track {\n return httpClient.get(\"$BASE_URL/shows/$id\")\n }\n\n suspend fun getAlbum(id: String): Album {\n return httpClient.get(\"$BASE_URL/albums/$id\")\n }\n\n suspend fun getResponse(url: String): String {\n return httpClient.get(url)\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.utils\n\n/**\n * Removing Illegal Chars from File Name\n * **/\nfun removeIllegalChars(fileName: String): String {\n val illegalCharArray = charArrayOf(\n '/',\n '\\n',\n '\\r',\n '\\t',\n '\\u0000',\n '\\u000C',\n '`',\n '?',\n '*',\n '\\\\',\n '<',\n '>',\n '|',\n '\\\"',\n '.',\n '-',\n '\\''\n )\n\n var name = fileName\n for (c in illegalCharArray) {\n name = fileName.replace(c, '_')\n }\n name = name.replace(\"\\\\s\".toRegex(), \"_\")\n name = name.replace(\"\\\\)\".toRegex(), \"\")\n name = name.replace(\"\\\\(\".toRegex(), \"\")\n name = name.replace(\"\\\\[\".toRegex(), \"\")\n name = name.replace(\"]\".toRegex(), \"\")\n name = name.replace(\"\\\\.\".toRegex(), \"\")\n name = name.replace(\"\\\"\".toRegex(), \"\")\n name = name.replace(\"\\'\".toRegex(), \"\")\n name = name.replace(\":\".toRegex(), \"\")\n name = name.replace(\"\\\\|\".toRegex(), \"\")\n return name\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di.youtubeMp3\n\nimport com.shabinder.common.di.gaana.corsApi\nimport io.ktor.client.HttpClient\nimport io.ktor.client.request.forms.FormDataContent\nimport io.ktor.client.request.post\nimport io.ktor.http.Parameters\nimport kotlinx.serialization.json.JsonObject\nimport kotlinx.serialization.json.jsonPrimitive\n\n/*\n* site link: https://yt1s.com/youtube-to-mp3/en1\n* Provides Direct Mp3 , No Need For FFmpeg\n* */\ninterface Yt1sMp3 {\n\n val httpClient: HttpClient\n\n /*\n * Downloadable Mp3 Link for YT videoID.\n * */\n suspend fun getLinkFromYt1sMp3(videoID: String): String? =\n getConvertedMp3Link(videoID, getKey(videoID))?.get(\"dlink\")?.jsonPrimitive?.toString()?.replace(\"\\\"\", \"\")\n\n /*\n * POST:https://yt1s.com/api/ajaxSearch/index\n * Body Form= q:yt video link ,vt:format=mp3\n * */\n private suspend fun getKey(videoID: String): String {\n val response: JsonObject? = httpClient.post(\"${corsApi}https://yt1s.com/api/ajaxSearch/index\") {\n body = FormDataContent(\n Parameters.build {\n append(\"q\", \"https://www.youtube.com/watch?v=$videoID\")\n append(\"vt\", \"mp3\")\n }\n )\n }\n return response?.get(\"kc\")?.jsonPrimitive.toString()\n }\n\n private suspend fun getConvertedMp3Link(videoID: String, key: String): JsonObject? {\n return httpClient.post(\"${corsApi}https://yt1s.com/api/ajaxConvert/convert\") {\n body = FormDataContent(\n Parameters.build {\n append(\"vid\", videoID)\n append(\"k\", key)\n }\n )\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport com.shabinder.common.models.AllPlatforms\nimport com.shabinder.common.models.DownloadResult\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.TrackDetails\nimport io.ktor.client.request.head\nimport kotlinx.coroutines.CoroutineDispatcher\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.MutableSharedFlow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.withContext\n\nactual val currentPlatform: AllPlatforms = AllPlatforms.Js\n\nactual fun openPlatform(packageID: String, platformLink: String) {\n // TODO\n}\n\nactual fun shareApp() {\n // TODO\n}\n\nactual fun giveDonation() {\n // TODO\n}\n\nactual fun queryActiveTracks() {}\n\nactual val dispatcherIO: CoroutineDispatcher = Dispatchers.Default\n\n/*\n* Refactor This\n* */\nprivate suspend fun isInternetAvailable(): Boolean {\n return withContext(dispatcherIO) {\n try {\n ktorHttpClient.head<String>(\"http://google.com\")\n true\n } catch (e: Exception) {\n println(e.message)\n false\n }\n }\n}\n\nactual val isInternetAvailable: Boolean\n get() {\n return true\n /*var result = false\n val job = GlobalScope.launch { result = isInternetAvailable() }\n while(job.isActive){}\n return result*/\n }\n\nval DownloadProgressFlow: MutableSharedFlow<HashMap<String, DownloadStatus>> = MutableSharedFlow(1)\n// Error:https://github.com/Kotlin/kotlinx.atomicfu/issues/182\n// val DownloadScope = ParallelExecutor(Dispatchers.Default) //Download Pool of 4 parallel\nval allTracksStatus: HashMap<String, DownloadStatus> = hashMapOf()\n\nactual suspend fun downloadTracks(\n list: List<TrackDetails>,\n fetcher: FetchPlatformQueryResult,\n dir: Dir\n) {\n list.forEach {\n withContext(dispatcherIO) {\n allTracksStatus[it.title] = DownloadStatus.Queued\n if (!it.videoID.isNullOrBlank()) { // Video ID already known!\n downloadTrack(it.videoID!!, it, fetcher, dir)\n } else {\n val searchQuery = \"${it.title} - ${it.artists.joinToString(\",\")}\"\n val videoID = fetcher.youtubeMusic.getYTIDBestMatch(searchQuery, it)\n println(videoID + \" : \" + it.title)\n if (videoID.isNullOrBlank()) {\n allTracksStatus[it.title] = DownloadStatus.Failed\n DownloadProgressFlow.emit(allTracksStatus)\n } else { // Found Youtube Video ID\n downloadTrack(videoID, it, fetcher, dir)\n }\n }\n DownloadProgressFlow.emit(allTracksStatus)\n }\n }\n}\n\nsuspend fun downloadTrack(videoID: String, track: TrackDetails, fetcher: FetchPlatformQueryResult, dir: Dir) {\n val url = fetcher.youtubeMp3.getMp3DownloadLink(videoID)\n if (url == null) {\n allTracksStatus[track.title] = DownloadStatus.Failed\n DownloadProgressFlow.emit(allTracksStatus)\n println(\"No URL to Download\")\n } else {\n downloadFile(url).collect {\n when (it) {\n is DownloadResult.Success -> {\n println(\"Download Completed\")\n dir.saveFileWithMetadata(it.byteArray, track)\n }\n is DownloadResult.Error -> {\n allTracksStatus[track.title] = DownloadStatus.Failed\n println(\"Download Error: ${track.title}\")\n }\n is DownloadResult.Progress -> {\n allTracksStatus[track.title] = DownloadStatus.Downloading(it.progress)\n println(\"Download Progress: ${it.progress} : ${track.title}\")\n }\n }\n DownloadProgressFlow.emit(allTracksStatus)\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.gaana.corsApi\nimport com.shabinder.common.di.utils.removeIllegalChars\nimport com.shabinder.common.models.DownloadResult\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.TrackDetails\nimport com.shabinder.database.Database\nimport kotlinext.js.Object\nimport kotlinext.js.js\nimport kotlinx.coroutines.flow.collect\nimport org.khronos.webgl.ArrayBuffer\nimport org.khronos.webgl.Int8Array\nimport org.w3c.dom.ImageBitmap\n\nactual class Dir actual constructor(\n private val logger: Kermit,\n private val database: Database?,\n) {\n\n /*init {\n createDirectories()\n }*/\n\n /*\n * TODO\n * */\n actual fun fileSeparator(): String = \"/\"\n\n actual fun imageCacheDir(): String = \"TODO\" +\n fileSeparator() + \"SpotiFlyer/.images\" + fileSeparator()\n\n actual fun defaultDir(): String = \"TODO\" + fileSeparator() +\n \"SpotiFlyer\" + fileSeparator()\n\n actual fun isPresent(path: String): Boolean = false\n\n actual fun createDirectory(dirPath: String) {}\n\n actual suspend fun clearCache() {}\n\n actual suspend fun cacheImage(image: Any, path: String) {}\n\n @Suppress(\"BlockingMethodInNonBlockingContext\")\n actual suspend fun saveFileWithMetadata(\n mp3ByteArray: ByteArray,\n trackDetails: TrackDetails\n ) {\n val writer = ID3Writer(mp3ByteArray.toArrayBuffer())\n val albumArt = downloadFile(corsApi + trackDetails.albumArtURL)\n albumArt.collect {\n when (it) {\n is DownloadResult.Success -> {\n logger.d { \"Album Art Downloaded Success\" }\n val albumArtObj = js {\n this[\"type\"] = 3\n this[\"data\"] = it.byteArray.toArrayBuffer()\n this[\"description\"] = \"Cover Art\"\n }\n writeTagsAndSave(writer, albumArtObj as Object, trackDetails)\n }\n is DownloadResult.Error -> {\n logger.d { \"Album Art Downloading Error\" }\n writeTagsAndSave(writer, null, trackDetails)\n }\n is DownloadResult.Progress -> logger.d { \"Album Art Downloading: ${it.progress}\" }\n }\n }\n }\n\n private suspend fun writeTagsAndSave(writer: ID3Writer, albumArt: Object?, trackDetails: TrackDetails) {\n writer.apply {\n setFrame(\"TIT2\", trackDetails.title)\n setFrame(\"TPE1\", trackDetails.artists.toTypedArray())\n setFrame(\"TALB\", trackDetails.albumName ?: \"\")\n try { trackDetails.year?.substring(0, 4)?.toInt()?.let { setFrame(\"TYER\", it) } } catch (e: Exception) {}\n setFrame(\"TPE2\", trackDetails.artists.joinToString(\",\"))\n setFrame(\"WOAS\", trackDetails.source.toString())\n setFrame(\"TLEN\", trackDetails.durationSec)\n albumArt?.let { setFrame(\"APIC\", it) }\n }\n writer.addTag()\n allTracksStatus[trackDetails.title] = DownloadStatus.Downloaded\n DownloadProgressFlow.emit(allTracksStatus)\n saveAs(writer.getBlob(), \"${removeIllegalChars(trackDetails.title)}.mp3\")\n }\n\n actual fun addToLibrary(path: String) {}\n\n actual suspend fun loadImage(url: String): Picture {\n return Picture(url)\n }\n\n private fun loadCachedImage(cachePath: String): ImageBitmap? = null\n\n private suspend fun freshImage(url: String): ImageBitmap? = null\n\n actual val db: Database?\n get() = database\n}\n\nfun ByteArray.toArrayBuffer(): ArrayBuffer {\n return this.unsafeCast<Int8Array>().buffer\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nactual data class Picture(\n var imageUrl: String\n)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.di\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.models.PlatformQueryResult\nimport io.ktor.client.HttpClient\n\nactual class YoutubeProvider actual constructor(\n httpClient: HttpClient,\n logger: Kermit,\n dir: Dir\n) {\n actual suspend fun query(fullLink: String): PlatformQueryResult? {\n return null // TODO\n }\n}\n","(function (root, factory) {\n if (typeof define === 'function' && define.amd)\n define(['exports', 'kotlin'], factory);\n else if (typeof exports === 'object')\n factory(module.exports, require('kotlin'));\n else {\n if (typeof kotlin === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-extensions-jsLegacy'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'kotlin-wrappers-kotlin-extensions-jsLegacy'.\");\n }root['kotlin-wrappers-kotlin-extensions-jsLegacy'] = factory(typeof this['kotlin-wrappers-kotlin-extensions-jsLegacy'] === 'undefined' ? {} : this['kotlin-wrappers-kotlin-extensions-jsLegacy'], kotlin);\n }\n}(this, function (_, Kotlin) {\n 'use strict';\n var getCallableRef = Kotlin.getCallableRef;\n var defineInlineFunction = Kotlin.defineInlineFunction;\n var wrapFunction = Kotlin.wrapFunction;\n function clone(obj) {\n return Object.assign({}, obj);\n }\n function getOwnPropertyNames($receiver) {\n return Object.getOwnPropertyNames($receiver);\n }\n function invoke_3($receiver, strings, values) {\n var tmp$;\n return (tmp$ = $receiver).call.apply(tmp$, [null, strings].concat(values));\n }\n function invoke_4($receiver, string, values) {\n return invoke_3($receiver, [string], values.slice());\n }\n function invoke_5($receiver, values) {\n return invoke_3($receiver, [], values.slice());\n }\n var package$kotlinext = _.kotlinext || (_.kotlinext = {});\n var package$js = package$kotlinext.js || (package$kotlinext.js = {});\n package$js.clone_issdgt$ = clone;\n package$js.getOwnPropertyNames_s8jyvk$ = getOwnPropertyNames;\n package$js.invoke_z5wujd$ = invoke_3;\n package$js.invoke_dgimx$ = invoke_4;\n package$js.invoke_9p99ed$ = invoke_5;\n return _;\n}));\n\n//# sourceMappingURL=kotlin-wrappers-kotlin-extensions-jsLegacy.js.map\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n",null,null,null,null,null,null,"/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\npackage kotlin.reflect\n\nimport findAssociatedObject\n\n/**\n * The experimental marker for associated objects API.\n *\n * Any usage of a declaration annotated with `@ExperimentalAssociatedObjects` must be accepted either by\n * annotating that usage with the [OptIn] annotation, e.g. `@OptIn(ExperimentalAssociatedObjects::class)`,\n * or by using the compiler argument `-Xopt-in=kotlin.reflect.ExperimentalAssociatedObjects`.\n */\n@RequiresOptIn(level = RequiresOptIn.Level.ERROR)\n@Retention(value = AnnotationRetention.BINARY)\npublic annotation class ExperimentalAssociatedObjects\n\n/**\n * Makes the annotated annotation class an associated object key.\n *\n * An associated object key annotation should have single [KClass] parameter.\n * When applied to a class with reference to an object declaration as an argument, it binds\n * the object to the class, making this binding discoverable at runtime using [findAssociatedObject].\n */\n@ExperimentalAssociatedObjects\n@Retention(AnnotationRetention.BINARY)\n@Target(AnnotationTarget.ANNOTATION_CLASS)\npublic annotation class AssociatedObjectKey\n\n/**\n * If [T] is an @[AssociatedObjectKey]-annotated annotation class and [this] class is annotated with @[T] (`S::class`),\n * returns object `S`.\n *\n * Otherwise returns `null`.\n */\n@ExperimentalAssociatedObjects\npublic inline fun <reified T : Annotation> KClass<*>.findAssociatedObject(): Any? =\n this.findAssociatedObject(T::class)",null,null,"/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmName(\"GroupingKt\")\n@file:kotlin.jvm.JvmMultifileClass\n\npackage kotlin.collections\n\n/**\n * Represents a source of elements with a [keyOf] function, which can be applied to each element to get its key.\n *\n * A [Grouping] structure serves as an intermediate step in group-and-fold operations:\n * they group elements by their keys and then fold each group with some aggregating operation.\n *\n * It is created by attaching `keySelector: (T) -> K` function to a source of elements.\n * To get an instance of [Grouping] use one of `groupingBy` extension functions:\n * - [Iterable.groupingBy]\n * - [Sequence.groupingBy]\n * - [Array.groupingBy]\n * - [CharSequence.groupingBy]\n *\n * For the list of group-and-fold operations available, see the [extension functions](#extension-functions) for `Grouping`.\n */\n@SinceKotlin(\"1.1\")\npublic interface Grouping<T, out K> {\n /** Returns an [Iterator] over the elements of the source of this grouping. */\n fun sourceIterator(): Iterator<T>\n /** Extracts the key of an [element]. */\n fun keyOf(element: T): K\n}\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments, and stores the results in a new map.\n *\n * The key for each element is provided by the [Grouping.keyOf] function.\n *\n * @param operation function is invoked on each element with the following parameters:\n * - `key`: the key of the group this element belongs to;\n * - `accumulator`: the current value of the accumulator of the group, can be `null` if it's the first `element` encountered in the group;\n * - `element`: the element from the source being aggregated;\n * - `first`: indicates whether it's the first `element` encountered in the group.\n *\n * @return a [Map] associating the key of each group with the result of aggregation of the group elements.\n * @sample samples.collections.Grouping.aggregateByRadix\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R> Grouping<T, K>.aggregate(\n operation: (key: K, accumulator: R?, element: T, first: Boolean) -> R\n): Map<K, R> {\n return aggregateTo(mutableMapOf<K, R>(), operation)\n}\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments,\n * and stores the results in the given [destination] map.\n *\n * The key for each element is provided by the [Grouping.keyOf] function.\n *\n * @param operation a function that is invoked on each element with the following parameters:\n * - `key`: the key of the group this element belongs to;\n * - `accumulator`: the current value of the accumulator of the group, can be `null` if it's the first `element` encountered in the group;\n * - `element`: the element from the source being aggregated;\n * - `first`: indicates whether it's the first `element` encountered in the group.\n *\n * If the [destination] map already has a value corresponding to some key,\n * then the elements being aggregated for that key are never considered as `first`.\n *\n * @return the [destination] map associating the key of each group with the result of aggregation of the group elements.\n * @sample samples.collections.Grouping.aggregateByRadixTo\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.aggregateTo(\n destination: M,\n operation: (key: K, accumulator: R?, element: T, first: Boolean) -> R\n): M {\n for (e in this.sourceIterator()) {\n val key = keyOf(e)\n val accumulator = destination[key]\n destination[key] = operation(key, accumulator, e, accumulator == null && !destination.containsKey(key))\n }\n return destination\n}\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments, and stores the results in a new map.\n * An initial value of accumulator is provided by [initialValueSelector] function.\n *\n * @param initialValueSelector a function that provides an initial value of accumulator for each group.\n * It's invoked with parameters:\n * - `key`: the key of the group;\n * - `element`: the first element being encountered in that group.\n *\n * @param operation a function that is invoked on each element with the following parameters:\n * - `key`: the key of the group this element belongs to;\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being accumulated.\n *\n * @return a [Map] associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.foldByEvenLengthWithComputedInitialValue\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R> Grouping<T, K>.fold(\n initialValueSelector: (key: K, element: T) -> R,\n operation: (key: K, accumulator: R, element: T) -> R\n): Map<K, R> =\n @Suppress(\"UNCHECKED_CAST\")\n aggregate { key, acc, e, first -> operation(key, if (first) initialValueSelector(key, e) else acc as R, e) }\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments,\n * and stores the results in the given [destination] map.\n * An initial value of accumulator is provided by [initialValueSelector] function.\n *\n * @param initialValueSelector a function that provides an initial value of accumulator for each group.\n * It's invoked with parameters:\n * - `key`: the key of the group;\n * - `element`: the first element being encountered in that group.\n *\n * If the [destination] map already has a value corresponding to some key, that value is used as an initial value of\n * the accumulator for that group and the [initialValueSelector] function is not called for that group.\n *\n * @param operation a function that is invoked on each element with the following parameters:\n * - `key`: the key of the group this element belongs to;\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being accumulated.\n *\n * @return the [destination] map associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.foldByEvenLengthWithComputedInitialValueTo\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.foldTo(\n destination: M,\n initialValueSelector: (key: K, element: T) -> R,\n operation: (key: K, accumulator: R, element: T) -> R\n): M =\n @Suppress(\"UNCHECKED_CAST\")\n aggregateTo(destination) { key, acc, e, first -> operation(key, if (first) initialValueSelector(key, e) else acc as R, e) }\n\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments, and stores the results in a new map.\n * An initial value of accumulator is the same [initialValue] for each group.\n *\n * @param operation a function that is invoked on each element with the following parameters:\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being accumulated.\n *\n * @return a [Map] associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.foldByEvenLengthWithConstantInitialValue\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R> Grouping<T, K>.fold(\n initialValue: R,\n operation: (accumulator: R, element: T) -> R\n): Map<K, R> =\n @Suppress(\"UNCHECKED_CAST\")\n aggregate { _, acc, e, first -> operation(if (first) initialValue else acc as R, e) }\n\n/**\n * Groups elements from the [Grouping] source by key and applies [operation] to the elements of each group sequentially,\n * passing the previously accumulated value and the current element as arguments,\n * and stores the results in the given [destination] map.\n * An initial value of accumulator is the same [initialValue] for each group.\n *\n * If the [destination] map already has a value corresponding to the key of some group,\n * that value is used as an initial value of the accumulator for that group.\n *\n * @param operation a function that is invoked on each element with the following parameters:\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being accumulated.\n *\n * @return the [destination] map associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.foldByEvenLengthWithConstantInitialValueTo\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.foldTo(\n destination: M,\n initialValue: R,\n operation: (accumulator: R, element: T) -> R\n): M =\n @Suppress(\"UNCHECKED_CAST\")\n aggregateTo(destination) { _, acc, e, first -> operation(if (first) initialValue else acc as R, e) }\n\n\n/**\n * Groups elements from the [Grouping] source by key and applies the reducing [operation] to the elements of each group\n * sequentially starting from the second element of the group,\n * passing the previously accumulated value and the current element as arguments,\n * and stores the results in a new map.\n * An initial value of accumulator is the first element of the group.\n *\n * @param operation a function that is invoked on each subsequent element of the group with the following parameters:\n * - `key`: the key of the group this element belongs to;\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being accumulated.\n *\n * @return a [Map] associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.reduceByMaxVowels\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <S, T : S, K> Grouping<T, K>.reduce(\n operation: (key: K, accumulator: S, element: T) -> S\n): Map<K, S> =\n aggregate { key, acc, e, first ->\n @Suppress(\"UNCHECKED_CAST\")\n if (first) e else operation(key, acc as S, e)\n }\n\n/**\n * Groups elements from the [Grouping] source by key and applies the reducing [operation] to the elements of each group\n * sequentially starting from the second element of the group,\n * passing the previously accumulated value and the current element as arguments,\n * and stores the results in the given [destination] map.\n * An initial value of accumulator is the first element of the group.\n *\n * If the [destination] map already has a value corresponding to the key of some group,\n * that value is used as an initial value of the accumulator for that group and the first element of that group is also\n * subjected to the [operation].\n\n * @param operation a function that is invoked on each subsequent element of the group with the following parameters:\n * - `accumulator`: the current value of the accumulator of the group;\n * - `element`: the element from the source being folded;\n *\n * @return the [destination] map associating the key of each group with the result of accumulating the group elements.\n * @sample samples.collections.Grouping.reduceByMaxVowelsTo\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <S, T : S, K, M : MutableMap<in K, S>> Grouping<T, K>.reduceTo(\n destination: M,\n operation: (key: K, accumulator: S, element: T) -> S\n): M =\n aggregateTo(destination) { key, acc, e, first ->\n @Suppress(\"UNCHECKED_CAST\")\n if (first) e else operation(key, acc as S, e)\n }\n\n\n/**\n * Groups elements from the [Grouping] source by key and counts elements in each group to the given [destination] map.\n *\n * If the [destination] map already has a value corresponding to the key of some group,\n * that value is used as an initial value of the counter for that group.\n *\n * @return the [destination] map associating the key of each group with the count of elements in the group.\n *\n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic fun <T, K, M : MutableMap<in K, Int>> Grouping<T, K>.eachCountTo(destination: M): M =\n foldTo(destination, 0) { acc, _ -> acc + 1 }\n\n/*\n/**\n * Groups elements from the [Grouping] source by key and sums values provided by the [valueSelector] function for elements in each group\n * to the given [destination] map.\n *\n *\n * If the [destination] map already has a value corresponding to the key of some group,\n * that value is used as an initial value of the sum for that group.\n *\n * @return the [destination] map associating the key of each group with the sum of elements in the group.\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K, M : MutableMap<in K, Int>> Grouping<T, K>.eachSumOfTo(destination: M, valueSelector: (T) -> Int): M =\n foldTo(destination, 0) { acc, e -> acc + valueSelector(e)}\n*/\n\n\n/*\n// TODO: sum by long and by double overloads\n\npublic inline fun <T, K, M : MutableMap<in K, Long>> Grouping<T, K>.sumEachByLongTo(destination: M, valueSelector: (T) -> Long): M =\n foldTo(destination, 0L) { acc, e -> acc + valueSelector(e)}\n\npublic inline fun <T, K> Grouping<T, K>.sumEachByLong(valueSelector: (T) -> Long): Map<K, Long> =\n fold(0L) { acc, e -> acc + valueSelector(e)}\n\npublic inline fun <T, K, M : MutableMap<in K, Double>> Grouping<T, K>.sumEachByDoubleTo(destination: M, valueSelector: (T) -> Double): M =\n foldTo(destination, 0.0) { acc, e -> acc + valueSelector(e)}\n\npublic inline fun <T, K> Grouping<T, K>.sumEachByDouble(valueSelector: (T) -> Double): Map<K, Double> =\n fold(0.0) { acc, e -> acc + valueSelector(e)}\n*/\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"package kotlinx.html\r\n\r\nimport org.w3c.dom.events.*\r\n\r\ninterface TagConsumer<out R> {\r\n fun onTagStart(tag: Tag)\r\n fun onTagAttributeChange(tag: Tag, attribute: String, value: String?)\r\n fun onTagEvent(tag: Tag, event: String, value: (Event) -> Unit)\r\n fun onTagEnd(tag: Tag)\r\n fun onTagContent(content: CharSequence)\r\n fun onTagContentEntity(entity: Entities)\r\n fun onTagContentUnsafe(block: Unsafe.() -> Unit)\r\n fun onTagComment(content: CharSequence)\r\n fun onTagError(tag: Tag, exception: Throwable): Unit = throw exception\r\n fun finalize(): R\r\n}\r\n\r\n@HtmlTagMarker\r\ninterface Tag {\r\n val tagName: String\r\n val consumer: TagConsumer<*>\r\n val namespace: String?\r\n\r\n val attributes: MutableMap<String, String>\r\n val attributesEntries: Collection<Map.Entry<String, String>>\r\n\r\n val inlineTag: Boolean\r\n val emptyTag: Boolean\r\n\r\n operator fun Entities.unaryPlus(): Unit {\r\n entity(this)\r\n }\r\n\r\n operator fun String.unaryPlus(): Unit {\r\n text(this)\r\n }\r\n\r\n fun text(s: String) {\r\n consumer.onTagContent(s)\r\n }\r\n\r\n fun text(n: Number) {\r\n text(n.toString())\r\n }\r\n\r\n fun entity(e: Entities) {\r\n consumer.onTagContentEntity(e)\r\n }\r\n\r\n fun comment(s: String) {\r\n consumer.onTagComment(s)\r\n }\r\n}\r\n\r\n@HtmlTagMarker\r\ninterface Unsafe {\r\n operator fun String.unaryPlus()\r\n operator fun Entities.unaryPlus() = +text\r\n\r\n fun raw(s: String) {\r\n +s\r\n }\r\n\r\n fun raw(entity: Entities) {\r\n +entity\r\n }\r\n\r\n fun raw(n: Number) {\r\n +n.toString()\r\n }\r\n}\r\n\r\ninterface AttributeEnum {\r\n val realValue: String\r\n}\r\n\r\ninline fun <T : Tag> T.visit(crossinline block: T.() -> Unit) = visitTag { block() }\r\n\r\ninline fun <T : Tag, R> T.visitAndFinalize(consumer: TagConsumer<R>, crossinline block: T.() -> Unit): R\r\n = visitTagAndFinalize(consumer) { block() }\r\n\r\nfun attributesMapOf() = emptyMap\r\nfun attributesMapOf(key: String, value: String?): Map<String, String> = when (value) {\r\n null -> emptyMap\r\n else -> singletonMapOf(key, value)\r\n}\r\n\r\nfun attributesMapOf(vararg pairs: String?): Map<String, String> {\r\n var result: MutableMap<String, String>? = null\r\n\r\n for (i in 0..pairs.size - 1 step 2) {\r\n val k = pairs[i]\r\n val v = pairs[i + 1]\r\n if (k != null && v != null) {\r\n if (result == null) {\r\n result = linkedMapOf()\r\n }\r\n result.put(k, v)\r\n }\r\n }\r\n\r\n return result ?: emptyMap\r\n}\r\n\r\nfun singletonMapOf(key: String, value: String): Map<String, String> = SingletonStringMap(key, value)\r\n\r\nfun HTMLTag.unsafe(block: Unsafe.() -> Unit): Unit = consumer.onTagContentUnsafe(block)\r\n\r\nval emptyMap: Map<String, String> = emptyMap()\r\n\r\nclass DefaultUnsafe : Unsafe {\r\n private val sb = StringBuilder()\r\n\r\n override fun String.unaryPlus() {\r\n sb.append(this)\r\n }\r\n\r\n override fun toString(): String = sb.toString()\r\n}\r\n\r\n@DslMarker\r\nannotation class HtmlTagMarker\r\n\r\ntypealias HtmlContent = FlowOrPhrasingContent\r\n\r\nprivate data class SingletonStringMap(override val key: String, override val value: String) : Map<String, String>, Map.Entry<String, String> {\r\n override val entries: Set<Map.Entry<String, String>>\r\n get() = setOf(this)\r\n\r\n override val keys: Set<String>\r\n get() = setOf(key)\r\n\r\n override val size: Int\r\n get() = 1\r\n\r\n override val values: Collection<String>\r\n get() = listOf(value)\r\n\r\n override fun containsKey(key: String) = key == this.key\r\n override fun containsValue(value: String) = value == this.value\r\n override fun get(key: String): String? = if (key == this.key) value else null\r\n override fun isEmpty() = false\r\n}\r\n","package kotlinx.html.attributes\r\n\r\nimport kotlinx.html.*\r\n\r\ninterface AttributeEncoder<T> {\r\n fun encode(attributeName: String, value : T) : String\r\n fun decode(attributeName: String, value : String) : T\r\n fun empty(attributeName: String, tag: Tag) : T = throw IllegalStateException(\"Attribute $attributeName is not yet defined for tag ${tag.tagName}\")\r\n}\r\n\r\nabstract class Attribute<T>(val encoder : AttributeEncoder<T>) {\r\n open operator fun get(thisRef: Tag, attributeName: String) : T =\r\n thisRef.attributes[attributeName]?.let {\r\n encoder.decode(attributeName, it)\r\n } ?: encoder.empty(attributeName, thisRef)\r\n\r\n open operator fun set(thisRef: Tag, attributeName: String, value : T) {\r\n thisRef.attributes.put(attributeName, encoder.encode(attributeName, value))\r\n }\r\n}\r\n\r\nobject StringEncoder : AttributeEncoder<String> {\r\n override fun encode(attributeName: String, value: String): String = value\r\n override fun decode(attributeName: String, value: String): String = value\r\n}\r\n\r\nclass StringAttribute : Attribute<String>(StringEncoder)\r\n\r\n//public class IntAttribute : Attribute<Int>() {\r\n// override fun encode(desc: PropertyMetadata, value: Int): String = value.toString()\r\n// override fun decode(desc: PropertyMetadata, value: String): Int = value.toInt()\r\n//}\r\n\r\nfun Boolean.booleanEncode() = toString()\r\nclass BooleanEncoder(val trueValue: String = \"true\", val falseValue: String = \"false\") : AttributeEncoder<Boolean> {\r\n override fun encode(attributeName: String, value : Boolean): String = if (value) trueValue else falseValue\r\n override fun decode(attributeName: String, value: String): Boolean = when (value) {\r\n trueValue -> true\r\n falseValue -> false\r\n else -> throw IllegalArgumentException(\"Unknown value $value for $attributeName\")\r\n }\r\n}\r\n\r\nclass BooleanAttribute(trueValue: String = \"true\", falseValue: String = \"false\") : Attribute<Boolean>(BooleanEncoder(trueValue, falseValue))\r\n\r\nfun Boolean.tickerEncode(attributeName: String) : String = if (this) attributeName else \"\"\r\nobject TickerEncoder : AttributeEncoder<Boolean> {\r\n override fun encode(attributeName: String, value: Boolean): String = value.tickerEncode(attributeName)\r\n override fun decode(attributeName: String, value: String): Boolean = value == attributeName\r\n}\r\n\r\nclass TickerAttribute : Attribute<Boolean>(TickerEncoder) {\r\n override fun set(thisRef: Tag, attributeName: String, value: Boolean) {\r\n if (value) {\r\n thisRef.attributes.put(attributeName, attributeName)\r\n } else {\r\n thisRef.attributes.remove(attributeName)\r\n }\r\n }\r\n}\r\n\r\nclass EnumEncoder<T : AttributeEnum>(val valuesMap : Map<String, T>) : AttributeEncoder<T> {\r\n override fun encode(attributeName: String, value: T): String = value.realValue\r\n override fun decode(attributeName: String, value: String): T = valuesMap[value] ?: throw IllegalArgumentException(\"Unknown value $value for $attributeName\")\r\n}\r\n\r\nfun AttributeEnum.enumEncode() : String = realValue\r\nclass EnumAttribute<T : AttributeEnum>(val values : Map<String, T>) : Attribute<T>(EnumEncoder(values))\r\n\r\nfun stringSetDecode(value: String?): Set<String>? = value?.split(\"\\\\s+\".toRegex())?.filterNot {it.isEmpty()}?.toSet()\r\nfun Set<String>.stringSetEncode() = joinToString(\" \")\r\nobject StringSetEncoder : AttributeEncoder<Set<String>> {\r\n override fun encode(attributeName: String, value: Set<String>): String = value.joinToString(\" \")\r\n override fun decode(attributeName: String, value: String): Set<String> = stringSetDecode(value)!!\r\n override fun empty(attributeName: String, tag: Tag) = emptySet<String>()\r\n}\r\nclass StringSetAttribute : Attribute<Set<String>>(StringSetEncoder)","package kotlinx.html.impl\r\n\r\nimport kotlinx.html.*\r\n\r\nclass DelegatingMap(initialValues : Map<String, String>, private val tag : Tag, private val consumer : () -> TagConsumer<*>) : MutableMap<String, String> {\r\n private var backing: Map<String, String> = initialValues\r\n private var backingMutable = false\r\n\r\n override val size: Int\r\n get() = backing.size\r\n\r\n override fun isEmpty(): Boolean = backing.isEmpty()\r\n\r\n override fun containsKey(key: String): Boolean = backing.containsKey(key)\r\n override fun containsValue(value: String): Boolean = backing.containsValue(value)\r\n override fun get(key: String): String? = backing[key]\r\n\r\n override fun put(key: String, value: String): String? {\r\n val mutable = switchToMutable()\r\n\r\n val old = mutable.put(key, value)\r\n if (old != value) {\r\n consumer().onTagAttributeChange(tag, key, value)\r\n }\r\n\r\n return old\r\n }\r\n\r\n override fun remove(key: String): String? {\r\n val mutable = switchToMutable()\r\n\r\n return mutable.remove(key)?.let { removed ->\r\n consumer().onTagAttributeChange(tag, key, null)\r\n removed\r\n }\r\n }\r\n\r\n override fun putAll(from: Map<out String, String>) {\r\n if (from.isEmpty()) return\r\n\r\n val consumer = consumer()\r\n val mutable = switchToMutable()\r\n\r\n from.entries.forEach { e ->\r\n if (mutable.put(e.key, e.value) != e.value) {\r\n consumer.onTagAttributeChange(tag, e.key, e.value)\r\n }\r\n }\r\n }\r\n\r\n override fun clear() {\r\n backing.forEach { e -> consumer().onTagAttributeChange(tag, e.key, null) }\r\n backing = emptyMap()\r\n backingMutable = false\r\n }\r\n\r\n val immutableEntries: Collection<Map.Entry<String, String>>\r\n get() = backing.entries\r\n\r\n private fun switchToMutable(): MutableMap<String, String> = if (backingMutable) {\r\n backing\r\n } else {\r\n backingMutable = true\r\n backing = LinkedHashMap(backing)\r\n backing\r\n } as MutableMap\r\n\r\n override val keys: MutableSet<String>\r\n get() = switchToMutable().keys // TODO we need to handle changes too\r\n\r\n override val values: MutableCollection<String>\r\n get() = switchToMutable().values // TODO we need to handle changes too\r\n\r\n override val entries: MutableSet<MutableMap.MutableEntry<String, String>>\r\n get() = switchToMutable().entries // TODO we need to handle changes too\r\n}\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nenum class Dir(override val realValue : String) : AttributeEnum {\r\n ltr(\"ltr\"),\r\n rtl(\"rtl\")\r\n}\r\n\r\ninternal val dirValues : Map<String, Dir> = Dir.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class Draggable(override val realValue : String) : AttributeEnum {\r\n htmlTrue(\"true\"),\r\n htmlFalse(\"false\"),\r\n auto(\"auto\")\r\n}\r\n\r\ninternal val draggableValues : Map<String, Draggable> = Draggable.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class RunAt(override val realValue : String) : AttributeEnum {\r\n server(\"server\")\r\n}\r\n\r\ninternal val runAtValues : Map<String, RunAt> = RunAt.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject ATarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject ARel {\r\n val alternate : String = \"Alternate\"\r\n val appEndIx : String = \"Appendix\"\r\n val bookmark : String = \"Bookmark\"\r\n val chapter : String = \"Chapter\"\r\n val contentS : String = \"Contents\"\r\n val copyright : String = \"Copyright\"\r\n val glossary : String = \"Glossary\"\r\n val help : String = \"Help\"\r\n val index : String = \"Index\"\r\n val next : String = \"Next\"\r\n val prev : String = \"Prev\"\r\n val section : String = \"Section\"\r\n val start : String = \"Start\"\r\n val stylesheet : String = \"Stylesheet\"\r\n val subsection : String = \"Subsection\"\r\n\r\n val values : List<String> = listOf(\"alternate\", \"appEndIx\", \"bookmark\", \"chapter\", \"contentS\", \"copyright\", \"glossary\", \"help\", \"index\", \"next\", \"prev\", \"section\", \"start\", \"stylesheet\", \"subsection\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject AType {\r\n val textAsp : String = \"text/asp\"\r\n val textAsa : String = \"text/asa\"\r\n val textCss : String = \"text/css\"\r\n val textHtml : String = \"text/html\"\r\n val textJavaScript : String = \"text/javascript\"\r\n val textPlain : String = \"text/plain\"\r\n val textScriptLet : String = \"text/scriptlet\"\r\n val textXComponent : String = \"text/x-component\"\r\n val textXHtmlInsertion : String = \"text/x-html-insertion\"\r\n val textXml : String = \"text/xml\"\r\n\r\n val values : List<String> = listOf(\"textAsp\", \"textAsa\", \"textCss\", \"textHtml\", \"textJavaScript\", \"textPlain\", \"textScriptLet\", \"textXComponent\", \"textXHtmlInsertion\", \"textXml\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class AreaShape(override val realValue : String) : AttributeEnum {\r\n rect(\"rect\"),\r\n circle(\"circle\"),\r\n poly(\"poly\"),\r\n default(\"default\")\r\n}\r\n\r\ninternal val areaShapeValues : Map<String, AreaShape> = AreaShape.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject AreaTarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject AreaRel {\r\n val alternate : String = \"Alternate\"\r\n val appEndIx : String = \"Appendix\"\r\n val bookmark : String = \"Bookmark\"\r\n val chapter : String = \"Chapter\"\r\n val contentS : String = \"Contents\"\r\n val copyright : String = \"Copyright\"\r\n val glossary : String = \"Glossary\"\r\n val help : String = \"Help\"\r\n val index : String = \"Index\"\r\n val next : String = \"Next\"\r\n val prev : String = \"Prev\"\r\n val section : String = \"Section\"\r\n val start : String = \"Start\"\r\n val stylesheet : String = \"Stylesheet\"\r\n val subsection : String = \"Subsection\"\r\n\r\n val values : List<String> = listOf(\"alternate\", \"appEndIx\", \"bookmark\", \"chapter\", \"contentS\", \"copyright\", \"glossary\", \"help\", \"index\", \"next\", \"prev\", \"section\", \"start\", \"stylesheet\", \"subsection\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject BaseTarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class ButtonFormEncType(override val realValue : String) : AttributeEnum {\r\n multipartFormData(\"multipart/form-data\"),\r\n applicationXWwwFormUrlEncoded(\"application/x-www-form-urlencoded\"),\r\n textPlain(\"text/plain\")\r\n}\r\n\r\ninternal val buttonFormEncTypeValues : Map<String, ButtonFormEncType> = ButtonFormEncType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class ButtonFormMethod(override val realValue : String) : AttributeEnum {\r\n get(\"get\"),\r\n post(\"post\"),\r\n @Deprecated(\"method is not allowed in browsers\") put(\"put\"),\r\n @Deprecated(\"method is not allowed in browsers\") delete(\"delete\"),\r\n @Deprecated(\"method is not allowed in browsers\") patch(\"patch\")\r\n}\r\n\r\ninternal val buttonFormMethodValues : Map<String, ButtonFormMethod> = ButtonFormMethod.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject ButtonFormTarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class ButtonType(override val realValue : String) : AttributeEnum {\r\n button(\"button\"),\r\n reset(\"reset\"),\r\n submit(\"submit\")\r\n}\r\n\r\ninternal val buttonTypeValues : Map<String, ButtonType> = ButtonType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class CommandType(override val realValue : String) : AttributeEnum {\r\n command(\"command\"),\r\n checkBox(\"checkbox\"),\r\n radio(\"radio\")\r\n}\r\n\r\ninternal val commandTypeValues : Map<String, CommandType> = CommandType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class FormEncType(override val realValue : String) : AttributeEnum {\r\n multipartFormData(\"multipart/form-data\"),\r\n applicationXWwwFormUrlEncoded(\"application/x-www-form-urlencoded\"),\r\n textPlain(\"text/plain\")\r\n}\r\n\r\ninternal val formEncTypeValues : Map<String, FormEncType> = FormEncType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class FormMethod(override val realValue : String) : AttributeEnum {\r\n get(\"get\"),\r\n post(\"post\"),\r\n @Deprecated(\"method is not allowed in browsers\") put(\"put\"),\r\n @Deprecated(\"method is not allowed in browsers\") delete(\"delete\"),\r\n @Deprecated(\"method is not allowed in browsers\") patch(\"patch\")\r\n}\r\n\r\ninternal val formMethodValues : Map<String, FormMethod> = FormMethod.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject FormTarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject IframeName {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class IframeSandbox(override val realValue : String) : AttributeEnum {\r\n allowSameOrigin(\"allow-same-origin\"),\r\n allowFormS(\"allow-forms\"),\r\n allowScripts(\"allow-scripts\")\r\n}\r\n\r\ninternal val iframeSandboxValues : Map<String, IframeSandbox> = IframeSandbox.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class InputType(override val realValue : String) : AttributeEnum {\r\n button(\"button\"),\r\n checkBox(\"checkbox\"),\r\n color(\"color\"),\r\n date(\"date\"),\r\n dateTime(\"datetime\"),\r\n dateTimeLocal(\"datetime-local\"),\r\n email(\"email\"),\r\n file(\"file\"),\r\n hidden(\"hidden\"),\r\n image(\"image\"),\r\n month(\"month\"),\r\n number(\"number\"),\r\n password(\"password\"),\r\n radio(\"radio\"),\r\n range(\"range\"),\r\n reset(\"reset\"),\r\n search(\"search\"),\r\n submit(\"submit\"),\r\n text(\"text\"),\r\n tel(\"tel\"),\r\n time(\"time\"),\r\n url(\"url\"),\r\n week(\"week\")\r\n}\r\n\r\ninternal val inputTypeValues : Map<String, InputType> = InputType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class InputFormEncType(override val realValue : String) : AttributeEnum {\r\n multipartFormData(\"multipart/form-data\"),\r\n applicationXWwwFormUrlEncoded(\"application/x-www-form-urlencoded\"),\r\n textPlain(\"text/plain\")\r\n}\r\n\r\ninternal val inputFormEncTypeValues : Map<String, InputFormEncType> = InputFormEncType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class InputFormMethod(override val realValue : String) : AttributeEnum {\r\n get(\"get\"),\r\n post(\"post\"),\r\n @Deprecated(\"method is not allowed in browsers\") put(\"put\"),\r\n @Deprecated(\"method is not allowed in browsers\") delete(\"delete\"),\r\n @Deprecated(\"method is not allowed in browsers\") patch(\"patch\")\r\n}\r\n\r\ninternal val inputFormMethodValues : Map<String, InputFormMethod> = InputFormMethod.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject InputFormTarget {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class KeyGenKeyType(override val realValue : String) : AttributeEnum {\r\n rsa(\"rsa\")\r\n}\r\n\r\ninternal val keyGenKeyTypeValues : Map<String, KeyGenKeyType> = KeyGenKeyType.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nobject LinkRel {\r\n val alternate : String = \"Alternate\"\r\n val appEndIx : String = \"Appendix\"\r\n val bookmark : String = \"Bookmark\"\r\n val chapter : String = \"Chapter\"\r\n val contentS : String = \"Contents\"\r\n val copyright : String = \"Copyright\"\r\n val glossary : String = \"Glossary\"\r\n val help : String = \"Help\"\r\n val index : String = \"Index\"\r\n val next : String = \"Next\"\r\n val prev : String = \"Prev\"\r\n val section : String = \"Section\"\r\n val start : String = \"Start\"\r\n val stylesheet : String = \"Stylesheet\"\r\n val subsection : String = \"Subsection\"\r\n\r\n val values : List<String> = listOf(\"alternate\", \"appEndIx\", \"bookmark\", \"chapter\", \"contentS\", \"copyright\", \"glossary\", \"help\", \"index\", \"next\", \"prev\", \"section\", \"start\", \"stylesheet\", \"subsection\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject LinkMedia {\r\n val screen : String = \"screen\"\r\n val print : String = \"print\"\r\n val tty : String = \"tty\"\r\n val tv : String = \"tv\"\r\n val projection : String = \"projection\"\r\n val handheld : String = \"handheld\"\r\n val braille : String = \"braille\"\r\n val aural : String = \"aural\"\r\n val all : String = \"all\"\r\n\r\n val values : List<String> = listOf(\"screen\", \"print\", \"tty\", \"tv\", \"projection\", \"handheld\", \"braille\", \"aural\", \"all\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject LinkType {\r\n val textAsp : String = \"text/asp\"\r\n val textAsa : String = \"text/asa\"\r\n val textCss : String = \"text/css\"\r\n val textHtml : String = \"text/html\"\r\n val textJavaScript : String = \"text/javascript\"\r\n val textPlain : String = \"text/plain\"\r\n val textScriptLet : String = \"text/scriptlet\"\r\n val textXComponent : String = \"text/x-component\"\r\n val textXHtmlInsertion : String = \"text/x-html-insertion\"\r\n val textXml : String = \"text/xml\"\r\n\r\n val values : List<String> = listOf(\"textAsp\", \"textAsa\", \"textCss\", \"textHtml\", \"textJavaScript\", \"textPlain\", \"textScriptLet\", \"textXComponent\", \"textXHtmlInsertion\", \"textXml\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject MetaHttpEquiv {\r\n val contentLanguage : String = \"content-language\"\r\n val contentType : String = \"content-type\"\r\n val defaultStyle : String = \"default-style\"\r\n val refresh : String = \"refresh\"\r\n\r\n val values : List<String> = listOf(\"contentLanguage\", \"contentType\", \"defaultStyle\", \"refresh\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject ObjectName {\r\n val blank : String = \"_blank\"\r\n val parent : String = \"_parent\"\r\n val self : String = \"_self\"\r\n val top : String = \"_top\"\r\n\r\n val values : List<String> = listOf(\"blank\", \"parent\", \"self\", \"top\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject ScriptType {\r\n val textEcmaScript : String = \"text/ecmascript\"\r\n val textJavaScript : String = \"text/javascript\"\r\n val textJavaScript10 : String = \"text/javascript1.0\"\r\n val textJavaScript11 : String = \"text/javascript1.1\"\r\n val textJavaScript12 : String = \"text/javascript1.2\"\r\n val textJavaScript13 : String = \"text/javascript1.3\"\r\n val textJavaScript14 : String = \"text/javascript1.4\"\r\n val textJavaScript15 : String = \"text/javascript1.5\"\r\n val textJScript : String = \"text/jscript\"\r\n val textXJavaScript : String = \"text/x-javascript\"\r\n val textXEcmaScript : String = \"text/x-ecmascript\"\r\n val textVbScript : String = \"text/vbscript\"\r\n\r\n val values : List<String> = listOf(\"textEcmaScript\", \"textJavaScript\", \"textJavaScript10\", \"textJavaScript11\", \"textJavaScript12\", \"textJavaScript13\", \"textJavaScript14\", \"textJavaScript15\", \"textJScript\", \"textXJavaScript\", \"textXEcmaScript\", \"textVbScript\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject StyleType {\r\n val textCss : String = \"text/css\"\r\n\r\n val values : List<String> = listOf(\"textCss\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nobject StyleMedia {\r\n val screen : String = \"screen\"\r\n val print : String = \"print\"\r\n val tty : String = \"tty\"\r\n val tv : String = \"tv\"\r\n val projection : String = \"projection\"\r\n val handheld : String = \"handheld\"\r\n val braille : String = \"braille\"\r\n val aural : String = \"aural\"\r\n val all : String = \"all\"\r\n\r\n val values : List<String> = listOf(\"screen\", \"print\", \"tty\", \"tv\", \"projection\", \"handheld\", \"braille\", \"aural\", \"all\")\r\n}\r\n\r\n@Suppress(\"unused\")\r\nenum class TextAreaWrap(override val realValue : String) : AttributeEnum {\r\n hard(\"hard\"),\r\n soft(\"soft\")\r\n}\r\n\r\ninternal val textAreaWrapValues : Map<String, TextAreaWrap> = TextAreaWrap.values().associateBy { it.realValue }\r\n@Suppress(\"unused\")\r\nenum class ThScope(override val realValue : String) : AttributeEnum {\r\n col(\"col\"),\r\n colGroup(\"colgroup\"),\r\n row(\"row\"),\r\n rowGroup(\"rowgroup\")\r\n}\r\n\r\ninternal val thScopeValues : Map<String, ThScope> = ThScope.values().associateBy { it.realValue }\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class A(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"a\", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var href : String\r\n get() = attributeStringString.get(this, \"href\")\r\n set(newValue) {attributeStringString.set(this, \"href\", newValue)}\r\n\r\n var target : String\r\n get() = attributeStringString.get(this, \"target\")\r\n set(newValue) {attributeStringString.set(this, \"target\", newValue)}\r\n\r\n var ping : String\r\n get() = attributeStringString.get(this, \"ping\")\r\n set(newValue) {attributeStringString.set(this, \"ping\", newValue)}\r\n\r\n var rel : String\r\n get() = attributeStringString.get(this, \"rel\")\r\n set(newValue) {attributeStringString.set(this, \"rel\", newValue)}\r\n\r\n var hrefLang : String\r\n get() = attributeStringString.get(this, \"hreflang\")\r\n set(newValue) {attributeStringString.set(this, \"hreflang\", newValue)}\r\n\r\n var type : String\r\n get() = attributeStringString.get(this, \"type\")\r\n set(newValue) {attributeStringString.set(this, \"type\", newValue)}\r\n\r\n\r\n}\r\nval A.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval A.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval A.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class ABBR(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"abbr\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval ABBR.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval ABBR.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class ADDRESS(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"address\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class AREA(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"area\", consumer, initialAttributes, null, true, true), HtmlBlockInlineTag {\r\n var coords : String\r\n get() = attributeStringString.get(this, \"coords\")\r\n set(newValue) {attributeStringString.set(this, \"coords\", newValue)}\r\n\r\n var href : String\r\n get() = attributeStringString.get(this, \"href\")\r\n set(newValue) {attributeStringString.set(this, \"href\", newValue)}\r\n\r\n var hrefLang : String\r\n get() = attributeStringString.get(this, \"hreflang\")\r\n set(newValue) {attributeStringString.set(this, \"hreflang\", newValue)}\r\n\r\n var alt : String\r\n get() = attributeStringString.get(this, \"alt\")\r\n set(newValue) {attributeStringString.set(this, \"alt\", newValue)}\r\n\r\n var target : String\r\n get() = attributeStringString.get(this, \"target\")\r\n set(newValue) {attributeStringString.set(this, \"target\", newValue)}\r\n\r\n var media : String\r\n get() = attributeStringString.get(this, \"media\")\r\n set(newValue) {attributeStringString.set(this, \"media\", newValue)}\r\n\r\n var rel : String\r\n get() = attributeStringString.get(this, \"rel\")\r\n set(newValue) {attributeStringString.set(this, \"rel\", newValue)}\r\n\r\n var ping : String\r\n get() = attributeStringString.get(this, \"ping\")\r\n set(newValue) {attributeStringString.set(this, \"ping\", newValue)}\r\n\r\n var type : String\r\n get() = attributeStringString.get(this, \"type\")\r\n set(newValue) {attributeStringString.set(this, \"type\", newValue)}\r\n\r\n\r\n}\r\nval AREA.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval AREA.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class ARTICLE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"article\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowSectioningContent {\r\n\r\n}\r\nval ARTICLE.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval ARTICLE.asSectioningContent : SectioningContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class ASIDE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"aside\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowSectioningContent {\r\n\r\n}\r\nval ASIDE.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval ASIDE.asSectioningContent : SectioningContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class AUDIO(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"audio\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var autoBuffer : Boolean\r\n get() = attributeBooleanTicker.get(this, \"autobuffer\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"autobuffer\", newValue)}\r\n\r\n var autoPlay : Boolean\r\n get() = attributeBooleanTicker.get(this, \"autoplay\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"autoplay\", newValue)}\r\n\r\n var loop : Boolean\r\n get() = attributeBooleanTicker.get(this, \"loop\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"loop\", newValue)}\r\n\r\n var controls : Boolean\r\n get() = attributeBooleanTicker.get(this, \"controls\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"controls\", newValue)}\r\n\r\n\r\n}\r\n/**\r\n * Media source for \r\n */\r\n@HtmlTagMarker\r\ninline fun AUDIO.source(classes : String? = null, crossinline block : SOURCE.() -> Unit = {}) : Unit = SOURCE(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\nval AUDIO.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval AUDIO.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval AUDIO.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class B(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"b\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval B.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval B.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class BASE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"base\", consumer, initialAttributes, null, true, true), HtmlHeadTag {\r\n var href : String\r\n get() = attributeStringString.get(this, \"href\")\r\n set(newValue) {attributeStringString.set(this, \"href\", newValue)}\r\n\r\n var target : String\r\n get() = attributeStringString.get(this, \"target\")\r\n set(newValue) {attributeStringString.set(this, \"target\", newValue)}\r\n\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class BDI(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"bdi\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval BDI.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval BDI.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class BDO(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"bdo\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval BDO.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval BDO.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class BLOCKQUOTE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"blockquote\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n var cite : String\r\n get() = attributeStringString.get(this, \"cite\")\r\n set(newValue) {attributeStringString.set(this, \"cite\", newValue)}\r\n\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class BODY(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"body\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n var onAfterprint : String\r\n get() = attributeStringString.get(this, \"onafterprint\")\r\n set(newValue) {attributeStringString.set(this, \"onafterprint\", newValue)}\r\n\r\n var onBeforeprint : String\r\n get() = attributeStringString.get(this, \"onbeforeprint\")\r\n set(newValue) {attributeStringString.set(this, \"onbeforeprint\", newValue)}\r\n\r\n var onBeforeunLoad : String\r\n get() = attributeStringString.get(this, \"onbeforeunload\")\r\n set(newValue) {attributeStringString.set(this, \"onbeforeunload\", newValue)}\r\n\r\n var onHashChange : String\r\n get() = attributeStringString.get(this, \"onhashchange\")\r\n set(newValue) {attributeStringString.set(this, \"onhashchange\", newValue)}\r\n\r\n var onMessage : String\r\n get() = attributeStringString.get(this, \"onmessage\")\r\n set(newValue) {attributeStringString.set(this, \"onmessage\", newValue)}\r\n\r\n var onOffline : String\r\n get() = attributeStringString.get(this, \"onoffline\")\r\n set(newValue) {attributeStringString.set(this, \"onoffline\", newValue)}\r\n\r\n var onOnline : String\r\n get() = attributeStringString.get(this, \"ononline\")\r\n set(newValue) {attributeStringString.set(this, \"ononline\", newValue)}\r\n\r\n var onPopstate : String\r\n get() = attributeStringString.get(this, \"onpopstate\")\r\n set(newValue) {attributeStringString.set(this, \"onpopstate\", newValue)}\r\n\r\n var onRedo : String\r\n get() = attributeStringString.get(this, \"onredo\")\r\n set(newValue) {attributeStringString.set(this, \"onredo\", newValue)}\r\n\r\n var onResize : String\r\n get() = attributeStringString.get(this, \"onresize\")\r\n set(newValue) {attributeStringString.set(this, \"onresize\", newValue)}\r\n\r\n var onStorage : String\r\n get() = attributeStringString.get(this, \"onstorage\")\r\n set(newValue) {attributeStringString.set(this, \"onstorage\", newValue)}\r\n\r\n var onUndo : String\r\n get() = attributeStringString.get(this, \"onundo\")\r\n set(newValue) {attributeStringString.set(this, \"onundo\", newValue)}\r\n\r\n var onUnLoad : String\r\n get() = attributeStringString.get(this, \"onunload\")\r\n set(newValue) {attributeStringString.set(this, \"onunload\", newValue)}\r\n\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class BR(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"br\", consumer, initialAttributes, null, true, true), HtmlBlockInlineTag {\r\n\r\n}\r\nval BR.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval BR.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class BUTTON(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"button\", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var autoFocus : Boolean\r\n get() = attributeBooleanTicker.get(this, \"autofocus\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"autofocus\", newValue)}\r\n\r\n var disabled : Boolean\r\n get() = attributeBooleanTicker.get(this, \"disabled\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"disabled\", newValue)}\r\n\r\n var form : String\r\n get() = attributeStringString.get(this, \"form\")\r\n set(newValue) {attributeStringString.set(this, \"form\", newValue)}\r\n\r\n var formAction : String\r\n get() = attributeStringString.get(this, \"formaction\")\r\n set(newValue) {attributeStringString.set(this, \"formaction\", newValue)}\r\n\r\n var formEncType : ButtonFormEncType\r\n get() = attributeButtonFormEncTypeEnumButtonFormEncTypeValues.get(this, \"formenctype\")\r\n set(newValue) {attributeButtonFormEncTypeEnumButtonFormEncTypeValues.set(this, \"formenctype\", newValue)}\r\n\r\n var formMethod : ButtonFormMethod\r\n get() = attributeButtonFormMethodEnumButtonFormMethodValues.get(this, \"formmethod\")\r\n set(newValue) {attributeButtonFormMethodEnumButtonFormMethodValues.set(this, \"formmethod\", newValue)}\r\n\r\n var formNovalidate : Boolean\r\n get() = attributeBooleanTicker.get(this, \"formnovalidate\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"formnovalidate\", newValue)}\r\n\r\n var formTarget : String\r\n get() = attributeStringString.get(this, \"formtarget\")\r\n set(newValue) {attributeStringString.set(this, \"formtarget\", newValue)}\r\n\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n var value : String\r\n get() = attributeStringString.get(this, \"value\")\r\n set(newValue) {attributeStringString.set(this, \"value\", newValue)}\r\n\r\n var type : ButtonType\r\n get() = attributeButtonTypeEnumButtonTypeValues.get(this, \"type\")\r\n set(newValue) {attributeButtonTypeEnumButtonTypeValues.set(this, \"type\", newValue)}\r\n\r\n\r\n}\r\nval BUTTON.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval BUTTON.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval BUTTON.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class DATALIST(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"datalist\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\n/**\r\n * Selectable choice\r\n */\r\n@HtmlTagMarker\r\ninline fun DATALIST.option(classes : String? = null, crossinline block : OPTION.() -> Unit = {}) : Unit = OPTION(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n/**\r\n * Selectable choice\r\n */\r\n@HtmlTagMarker\r\nfun DATALIST.option(classes : String? = null, content : String = \"\") : Unit = OPTION(attributesMapOf(\"class\", classes), consumer).visit({+content})\r\n\r\nval DATALIST.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval DATALIST.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class DD(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"dd\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class DEL(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"del\", consumer, initialAttributes, null, false, false), HtmlBlockInlineTag {\r\n var cite : String\r\n get() = attributeStringString.get(this, \"cite\")\r\n set(newValue) {attributeStringString.set(this, \"cite\", newValue)}\r\n\r\n var dateTime : String\r\n get() = attributeStringString.get(this, \"datetime\")\r\n set(newValue) {attributeStringString.set(this, \"datetime\", newValue)}\r\n\r\n\r\n}\r\nval DEL.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval DEL.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class DETAILS(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"details\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowInteractiveContent {\r\n var open : Boolean\r\n get() = attributeBooleanTicker.get(this, \"open\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"open\", newValue)}\r\n\r\n\r\n}\r\n/**\r\n * Fieldset legend\r\n */\r\n@HtmlTagMarker\r\ninline fun DETAILS.legend(classes : String? = null, crossinline block : LEGEND.() -> Unit = {}) : Unit = LEGEND(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\nval DETAILS.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval DETAILS.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class DFN(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"dfn\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval DFN.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval DFN.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class DIALOG(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"dialog\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class DIV(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"div\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class DL(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"dl\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n/**\r\n * Definition description\r\n */\r\n@HtmlTagMarker\r\ninline fun DL.dd(classes : String? = null, crossinline block : DD.() -> Unit = {}) : Unit = DD(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Definition term\r\n */\r\n@HtmlTagMarker\r\ninline fun DL.dt(classes : String? = null, crossinline block : DT.() -> Unit = {}) : Unit = DT(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class DT(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"dt\", consumer, initialAttributes, null, false, false), HtmlInlineTag {\r\n\r\n}\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class FIELDSET(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"fieldset\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n var disabled : Boolean\r\n get() = attributeBooleanTicker.get(this, \"disabled\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"disabled\", newValue)}\r\n\r\n var form : String\r\n get() = attributeStringString.get(this, \"form\")\r\n set(newValue) {attributeStringString.set(this, \"form\", newValue)}\r\n\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n\r\n}\r\n/**\r\n * Fieldset legend\r\n */\r\n@HtmlTagMarker\r\ninline fun FIELDSET.legend(classes : String? = null, crossinline block : LEGEND.() -> Unit = {}) : Unit = LEGEND(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class FIGCAPTION(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"figcaption\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class FIGURE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"figure\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n/**\r\n * Fieldset legend\r\n */\r\n@HtmlTagMarker\r\ninline fun FIGURE.legend(classes : String? = null, crossinline block : LEGEND.() -> Unit = {}) : Unit = LEGEND(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Caption for \r\n */\r\n@HtmlTagMarker\r\ninline fun FIGURE.figcaption(classes : String? = null, crossinline block : FIGCAPTION.() -> Unit = {}) : Unit = FIGCAPTION(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class FOOTER(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"footer\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class FORM(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"form\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n var acceptCharset : String\r\n get() = attributeStringString.get(this, \"accept-charset\")\r\n set(newValue) {attributeStringString.set(this, \"accept-charset\", newValue)}\r\n\r\n var action : String\r\n get() = attributeStringString.get(this, \"action\")\r\n set(newValue) {attributeStringString.set(this, \"action\", newValue)}\r\n\r\n var autoComplete : Boolean\r\n get() = attributeBooleanBooleanOnOff.get(this, \"autocomplete\")\r\n set(newValue) {attributeBooleanBooleanOnOff.set(this, \"autocomplete\", newValue)}\r\n\r\n var encType : FormEncType\r\n get() = attributeFormEncTypeEnumFormEncTypeValues.get(this, \"enctype\")\r\n set(newValue) {attributeFormEncTypeEnumFormEncTypeValues.set(this, \"enctype\", newValue)}\r\n\r\n var method : FormMethod\r\n get() = attributeFormMethodEnumFormMethodValues.get(this, \"method\")\r\n set(newValue) {attributeFormMethodEnumFormMethodValues.set(this, \"method\", newValue)}\r\n\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n var novalidate : Boolean\r\n get() = attributeBooleanTicker.get(this, \"novalidate\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"novalidate\", newValue)}\r\n\r\n var target : String\r\n get() = attributeStringString.get(this, \"target\")\r\n set(newValue) {attributeStringString.set(this, \"target\", newValue)}\r\n\r\n\r\n}\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class H1(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h1\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class H2(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h2\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class H3(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h3\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class H4(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h4\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class H5(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h5\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class H6(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"h6\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class HEAD(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"head\", consumer, initialAttributes, null, false, false), HtmlHeadTag {\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun Entities.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") entity(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun String.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") text(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(s : String) : Unit {\r\n super<HTMLTag>.text(s)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(n : Number) : Unit {\r\n super<HTMLTag>.text(n)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun entity(e : Entities) : Unit {\r\n super<HTMLTag>.entity(e)\r\n }\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class HEADER(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"header\", consumer, initialAttributes, null, false, false), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class HGROUP(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"hgroup\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowHeadingContent {\r\n\r\n}\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h1(classes : String? = null, crossinline block : H1.() -> Unit = {}) : Unit = H1(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h2(classes : String? = null, crossinline block : H2.() -> Unit = {}) : Unit = H2(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h3(classes : String? = null, crossinline block : H3.() -> Unit = {}) : Unit = H3(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h4(classes : String? = null, crossinline block : H4.() -> Unit = {}) : Unit = H4(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h5(classes : String? = null, crossinline block : H5.() -> Unit = {}) : Unit = H5(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Heading\r\n */\r\n@HtmlTagMarker\r\ninline fun HGROUP.h6(classes : String? = null, crossinline block : H6.() -> Unit = {}) : Unit = H6(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\nval HGROUP.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval HGROUP.asHeadingContent : HeadingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class HR(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"hr\", consumer, initialAttributes, null, false, true), HtmlBlockTag {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class HTML(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>, namespace : String? = null) : HTMLTag(\"html\", consumer, initialAttributes, namespace, false, false), CommonAttributeGroupFacade {\r\n var manifest : String\r\n get() = attributeStringString.get(this, \"manifest\")\r\n set(newValue) {attributeStringString.set(this, \"manifest\", newValue)}\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun Entities.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") entity(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun String.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") text(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(s : String) : Unit {\r\n super<HTMLTag>.text(s)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(n : Number) : Unit {\r\n super<HTMLTag>.text(n)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun entity(e : Entities) : Unit {\r\n super<HTMLTag>.entity(e)\r\n }\r\n\r\n}\r\n/**\r\n * Document body\r\n */\r\n@HtmlTagMarker\r\ninline fun HTML.body(classes : String? = null, crossinline block : BODY.() -> Unit = {}) : Unit = BODY(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n\r\n/**\r\n * Document head\r\n */\r\n@HtmlTagMarker\r\ninline fun HTML.head(crossinline block : HEAD.() -> Unit = {}) : Unit = HEAD(emptyMap, consumer).visit(block)\r\n@Deprecated(\"This tag doesn't support content or requires unsafe (try unsafe {})\")\r\n@Suppress(\"DEPRECATION\")\r\n/**\r\n * Document head\r\n */\r\n@HtmlTagMarker\r\nfun HTML.head(content : String = \"\") : Unit = HEAD(emptyMap, consumer).visit({+content})\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class I(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"i\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval I.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval I.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class IFRAME(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"iframe\", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var height : String\r\n get() = attributeStringString.get(this, \"height\")\r\n set(newValue) {attributeStringString.set(this, \"height\", newValue)}\r\n\r\n var width : String\r\n get() = attributeStringString.get(this, \"width\")\r\n set(newValue) {attributeStringString.set(this, \"width\", newValue)}\r\n\r\n var sandbox : IframeSandbox\r\n get() = attributeIframeSandboxEnumIframeSandboxValues.get(this, \"sandbox\")\r\n set(newValue) {attributeIframeSandboxEnumIframeSandboxValues.set(this, \"sandbox\", newValue)}\r\n\r\n var seamless : Boolean\r\n get() = attributeBooleanTicker.get(this, \"seamless\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"seamless\", newValue)}\r\n\r\n\r\n}\r\nval IFRAME.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval IFRAME.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval IFRAME.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class IMG(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"img\", consumer, initialAttributes, null, true, true), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var alt : String\r\n get() = attributeStringString.get(this, \"alt\")\r\n set(newValue) {attributeStringString.set(this, \"alt\", newValue)}\r\n\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var height : String\r\n get() = attributeStringString.get(this, \"height\")\r\n set(newValue) {attributeStringString.set(this, \"height\", newValue)}\r\n\r\n var width : String\r\n get() = attributeStringString.get(this, \"width\")\r\n set(newValue) {attributeStringString.set(this, \"width\", newValue)}\r\n\r\n var usemap : String\r\n get() = attributeStringString.get(this, \"usemap\")\r\n set(newValue) {attributeStringString.set(this, \"usemap\", newValue)}\r\n\r\n var ismap : Boolean\r\n get() = attributeBooleanTicker.get(this, \"ismap\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"ismap\", newValue)}\r\n\r\n\r\n}\r\nval IMG.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval IMG.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval IMG.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class INPUT(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"input\", consumer, initialAttributes, null, true, true), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var type : InputType\r\n get() = attributeInputTypeEnumInputTypeValues.get(this, \"type\")\r\n set(newValue) {attributeInputTypeEnumInputTypeValues.set(this, \"type\", newValue)}\r\n\r\n var accept : String\r\n get() = attributeStringString.get(this, \"accept\")\r\n set(newValue) {attributeStringString.set(this, \"accept\", newValue)}\r\n\r\n var alt : String\r\n get() = attributeStringString.get(this, \"alt\")\r\n set(newValue) {attributeStringString.set(this, \"alt\", newValue)}\r\n\r\n var autoFocus : Boolean\r\n get() = attributeBooleanTicker.get(this, \"autofocus\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"autofocus\", newValue)}\r\n\r\n var autoComplete : Boolean\r\n get() = attributeBooleanBooleanOnOff.get(this, \"autocomplete\")\r\n set(newValue) {attributeBooleanBooleanOnOff.set(this, \"autocomplete\", newValue)}\r\n\r\n var checked : Boolean\r\n get() = attributeBooleanTicker.get(this, \"checked\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"checked\", newValue)}\r\n\r\n var disabled : Boolean\r\n get() = attributeBooleanTicker.get(this, \"disabled\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"disabled\", newValue)}\r\n\r\n var form : String\r\n get() = attributeStringString.get(this, \"form\")\r\n set(newValue) {attributeStringString.set(this, \"form\", newValue)}\r\n\r\n var formAction : String\r\n get() = attributeStringString.get(this, \"formaction\")\r\n set(newValue) {attributeStringString.set(this, \"formaction\", newValue)}\r\n\r\n var formEncType : InputFormEncType\r\n get() = attributeInputFormEncTypeEnumInputFormEncTypeValues.get(this, \"formenctype\")\r\n set(newValue) {attributeInputFormEncTypeEnumInputFormEncTypeValues.set(this, \"formenctype\", newValue)}\r\n\r\n var formMethod : InputFormMethod\r\n get() = attributeInputFormMethodEnumInputFormMethodValues.get(this, \"formmethod\")\r\n set(newValue) {attributeInputFormMethodEnumInputFormMethodValues.set(this, \"formmethod\", newValue)}\r\n\r\n var formNovalidate : Boolean\r\n get() = attributeBooleanTicker.get(this, \"formnovalidate\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"formnovalidate\", newValue)}\r\n\r\n var formTarget : String\r\n get() = attributeStringString.get(this, \"formtarget\")\r\n set(newValue) {attributeStringString.set(this, \"formtarget\", newValue)}\r\n\r\n var height : String\r\n get() = attributeStringString.get(this, \"height\")\r\n set(newValue) {attributeStringString.set(this, \"height\", newValue)}\r\n\r\n var list : String\r\n get() = attributeStringString.get(this, \"list\")\r\n set(newValue) {attributeStringString.set(this, \"list\", newValue)}\r\n\r\n var max : String\r\n get() = attributeStringString.get(this, \"max\")\r\n set(newValue) {attributeStringString.set(this, \"max\", newValue)}\r\n\r\n var maxLength : String\r\n get() = attributeStringString.get(this, \"maxlength\")\r\n set(newValue) {attributeStringString.set(this, \"maxlength\", newValue)}\r\n\r\n var minLength : String\r\n get() = attributeStringString.get(this, \"minlength\")\r\n set(newValue) {attributeStringString.set(this, \"minlength\", newValue)}\r\n\r\n var min : String\r\n get() = attributeStringString.get(this, \"min\")\r\n set(newValue) {attributeStringString.set(this, \"min\", newValue)}\r\n\r\n var multiple : Boolean\r\n get() = attributeBooleanTicker.get(this, \"multiple\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"multiple\", newValue)}\r\n\r\n var pattern : String\r\n get() = attributeStringString.get(this, \"pattern\")\r\n set(newValue) {attributeStringString.set(this, \"pattern\", newValue)}\r\n\r\n var placeholder : String\r\n get() = attributeStringString.get(this, \"placeholder\")\r\n set(newValue) {attributeStringString.set(this, \"placeholder\", newValue)}\r\n\r\n var readonly : Boolean\r\n get() = attributeBooleanTicker.get(this, \"readonly\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"readonly\", newValue)}\r\n\r\n var required : Boolean\r\n get() = attributeBooleanTicker.get(this, \"required\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"required\", newValue)}\r\n\r\n var size : String\r\n get() = attributeStringString.get(this, \"size\")\r\n set(newValue) {attributeStringString.set(this, \"size\", newValue)}\r\n\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var step : String\r\n get() = attributeStringString.get(this, \"step\")\r\n set(newValue) {attributeStringString.set(this, \"step\", newValue)}\r\n\r\n var width : String\r\n get() = attributeStringString.get(this, \"width\")\r\n set(newValue) {attributeStringString.set(this, \"width\", newValue)}\r\n\r\n var files : String\r\n get() = attributeStringString.get(this, \"files\")\r\n set(newValue) {attributeStringString.set(this, \"files\", newValue)}\r\n\r\n var value : String\r\n get() = attributeStringString.get(this, \"value\")\r\n set(newValue) {attributeStringString.set(this, \"value\", newValue)}\r\n\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n\r\n}\r\nval INPUT.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval INPUT.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval INPUT.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class INS(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"ins\", consumer, initialAttributes, null, false, false), HtmlBlockInlineTag {\r\n var cite : String\r\n get() = attributeStringString.get(this, \"cite\")\r\n set(newValue) {attributeStringString.set(this, \"cite\", newValue)}\r\n\r\n var dateTime : String\r\n get() = attributeStringString.get(this, \"datetime\")\r\n set(newValue) {attributeStringString.set(this, \"datetime\", newValue)}\r\n\r\n\r\n}\r\nval INS.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval INS.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class NAV(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"nav\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowSectioningContent {\r\n\r\n}\r\nval NAV.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval NAV.asSectioningContent : SectioningContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class NOSCRIPT(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"noscript\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowMetaDataPhrasingContent {\r\n\r\n}\r\nval NOSCRIPT.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval NOSCRIPT.asMetaDataContent : MetaDataContent\r\n get() = this\r\n\r\nval NOSCRIPT.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\n@Suppress(\"unused\")\r\nopen class SAMP(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"samp\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SAMP.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SAMP.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SCRIPT(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"script\", consumer, initialAttributes, null, false, false), FlowMetaDataPhrasingContent {\r\n var charset : String\r\n get() = attributeStringString.get(this, \"charset\")\r\n set(newValue) {attributeStringString.set(this, \"charset\", newValue)}\r\n\r\n var type : String\r\n get() = attributeStringString.get(this, \"type\")\r\n set(newValue) {attributeStringString.set(this, \"type\", newValue)}\r\n\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var defer : Boolean\r\n get() = attributeBooleanTicker.get(this, \"defer\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"defer\", newValue)}\r\n\r\n var async : Boolean\r\n get() = attributeBooleanTicker.get(this, \"async\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"async\", newValue)}\r\n\r\n var nonce : String\r\n get() = attributeStringString.get(this, \"nonce\")\r\n set(newValue) {attributeStringString.set(this, \"nonce\", newValue)}\r\n\r\n var integrity : String\r\n get() = attributeStringString.get(this, \"integrity\")\r\n set(newValue) {attributeStringString.set(this, \"integrity\", newValue)}\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun Entities.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") entity(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun String.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") text(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(s : String) : Unit {\r\n super<HTMLTag>.text(s)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(n : Number) : Unit {\r\n super<HTMLTag>.text(n)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun entity(e : Entities) : Unit {\r\n super<HTMLTag>.entity(e)\r\n }\r\n\r\n}\r\nval SCRIPT.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SCRIPT.asMetaDataContent : MetaDataContent\r\n get() = this\r\n\r\nval SCRIPT.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SECTION(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"section\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowSectioningContent {\r\n\r\n}\r\nval SECTION.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SECTION.asSectioningContent : SectioningContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SELECT(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"select\", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent {\r\n var autoFocus : Boolean\r\n get() = attributeBooleanTicker.get(this, \"autofocus\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"autofocus\", newValue)}\r\n\r\n var disabled : Boolean\r\n get() = attributeBooleanTicker.get(this, \"disabled\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"disabled\", newValue)}\r\n\r\n var form : String\r\n get() = attributeStringString.get(this, \"form\")\r\n set(newValue) {attributeStringString.set(this, \"form\", newValue)}\r\n\r\n var multiple : Boolean\r\n get() = attributeBooleanTicker.get(this, \"multiple\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"multiple\", newValue)}\r\n\r\n var name : String\r\n get() = attributeStringString.get(this, \"name\")\r\n set(newValue) {attributeStringString.set(this, \"name\", newValue)}\r\n\r\n var size : String\r\n get() = attributeStringString.get(this, \"size\")\r\n set(newValue) {attributeStringString.set(this, \"size\", newValue)}\r\n\r\n var required : Boolean\r\n get() = attributeBooleanTicker.get(this, \"required\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"required\", newValue)}\r\n\r\n\r\n}\r\n/**\r\n * Selectable choice\r\n */\r\n@HtmlTagMarker\r\ninline fun SELECT.option(classes : String? = null, crossinline block : OPTION.() -> Unit = {}) : Unit = OPTION(attributesMapOf(\"class\", classes), consumer).visit(block)\r\n/**\r\n * Selectable choice\r\n */\r\n@HtmlTagMarker\r\nfun SELECT.option(classes : String? = null, content : String = \"\") : Unit = OPTION(attributesMapOf(\"class\", classes), consumer).visit({+content})\r\n\r\n/**\r\n * Option group\r\n */\r\n@HtmlTagMarker\r\ninline fun SELECT.optGroup(label : String? = null, classes : String? = null, crossinline block : OPTGROUP.() -> Unit = {}) : Unit = OPTGROUP(attributesMapOf(\"label\", label,\"class\", classes), consumer).visit(block)\r\n\r\nval SELECT.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SELECT.asInteractiveContent : InteractiveContent\r\n get() = this\r\n\r\nval SELECT.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SMALL(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"small\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SMALL.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SMALL.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SOURCE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"source\", consumer, initialAttributes, null, true, true), CommonAttributeGroupFacade {\r\n var src : String\r\n get() = attributeStringString.get(this, \"src\")\r\n set(newValue) {attributeStringString.set(this, \"src\", newValue)}\r\n\r\n var type : String\r\n get() = attributeStringString.get(this, \"type\")\r\n set(newValue) {attributeStringString.set(this, \"type\", newValue)}\r\n\r\n var media : String\r\n get() = attributeStringString.get(this, \"media\")\r\n set(newValue) {attributeStringString.set(this, \"media\", newValue)}\r\n\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class SPAN(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"span\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SPAN.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SPAN.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class STRONG(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"strong\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval STRONG.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval STRONG.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class STYLE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"style\", consumer, initialAttributes, null, false, false), CommonAttributeGroupFacadeFlowMetaDataContent {\r\n var type : String\r\n get() = attributeStringString.get(this, \"type\")\r\n set(newValue) {attributeStringString.set(this, \"type\", newValue)}\r\n\r\n var media : String\r\n get() = attributeStringString.get(this, \"media\")\r\n set(newValue) {attributeStringString.set(this, \"media\", newValue)}\r\n\r\n var scoped : Boolean\r\n get() = attributeBooleanTicker.get(this, \"scoped\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"scoped\", newValue)}\r\n\r\n var nonce : String\r\n get() = attributeStringString.get(this, \"nonce\")\r\n set(newValue) {attributeStringString.set(this, \"nonce\", newValue)}\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun Entities.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") entity(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override operator fun String.unaryPlus() : Unit {\r\n @Suppress(\"DEPRECATION\") text(this)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(s : String) : Unit {\r\n super<HTMLTag>.text(s)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun text(n : Number) : Unit {\r\n super<HTMLTag>.text(n)\r\n }\r\n\r\n @Deprecated(\"This tag most likely doesn't support text content or requires unsafe content (try unsafe {}\")\r\n override fun entity(e : Entities) : Unit {\r\n super<HTMLTag>.entity(e)\r\n }\r\n\r\n}\r\nval STYLE.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval STYLE.asMetaDataContent : MetaDataContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SUB(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"sub\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SUB.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SUB.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SUMMARY(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"summary\", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowHeadingPhrasingContent {\r\n\r\n}\r\n\r\n@Suppress(\"unused\")\r\nopen class SUP(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"sup\", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SUP.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SUP.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n@Suppress(\"unused\")\r\nopen class SVG(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag(\"svg\", consumer, initialAttributes, \"http://www.w3.org/2000/svg\", false, false), HtmlBlockInlineTag {\r\n\r\n}\r\nval SVG.asFlowContent : FlowContent\r\n get() = this\r\n\r\nval SVG.asPhrasingContent : PhrasingContent\r\n get() = this\r\n\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.impl.*\r\n\r\nopen class HTMLTag(\r\n override val tagName : String,\r\n override val consumer : TagConsumer<*>,\r\n initialAttributes : Map<String, String>,\r\n override val namespace : String? = null,\r\n override val inlineTag: Boolean,\r\n override val emptyTag: Boolean) : Tag {\r\n\r\n override val attributes : DelegatingMap = DelegatingMap(initialAttributes, this) { consumer }\r\n\r\n override val attributesEntries: Collection<Map.Entry<String, String>>\r\n get() = attributes.immutableEntries\r\n}\r\n","package kotlinx.html.stream\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.consumers.*\r\nimport org.w3c.dom.events.*\r\n\r\nclass HTMLStreamBuilder<out O : Appendable>(val out : O, val prettyPrint : Boolean, val xhtmlCompatible: Boolean) : TagConsumer<O> {\r\n private var level = 0\r\n private var ln = true\r\n\r\n override fun onTagStart(tag: Tag) {\r\n if (prettyPrint && !tag.inlineTag) {\r\n indent()\r\n }\r\n level++\r\n\r\n out.append(\"<\")\r\n out.append(tag.tagName)\r\n\r\n if (tag.namespace != null) {\r\n out.append(\" xmlns=\\\"\")\r\n out.append(tag.namespace)\r\n out.append(\"\\\"\")\r\n }\r\n\r\n if (tag.attributes.isNotEmpty()) {\r\n tag.attributesEntries.forEachIndexed { _, e ->\r\n if (!e.key.isValidXmlAttributeName()) {\r\n throw IllegalArgumentException(\"Tag ${tag.tagName} has invalid attribute name ${e.key}\")\r\n }\r\n\r\n out.append(' ')\r\n out.append(e.key)\r\n out.append(\"=\\\"\")\r\n out.escapeAppend(e.value)\r\n out.append('\\\"')\r\n }\r\n }\r\n\r\n if (xhtmlCompatible && tag.emptyTag) {\r\n out.append(\"/\")\r\n }\r\n\r\n out.append(\">\")\r\n ln = false\r\n }\r\n\r\n override fun onTagAttributeChange(tag : Tag, attribute: String, value: String?) {\r\n throw UnsupportedOperationException(\"tag attribute can't be changed as it was already written to the stream. Use with DelayedConsumer to be able to modify attributes\")\r\n }\r\n\r\n override fun onTagEvent(tag: Tag, event: String, value: (Event) -> Unit) {\r\n throw UnsupportedOperationException(\"you can't assign lambda event handler when building text\")\r\n }\r\n\r\n override fun onTagEnd(tag: Tag) {\r\n level--\r\n if (ln) {\r\n indent()\r\n }\r\n\r\n if (!tag.emptyTag) {\r\n out.append(\"</\")\r\n out.append(tag.tagName)\r\n out.append(\">\")\r\n }\r\n\r\n if (prettyPrint && !tag.inlineTag) {\r\n appendln()\r\n }\r\n }\r\n\r\n override fun onTagContent(content: CharSequence) {\r\n out.escapeAppend(content)\r\n ln = false\r\n }\r\n\r\n override fun onTagContentEntity(entity: Entities) {\r\n out.append(entity.text)\r\n ln = false\r\n }\r\n\r\n override fun finalize(): O = out\r\n\r\n override fun onTagContentUnsafe(block: Unsafe.() -> Unit) {\r\n UnsafeImpl.block()\r\n }\r\n\r\n override fun onTagComment(content: CharSequence) {\r\n if (prettyPrint) {\r\n indent()\r\n }\r\n\r\n out.append(\"<!--\")\r\n out.escapeComment(content)\r\n out.append(\"-->\")\r\n\r\n ln = false\r\n }\r\n\r\n val UnsafeImpl = object : Unsafe {\r\n override operator fun String.unaryPlus() {\r\n out.append(this)\r\n }\r\n }\r\n\r\n private fun appendln() {\r\n if (prettyPrint && !ln) {\r\n out.append(\"\\n\")\r\n ln = true\r\n }\r\n }\r\n\r\n private fun indent() {\r\n if (prettyPrint) {\r\n if (!ln) {\r\n out.append(\"\\n\")\r\n }\r\n var remaining = level\r\n while (remaining >= 4) {\r\n out.append(\" \")\r\n remaining -= 4\r\n }\r\n while (remaining >= 2) {\r\n out.append(\" \")\r\n remaining -= 2\r\n }\r\n if (remaining > 0) {\r\n out.append(\" \")\r\n }\r\n ln = false\r\n }\r\n }\r\n}\r\n\r\nprivate val AVERAGE_PAGE_SIZE = 32768\r\n\r\nfun createHTML(prettyPrint: Boolean = true, xhtmlCompatible: Boolean = false): TagConsumer<String> =\r\n HTMLStreamBuilder(StringBuilder(AVERAGE_PAGE_SIZE), prettyPrint, xhtmlCompatible).onFinalizeMap { sb, _ -> sb.toString() }.delayed()\r\n\r\nfun <O : Appendable> O.appendHTML(prettyPrint: Boolean = true, xhtmlCompatible: Boolean = false): TagConsumer<O> =\r\n HTMLStreamBuilder(this, prettyPrint, xhtmlCompatible).delayed()\r\n\r\n@Deprecated(\"Should be resolved to the previous implementation\", level = DeprecationLevel.HIDDEN)\r\nfun <O : Appendable> O.appendHTML(prettyPrint: Boolean = true): TagConsumer<O> =\r\n appendHTML(prettyPrint, false)\r\n\r\nprivate val escapeMap = mapOf(\r\n '<' to \"<\",\r\n '>' to \">\",\r\n '&' to \"&\",\r\n '\\\"' to \""\"\r\n).let { mappings ->\r\n val maxCode = mappings.keys.map { it.toInt() }.max() ?: -1\r\n\r\n Array(maxCode + 1) { mappings[it.toChar()] }\r\n}\r\n\r\nprivate val letterRangeLowerCase = 'a' .. 'z'\r\nprivate val letterRangeUpperCase = 'A' .. 'Z'\r\nprivate val digitRange = '0' .. '9'\r\n\r\nprivate fun Char._isLetter() = this in letterRangeLowerCase || this in letterRangeUpperCase\r\nprivate fun Char._isDigit() = this in digitRange\r\n\r\nprivate fun String.isValidXmlAttributeName() =\r\n !startsWithXml()\r\n && this.isNotEmpty()\r\n && (this[0]._isLetter() || this[0] == '_')\r\n && this.all { it._isLetter() || it._isDigit() || it in \"._:-\" }\r\n\r\nprivate fun String.startsWithXml() = length >= 3\r\n && (this[0].let { it == 'x' || it == 'X' })\r\n && (this[1].let { it == 'm' || it == 'M' })\r\n && (this[2].let { it == 'l' || it == 'L' })\r\n\r\nprivate fun Appendable.escapeAppend(s : CharSequence) {\r\n var lastIndex = 0\r\n val mappings = escapeMap\r\n val size = mappings.size\r\n\r\n for (idx in 0 .. s.length - 1) {\r\n val ch = s[idx].toInt()\r\n if (ch < 0 || ch >= size) continue\r\n val escape = mappings[ch]\r\n if (escape != null) {\r\n append(s.substring(lastIndex, idx))\r\n append(escape)\r\n lastIndex = idx + 1\r\n }\r\n }\r\n\r\n if (lastIndex < s.length) {\r\n append(s.substring(lastIndex, s.length))\r\n }\r\n}\r\n\r\nprivate fun Appendable.escapeComment(s: CharSequence) {\r\n var start = 0\r\n while (start < s.length) {\r\n val index = s.indexOf(\"--\")\r\n if (index == -1) {\r\n if (start == 0) {\r\n append(s)\r\n } else {\r\n append(s, start, s.length)\r\n }\r\n break\r\n }\r\n\r\n append(s, start, index)\r\n start += 2\r\n }\r\n}","package kotlinx.html.dom\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.consumers.*\r\nimport org.w3c.dom.*\r\nimport org.w3c.dom.events.*\r\n\r\n@Suppress(\"NOTHING_TO_INLINE\")\r\nprivate inline fun HTMLElement.setEvent(name: String, noinline callback : (Event) -> Unit) : Unit {\r\n asDynamic()[name] = callback\r\n}\r\n\r\nclass JSDOMBuilder<out R : HTMLElement>(val document : Document) : TagConsumer<R> {\r\n private val path = arrayListOf<HTMLElement>()\r\n private var lastLeaved : HTMLElement? = null\r\n\r\n override fun onTagStart(tag: Tag) {\r\n val element: HTMLElement = when {\r\n tag.namespace != null -> document.createElementNS(tag.namespace!!, tag.tagName).asDynamic()\r\n else -> document.createElement(tag.tagName) as HTMLElement\r\n }\r\n\r\n tag.attributesEntries.forEach {\r\n element.setAttribute(it.key, it.value)\r\n }\r\n\r\n if (path.isNotEmpty()) {\r\n path.last().appendChild(element)\r\n }\r\n\r\n path.add(element)\r\n }\r\n\r\n override fun onTagAttributeChange(tag: Tag, attribute: String, value: String?) {\r\n when {\r\n path.isEmpty() -> throw IllegalStateException(\"No current tag\")\r\n path.last().tagName.toLowerCase() != tag.tagName.toLowerCase() -> throw IllegalStateException(\"Wrong current tag\")\r\n else -> path.last().let { node ->\r\n if (value == null) {\r\n node.removeAttribute(attribute)\r\n } else {\r\n node.setAttribute(attribute, value)\r\n }\r\n }\r\n }\r\n }\r\n\r\n override fun onTagEvent(tag: Tag, event: String, value: (Event) -> Unit) {\r\n when {\r\n path.isEmpty() -> throw IllegalStateException(\"No current tag\")\r\n path.last().tagName.toLowerCase() != tag.tagName.toLowerCase() -> throw IllegalStateException(\"Wrong current tag\")\r\n else -> path.last().setEvent(event, value)\r\n }\r\n }\r\n\r\n override fun onTagEnd(tag: Tag) {\r\n if (path.isEmpty() || path.last().tagName.toLowerCase() != tag.tagName.toLowerCase()) {\r\n throw IllegalStateException(\"We haven't entered tag ${tag.tagName} but trying to leave\")\r\n }\r\n\r\n lastLeaved = path.removeAt(path.lastIndex)\r\n }\r\n\r\n override fun onTagContent(content: CharSequence) {\r\n if (path.isEmpty()) {\r\n throw IllegalStateException(\"No current DOM node\")\r\n }\r\n\r\n path.last().appendChild(document.createTextNode(content.toString()))\r\n }\r\n\r\n override fun onTagContentEntity(entity: Entities) {\r\n if (path.isEmpty()) {\r\n throw IllegalStateException(\"No current DOM node\")\r\n }\r\n\r\n // stupid hack as browsers doesn't support createEntityReference\r\n val s = document.createElement(\"span\") as HTMLElement\r\n s.innerHTML = entity.text\r\n path.last().appendChild(s.childNodes.asList().filter { it.nodeType == Node.TEXT_NODE }.first())\r\n\r\n // other solution would be\r\n// pathLast().innerHTML += entity.text\r\n }\r\n\r\n override fun onTagContentUnsafe(block: Unsafe.() -> Unit) {\r\n with(DefaultUnsafe()) {\r\n block()\r\n\r\n path.last().innerHTML += toString()\r\n }\r\n }\r\n\r\n\r\n override fun onTagComment(content: CharSequence) {\r\n if (path.isEmpty()) {\r\n throw IllegalStateException(\"No current DOM node\")\r\n }\r\n\r\n path.last().appendChild(document.createComment(content.toString()))\r\n }\r\n\r\n override fun finalize(): R = lastLeaved?.asR() ?: throw IllegalStateException(\"We can't finalize as there was no tags\")\r\n\r\n @Suppress(\"UNCHECKED_CAST\")\r\n private fun HTMLElement.asR(): R = this.asDynamic()\r\n\r\n}\r\n\r\n\r\n fun Document.createTree() : TagConsumer<HTMLElement> = JSDOMBuilder(this)\r\n val Document.create : TagConsumer<HTMLElement>\r\n get() = JSDOMBuilder(this)\r\n\r\nfun Node.append(block: TagConsumer<HTMLElement>.() -> Unit): List<HTMLElement> =\r\n ArrayList<HTMLElement>().let { result ->\r\n ownerDocumentExt.createTree().onFinalize { it, partial ->\r\n if (!partial) {\r\n result.add(it); appendChild(it)\r\n }\r\n }.block()\r\n\r\n result\r\n }\r\n\r\nfun Node.prepend(block: TagConsumer<HTMLElement>.() -> Unit): List<HTMLElement> =\r\n ArrayList<HTMLElement>().let { result ->\r\n ownerDocumentExt.createTree().onFinalize { it, partial ->\r\n if (!partial) {\r\n result.add(it)\r\n insertBefore(it, firstChild)\r\n }\r\n }.block()\r\n\r\n result\r\n }\r\n\r\nval HTMLElement.append: TagConsumer<HTMLElement>\r\n get() = ownerDocumentExt.createTree().onFinalize { element, partial ->\r\n if (!partial) {\r\n this@append.appendChild(element)\r\n }\r\n }\r\n\r\nval HTMLElement.prepend: TagConsumer<HTMLElement>\r\n get() = ownerDocumentExt.createTree().onFinalize { element, partial ->\r\n if (!partial) {\r\n this@prepend.insertBefore(element, this@prepend.firstChild)\r\n }\r\n }\r\n\r\nprivate val Node.ownerDocumentExt: Document\r\n get() = when {\r\n this is Document -> this\r\n else -> ownerDocument ?: throw IllegalStateException(\"Node has no ownerDocument\")\r\n }\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.impl.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\ninterface CommonAttributeGroupFacade : Tag {\r\n}\r\nvar CommonAttributeGroupFacade.enableTheming : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"EnableTheming\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"EnableTheming\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.enableViewState : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"EnableViewState\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"EnableViewState\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.skinID : String\r\n get() = attributeStringString.get(this, \"SkinID\")\r\n set(newValue) {attributeStringString.set(this, \"SkinID\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.visible : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"Visible\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"Visible\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.accessKey : String\r\n get() = attributeStringString.get(this, \"accesskey\")\r\n set(newValue) {attributeStringString.set(this, \"accesskey\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.classes : Set<String>\r\n get() = attributeSetStringStringSet.get(this, \"class\")\r\n set(newValue) {attributeSetStringStringSet.set(this, \"class\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.contentEditable : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"contenteditable\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"contenteditable\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.contextMenu : String\r\n get() = attributeStringString.get(this, \"contextmenu\")\r\n set(newValue) {attributeStringString.set(this, \"contextmenu\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.dataFolderName : String\r\n get() = attributeStringString.get(this, \"data-FolderName\")\r\n set(newValue) {attributeStringString.set(this, \"data-FolderName\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.dataMsgId : String\r\n get() = attributeStringString.get(this, \"data-MsgId\")\r\n set(newValue) {attributeStringString.set(this, \"data-MsgId\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.dir : Dir\r\n get() = attributeDirEnumDirValues.get(this, \"dir\")\r\n set(newValue) {attributeDirEnumDirValues.set(this, \"dir\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.draggable : Draggable\r\n get() = attributeDraggableEnumDraggableValues.get(this, \"draggable\")\r\n set(newValue) {attributeDraggableEnumDraggableValues.set(this, \"draggable\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.hidden : Boolean\r\n get() = attributeBooleanTicker.get(this, \"hidden\")\r\n set(newValue) {attributeBooleanTicker.set(this, \"hidden\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.id : String\r\n get() = attributeStringString.get(this, \"id\")\r\n set(newValue) {attributeStringString.set(this, \"id\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.itemProp : String\r\n get() = attributeStringString.get(this, \"itemprop\")\r\n set(newValue) {attributeStringString.set(this, \"itemprop\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.lang : String\r\n get() = attributeStringString.get(this, \"lang\")\r\n set(newValue) {attributeStringString.set(this, \"lang\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onAbort : String\r\n get() = attributeStringString.get(this, \"onabort\")\r\n set(newValue) {attributeStringString.set(this, \"onabort\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onBlur : String\r\n get() = attributeStringString.get(this, \"onblur\")\r\n set(newValue) {attributeStringString.set(this, \"onblur\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onCanPlay : String\r\n get() = attributeStringString.get(this, \"oncanplay\")\r\n set(newValue) {attributeStringString.set(this, \"oncanplay\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onCanPlayThrough : String\r\n get() = attributeStringString.get(this, \"oncanplaythrough\")\r\n set(newValue) {attributeStringString.set(this, \"oncanplaythrough\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onChange : String\r\n get() = attributeStringString.get(this, \"onchange\")\r\n set(newValue) {attributeStringString.set(this, \"onchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onClick : String\r\n get() = attributeStringString.get(this, \"onclick\")\r\n set(newValue) {attributeStringString.set(this, \"onclick\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onContextMenu : String\r\n get() = attributeStringString.get(this, \"oncontextmenu\")\r\n set(newValue) {attributeStringString.set(this, \"oncontextmenu\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDoubleClick : String\r\n get() = attributeStringString.get(this, \"ondblclick\")\r\n set(newValue) {attributeStringString.set(this, \"ondblclick\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDrag : String\r\n get() = attributeStringString.get(this, \"ondrag\")\r\n set(newValue) {attributeStringString.set(this, \"ondrag\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragEnd : String\r\n get() = attributeStringString.get(this, \"ondragend\")\r\n set(newValue) {attributeStringString.set(this, \"ondragend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragEnter : String\r\n get() = attributeStringString.get(this, \"ondragenter\")\r\n set(newValue) {attributeStringString.set(this, \"ondragenter\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragLeave : String\r\n get() = attributeStringString.get(this, \"ondragleave\")\r\n set(newValue) {attributeStringString.set(this, \"ondragleave\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragOver : String\r\n get() = attributeStringString.get(this, \"ondragover\")\r\n set(newValue) {attributeStringString.set(this, \"ondragover\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragStart : String\r\n get() = attributeStringString.get(this, \"ondragstart\")\r\n set(newValue) {attributeStringString.set(this, \"ondragstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDrop : String\r\n get() = attributeStringString.get(this, \"ondrop\")\r\n set(newValue) {attributeStringString.set(this, \"ondrop\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDurationChange : String\r\n get() = attributeStringString.get(this, \"ondurationchange\")\r\n set(newValue) {attributeStringString.set(this, \"ondurationchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onEmptied : String\r\n get() = attributeStringString.get(this, \"onemptied\")\r\n set(newValue) {attributeStringString.set(this, \"onemptied\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onEnded : String\r\n get() = attributeStringString.get(this, \"onended\")\r\n set(newValue) {attributeStringString.set(this, \"onended\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onError : String\r\n get() = attributeStringString.get(this, \"onerror\")\r\n set(newValue) {attributeStringString.set(this, \"onerror\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocus : String\r\n get() = attributeStringString.get(this, \"onfocus\")\r\n set(newValue) {attributeStringString.set(this, \"onfocus\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocusIn : String\r\n get() = attributeStringString.get(this, \"onfocusin\")\r\n set(newValue) {attributeStringString.set(this, \"onfocusin\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocusOut : String\r\n get() = attributeStringString.get(this, \"onfocusout\")\r\n set(newValue) {attributeStringString.set(this, \"onfocusout\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFormChange : String\r\n get() = attributeStringString.get(this, \"onformchange\")\r\n set(newValue) {attributeStringString.set(this, \"onformchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFormInput : String\r\n get() = attributeStringString.get(this, \"onforminput\")\r\n set(newValue) {attributeStringString.set(this, \"onforminput\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onInput : String\r\n get() = attributeStringString.get(this, \"oninput\")\r\n set(newValue) {attributeStringString.set(this, \"oninput\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onInvalid : String\r\n get() = attributeStringString.get(this, \"oninvalid\")\r\n set(newValue) {attributeStringString.set(this, \"oninvalid\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyDown : String\r\n get() = attributeStringString.get(this, \"onkeydown\")\r\n set(newValue) {attributeStringString.set(this, \"onkeydown\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyPress : String\r\n get() = attributeStringString.get(this, \"onkeypress\")\r\n set(newValue) {attributeStringString.set(this, \"onkeypress\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyUp : String\r\n get() = attributeStringString.get(this, \"onkeyup\")\r\n set(newValue) {attributeStringString.set(this, \"onkeyup\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoad : String\r\n get() = attributeStringString.get(this, \"onload\")\r\n set(newValue) {attributeStringString.set(this, \"onload\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadedData : String\r\n get() = attributeStringString.get(this, \"onloadeddata\")\r\n set(newValue) {attributeStringString.set(this, \"onloadeddata\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadedMetaData : String\r\n get() = attributeStringString.get(this, \"onloadedmetadata\")\r\n set(newValue) {attributeStringString.set(this, \"onloadedmetadata\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadStart : String\r\n get() = attributeStringString.get(this, \"onloadstart\")\r\n set(newValue) {attributeStringString.set(this, \"onloadstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseDown : String\r\n get() = attributeStringString.get(this, \"onmousedown\")\r\n set(newValue) {attributeStringString.set(this, \"onmousedown\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseMove : String\r\n get() = attributeStringString.get(this, \"onmousemove\")\r\n set(newValue) {attributeStringString.set(this, \"onmousemove\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseOut : String\r\n get() = attributeStringString.get(this, \"onmouseout\")\r\n set(newValue) {attributeStringString.set(this, \"onmouseout\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseOver : String\r\n get() = attributeStringString.get(this, \"onmouseover\")\r\n set(newValue) {attributeStringString.set(this, \"onmouseover\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseUp : String\r\n get() = attributeStringString.get(this, \"onmouseup\")\r\n set(newValue) {attributeStringString.set(this, \"onmouseup\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseWheel : String\r\n get() = attributeStringString.get(this, \"onmousewheel\")\r\n set(newValue) {attributeStringString.set(this, \"onmousewheel\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPause : String\r\n get() = attributeStringString.get(this, \"onpause\")\r\n set(newValue) {attributeStringString.set(this, \"onpause\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPlay : String\r\n get() = attributeStringString.get(this, \"onplay\")\r\n set(newValue) {attributeStringString.set(this, \"onplay\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPlaying : String\r\n get() = attributeStringString.get(this, \"onplaying\")\r\n set(newValue) {attributeStringString.set(this, \"onplaying\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onProgress : String\r\n get() = attributeStringString.get(this, \"onprogress\")\r\n set(newValue) {attributeStringString.set(this, \"onprogress\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onRateChange : String\r\n get() = attributeStringString.get(this, \"onratechange\")\r\n set(newValue) {attributeStringString.set(this, \"onratechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onReadyStateChange : String\r\n get() = attributeStringString.get(this, \"onreadystatechange\")\r\n set(newValue) {attributeStringString.set(this, \"onreadystatechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onScroll : String\r\n get() = attributeStringString.get(this, \"onscroll\")\r\n set(newValue) {attributeStringString.set(this, \"onscroll\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSearch : String\r\n get() = attributeStringString.get(this, \"onsearch\")\r\n set(newValue) {attributeStringString.set(this, \"onsearch\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSeeked : String\r\n get() = attributeStringString.get(this, \"onseeked\")\r\n set(newValue) {attributeStringString.set(this, \"onseeked\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSeeking : String\r\n get() = attributeStringString.get(this, \"onseeking\")\r\n set(newValue) {attributeStringString.set(this, \"onseeking\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSelect : String\r\n get() = attributeStringString.get(this, \"onselect\")\r\n set(newValue) {attributeStringString.set(this, \"onselect\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onShow : String\r\n get() = attributeStringString.get(this, \"onshow\")\r\n set(newValue) {attributeStringString.set(this, \"onshow\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onStalled : String\r\n get() = attributeStringString.get(this, \"onstalled\")\r\n set(newValue) {attributeStringString.set(this, \"onstalled\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSubmit : String\r\n get() = attributeStringString.get(this, \"onsubmit\")\r\n set(newValue) {attributeStringString.set(this, \"onsubmit\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSuspend : String\r\n get() = attributeStringString.get(this, \"onsuspend\")\r\n set(newValue) {attributeStringString.set(this, \"onsuspend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTimeUpdate : String\r\n get() = attributeStringString.get(this, \"ontimeupdate\")\r\n set(newValue) {attributeStringString.set(this, \"ontimeupdate\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchCancel : String\r\n get() = attributeStringString.get(this, \"ontouchcancel\")\r\n set(newValue) {attributeStringString.set(this, \"ontouchcancel\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchEnd : String\r\n get() = attributeStringString.get(this, \"ontouchend\")\r\n set(newValue) {attributeStringString.set(this, \"ontouchend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchMove : String\r\n get() = attributeStringString.get(this, \"ontouchmove\")\r\n set(newValue) {attributeStringString.set(this, \"ontouchmove\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchStart : String\r\n get() = attributeStringString.get(this, \"ontouchstart\")\r\n set(newValue) {attributeStringString.set(this, \"ontouchstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onVolumeChange : String\r\n get() = attributeStringString.get(this, \"onvolumechange\")\r\n set(newValue) {attributeStringString.set(this, \"onvolumechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onWaiting : String\r\n get() = attributeStringString.get(this, \"onwaiting\")\r\n set(newValue) {attributeStringString.set(this, \"onwaiting\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onWheel : String\r\n get() = attributeStringString.get(this, \"onwheel\")\r\n set(newValue) {attributeStringString.set(this, \"onwheel\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.role : String\r\n get() = attributeStringString.get(this, \"role\")\r\n set(newValue) {attributeStringString.set(this, \"role\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.runAt : RunAt\r\n get() = attributeRunAtEnumRunAtValues.get(this, \"runat\")\r\n set(newValue) {attributeRunAtEnumRunAtValues.set(this, \"runat\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.spellCheck : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"spellcheck\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"spellcheck\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.style : String\r\n get() = attributeStringString.get(this, \"style\")\r\n set(newValue) {attributeStringString.set(this, \"style\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.subject : String\r\n get() = attributeStringString.get(this, \"subject\")\r\n set(newValue) {attributeStringString.set(this, \"subject\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.tabIndex : String\r\n get() = attributeStringString.get(this, \"tabIndex\")\r\n set(newValue) {attributeStringString.set(this, \"tabIndex\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.title : String\r\n get() = attributeStringString.get(this, \"title\")\r\n set(newValue) {attributeStringString.set(this, \"title\", newValue)}\r\n\r\n\r\ninterface FormServerAttributeGroupFacade : Tag {\r\n}\r\nvar FormServerAttributeGroupFacade.defaultButton : String\r\n get() = attributeStringString.get(this, \"DefaultButton\")\r\n set(newValue) {attributeStringString.set(this, \"DefaultButton\", newValue)}\r\n\r\nvar FormServerAttributeGroupFacade.defaultFocus : String\r\n get() = attributeStringString.get(this, \"DefaultFocus\")\r\n set(newValue) {attributeStringString.set(this, \"DefaultFocus\", newValue)}\r\n\r\nvar FormServerAttributeGroupFacade.submitDisabledControls : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"SubmitDisabledControls\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"SubmitDisabledControls\", newValue)}\r\n\r\n\r\ninterface InputServerAttributeGroupFacade : Tag {\r\n}\r\nvar InputServerAttributeGroupFacade.causesValidation : Boolean\r\n get() = attributeBooleanBoolean.get(this, \"CausesValidation\")\r\n set(newValue) {attributeBooleanBoolean.set(this, \"CausesValidation\", newValue)}\r\n\r\nvar InputServerAttributeGroupFacade.validationGroup : String\r\n get() = attributeStringString.get(this, \"ValidationGroup\")\r\n set(newValue) {attributeStringString.set(this, \"ValidationGroup\", newValue)}\r\n\r\n\r\ninterface SelectServerAttributeGroupFacade : Tag {\r\n}\r\nvar SelectServerAttributeGroupFacade.dataSourceID : String\r\n get() = attributeStringString.get(this, \"DataSourceID\")\r\n set(newValue) {attributeStringString.set(this, \"DataSourceID\", newValue)}\r\n\r\nvar SelectServerAttributeGroupFacade.dataTextField : String\r\n get() = attributeStringString.get(this, \"DataTextField\")\r\n set(newValue) {attributeStringString.set(this, \"DataTextField\", newValue)}\r\n\r\nvar SelectServerAttributeGroupFacade.dataValueField : String\r\n get() = attributeStringString.get(this, \"DataValueField\")\r\n set(newValue) {attributeStringString.set(this, \"DataValueField\", newValue)}\r\n\r\n\r\n","package kotlinx.html.js\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.attributes.*\r\nimport kotlinx.html.dom.*\r\nimport org.w3c.dom.events.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\nvar CommonAttributeGroupFacade.onAbortFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onAbort\")\r\n set(newValue) {consumer.onTagEvent(this, \"onabort\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onBlurFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onBlur\")\r\n set(newValue) {consumer.onTagEvent(this, \"onblur\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onCanPlayFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onCanPlay\")\r\n set(newValue) {consumer.onTagEvent(this, \"oncanplay\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onCanPlayThroughFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onCanPlayThrough\")\r\n set(newValue) {consumer.onTagEvent(this, \"oncanplaythrough\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"onchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onClickFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onClick\")\r\n set(newValue) {consumer.onTagEvent(this, \"onclick\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onContextMenuFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onContextMenu\")\r\n set(newValue) {consumer.onTagEvent(this, \"oncontextmenu\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDoubleClickFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDoubleClick\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondblclick\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDrag\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondrag\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragEndFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDragEnd\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondragend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragEnterFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDragEnter\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondragenter\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragLeaveFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDragLeave\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondragleave\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragOverFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDragOver\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondragover\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDragStartFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDragStart\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondragstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDropFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDrop\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondrop\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onDurationChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onDurationChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"ondurationchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onEmptiedFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onEmptied\")\r\n set(newValue) {consumer.onTagEvent(this, \"onemptied\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onEndedFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onEnded\")\r\n set(newValue) {consumer.onTagEvent(this, \"onended\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onErrorFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onError\")\r\n set(newValue) {consumer.onTagEvent(this, \"onerror\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocusFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onFocus\")\r\n set(newValue) {consumer.onTagEvent(this, \"onfocus\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocusInFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onFocusIn\")\r\n set(newValue) {consumer.onTagEvent(this, \"onfocusin\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFocusOutFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onFocusOut\")\r\n set(newValue) {consumer.onTagEvent(this, \"onfocusout\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFormChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onFormChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"onformchange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onFormInputFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onFormInput\")\r\n set(newValue) {consumer.onTagEvent(this, \"onforminput\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onInputFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onInput\")\r\n set(newValue) {consumer.onTagEvent(this, \"oninput\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onInvalidFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onInvalid\")\r\n set(newValue) {consumer.onTagEvent(this, \"oninvalid\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyDownFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onKeyDown\")\r\n set(newValue) {consumer.onTagEvent(this, \"onkeydown\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyPressFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onKeyPress\")\r\n set(newValue) {consumer.onTagEvent(this, \"onkeypress\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onKeyUpFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onKeyUp\")\r\n set(newValue) {consumer.onTagEvent(this, \"onkeyup\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onLoad\")\r\n set(newValue) {consumer.onTagEvent(this, \"onload\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadedDataFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onLoadedData\")\r\n set(newValue) {consumer.onTagEvent(this, \"onloadeddata\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadedMetaDataFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onLoadedMetaData\")\r\n set(newValue) {consumer.onTagEvent(this, \"onloadedmetadata\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onLoadStartFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onLoadStart\")\r\n set(newValue) {consumer.onTagEvent(this, \"onloadstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseDownFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseDown\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmousedown\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseMoveFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseMove\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmousemove\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseOutFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseOut\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmouseout\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseOverFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseOver\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmouseover\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseUpFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseUp\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmouseup\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onMouseWheelFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onMouseWheel\")\r\n set(newValue) {consumer.onTagEvent(this, \"onmousewheel\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPauseFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onPause\")\r\n set(newValue) {consumer.onTagEvent(this, \"onpause\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPlayFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onPlay\")\r\n set(newValue) {consumer.onTagEvent(this, \"onplay\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onPlayingFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onPlaying\")\r\n set(newValue) {consumer.onTagEvent(this, \"onplaying\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onProgressFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onProgress\")\r\n set(newValue) {consumer.onTagEvent(this, \"onprogress\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onRateChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onRateChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"onratechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onReadyStateChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onReadyStateChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"onreadystatechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onScrollFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onScroll\")\r\n set(newValue) {consumer.onTagEvent(this, \"onscroll\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSearchFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSearch\")\r\n set(newValue) {consumer.onTagEvent(this, \"onsearch\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSeekedFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSeeked\")\r\n set(newValue) {consumer.onTagEvent(this, \"onseeked\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSeekingFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSeeking\")\r\n set(newValue) {consumer.onTagEvent(this, \"onseeking\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSelectFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSelect\")\r\n set(newValue) {consumer.onTagEvent(this, \"onselect\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onShowFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onShow\")\r\n set(newValue) {consumer.onTagEvent(this, \"onshow\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onStalledFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onStalled\")\r\n set(newValue) {consumer.onTagEvent(this, \"onstalled\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSubmitFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSubmit\")\r\n set(newValue) {consumer.onTagEvent(this, \"onsubmit\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onSuspendFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onSuspend\")\r\n set(newValue) {consumer.onTagEvent(this, \"onsuspend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTimeUpdateFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onTimeUpdate\")\r\n set(newValue) {consumer.onTagEvent(this, \"ontimeupdate\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchCancelFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onTouchCancel\")\r\n set(newValue) {consumer.onTagEvent(this, \"ontouchcancel\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchEndFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onTouchEnd\")\r\n set(newValue) {consumer.onTagEvent(this, \"ontouchend\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchMoveFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onTouchMove\")\r\n set(newValue) {consumer.onTagEvent(this, \"ontouchmove\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onTouchStartFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onTouchStart\")\r\n set(newValue) {consumer.onTagEvent(this, \"ontouchstart\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onVolumeChangeFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onVolumeChange\")\r\n set(newValue) {consumer.onTagEvent(this, \"onvolumechange\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onWaitingFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onWaiting\")\r\n set(newValue) {consumer.onTagEvent(this, \"onwaiting\", newValue)}\r\n\r\nvar CommonAttributeGroupFacade.onWheelFunction : (Event) -> Unit\r\n get() = throw UnsupportedOperationException(\"You can't read variable onWheel\")\r\n set(newValue) {consumer.onTagEvent(this, \"onwheel\", newValue)}\r\n\r\n","package kotlinx.html\r\n\r\nimport kotlinx.html.*\r\nimport kotlinx.html.attributes.*\r\n\r\n/*******************************************************************************\r\n DO NOT EDIT\r\n This file was generated by module generate\r\n*******************************************************************************/\r\n\r\ninternal val attributeStringString : Attribute<String> = StringAttribute()\r\n\r\ninternal val attributeSetStringStringSet : Attribute<Set<String>> = StringSetAttribute()\r\n\r\ninternal val attributeBooleanBoolean : Attribute<Boolean> = BooleanAttribute()\r\n\r\ninternal val attributeBooleanBooleanOnOff : Attribute<Boolean> = BooleanAttribute(\"on\", \"off\")\r\n\r\ninternal val attributeBooleanTicker : Attribute<Boolean> = TickerAttribute()\r\n\r\ninternal val attributeButtonFormEncTypeEnumButtonFormEncTypeValues : Attribute<ButtonFormEncType> = EnumAttribute(buttonFormEncTypeValues)\r\n\r\ninternal val attributeButtonFormMethodEnumButtonFormMethodValues : Attribute<ButtonFormMethod> = EnumAttribute(buttonFormMethodValues)\r\n\r\ninternal val attributeButtonTypeEnumButtonTypeValues : Attribute<ButtonType> = EnumAttribute(buttonTypeValues)\r\n\r\ninternal val attributeCommandTypeEnumCommandTypeValues : Attribute<CommandType> = EnumAttribute(commandTypeValues)\r\n\r\ninternal val attributeDirEnumDirValues : Attribute<Dir> = EnumAttribute(dirValues)\r\n\r\ninternal val attributeDraggableEnumDraggableValues : Attribute<Draggable> = EnumAttribute(draggableValues)\r\n\r\ninternal val attributeFormEncTypeEnumFormEncTypeValues : Attribute<FormEncType> = EnumAttribute(formEncTypeValues)\r\n\r\ninternal val attributeFormMethodEnumFormMethodValues : Attribute<FormMethod> = EnumAttribute(formMethodValues)\r\n\r\ninternal val attributeIframeSandboxEnumIframeSandboxValues : Attribute<IframeSandbox> = EnumAttribute(iframeSandboxValues)\r\n\r\ninternal val attributeInputFormEncTypeEnumInputFormEncTypeValues : Attribute<InputFormEncType> = EnumAttribute(inputFormEncTypeValues)\r\n\r\ninternal val attributeInputFormMethodEnumInputFormMethodValues : Attribute<InputFormMethod> = EnumAttribute(inputFormMethodValues)\r\n\r\ninternal val attributeInputTypeEnumInputTypeValues : Attribute<InputType> = EnumAttribute(inputTypeValues)\r\n\r\ninternal val attributeKeyGenKeyTypeEnumKeyGenKeyTypeValues : Attribute<KeyGenKeyType> = EnumAttribute(keyGenKeyTypeValues)\r\n\r\ninternal val attributeRunAtEnumRunAtValues : Attribute<RunAt> = EnumAttribute(runAtValues)\r\n\r\ninternal val attributeTextAreaWrapEnumTextAreaWrapValues : Attribute<TextAreaWrap> = EnumAttribute(textAreaWrapValues)\r\n\r\ninternal val attributeThScopeEnumThScopeValues : Attribute<ThScope> = EnumAttribute(thScopeValues)\r\n\r\n","/*\n * __ ___\n * _____/ /___ __/ (_)____\n * / ___/ __/ / / / / / ___/\n * (__ ) /_/ /_/ / / (__ )\n * /____/\\__/\\__, /_/_/____/\n * /____/\n *\n * light - weight css preprocessor @licence MIT\n */\n(function (factory) {/* eslint-disable */\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory(null)) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory(null)) :\n\t\t\t(window['stylis'] = factory(null))\n}(/** @param {*=} options */function factory (options) {/* eslint-disable */\n\n\t'use strict'\n\n\t/**\n\t * Notes\n\t *\n\t * The ['<method name>'] pattern is used to support closure compiler\n\t * the jsdoc signatures are also used to the same effect\n\t *\n\t * ----\n\t *\n\t * int + int + int === n4 [faster]\n\t *\n\t * vs\n\t *\n\t * int === n1 && int === n2 && int === n3\n\t *\n\t * ----\n\t *\n\t * switch (int) { case ints...} [faster]\n\t *\n\t * vs\n\t *\n\t * if (int == 1 && int === 2 ...)\n\t *\n\t * ----\n\t *\n\t * The (first*n1 + second*n2 + third*n3) format used in the property parser\n\t * is a simple way to hash the sequence of characters\n\t * taking into account the index they occur in\n\t * since any number of 3 character sequences could produce duplicates.\n\t *\n\t * On the other hand sequences that are directly tied to the index of the character\n\t * resolve a far more accurate measure, it's also faster\n\t * to evaluate one condition in a switch statement\n\t * than three in an if statement regardless of the added math.\n\t *\n\t * This allows the vendor prefixer to be both small and fast.\n\t */\n\n\tvar nullptn = /^\\0+/g /* matches leading null characters */\n\tvar formatptn = /[\\0\\r\\f]/g /* matches new line, null and formfeed characters */\n\tvar colonptn = /: */g /* splits animation rules */\n\tvar cursorptn = /zoo|gra/ /* assert cursor varient */\n\tvar transformptn = /([,: ])(transform)/g /* vendor prefix transform, older webkit */\n\tvar animationptn = /,+\\s*(?![^(]*[)])/g /* splits multiple shorthand notation animations */\n\tvar propertiesptn = / +\\s*(?![^(]*[)])/g /* animation properties */\n\tvar elementptn = / *[\\0] */g /* selector elements */\n\tvar selectorptn = /,\\r+?/g /* splits selectors */\n\tvar andptn = /([\\t\\r\\n ])*\\f?&/g /* match & */\n\tvar escapeptn = /:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g /* matches :global(.*) */\n\tvar invalidptn = /\\W+/g /* removes invalid characters from keyframes */\n\tvar keyframeptn = /@(k\\w+)\\s*(\\S*)\\s*/ /* matches @keyframes $1 */\n\tvar plcholdrptn = /::(place)/g /* match ::placeholder varient */\n\tvar readonlyptn = /:(read-only)/g /* match :read-only varient */\n\tvar beforeptn = /\\s+(?=[{\\];=:>])/g /* matches \\s before ] ; = : */\n\tvar afterptn = /([[}=:>])\\s+/g /* matches \\s after characters [ } = : */\n\tvar tailptn = /(\\{[^{]+?);(?=\\})/g /* matches tail semi-colons ;} */\n\tvar whiteptn = /\\s{2,}/g /* matches repeating whitespace */\n\tvar pseudoptn = /([^\\(])(:+) */g /* pseudo element */\n\tvar writingptn = /[svh]\\w+-[tblr]{2}/ /* match writing mode property values */\n\tvar gradientptn = /([\\w-]+t\\()/g /* match *gradient property */\n\tvar supportsptn = /\\(\\s*(.*)\\s*\\)/g /* match supports (groups) */\n\tvar propertyptn = /([\\s\\S]*?);/g /* match properties leading semicolon */\n\tvar selfptn = /-self|flex-/g /* match flex- and -self in align-self: flex-*; */\n\tvar pseudofmt = /[^]*?(:[rp][el]a[\\w-]+)[^]*/ /* extrats :readonly or :placholder from selector */\n\tvar trimptn = /[ \\t]+$/ /* match tail whitspace */\n\tvar dimensionptn = /stretch|:\\s*\\w+\\-(?:conte|avail)/ /* match max/min/fit-content, fill-available */\n\tvar imgsrcptn = /([^-])(image-set\\()/\n\n\t/* vendors */\n\tvar webkit = '-webkit-'\n\tvar moz = '-moz-'\n\tvar ms = '-ms-'\n\n\t/* character codes */\n\tvar SEMICOLON = 59 /* ; */\n\tvar CLOSEBRACES = 125 /* } */\n\tvar OPENBRACES = 123 /* { */\n\tvar OPENPARENTHESES = 40 /* ( */\n\tvar CLOSEPARENTHESES = 41 /* ) */\n\tvar OPENBRACKET = 91 /* [ */\n\tvar CLOSEBRACKET = 93 /* ] */\n\tvar NEWLINE = 10 /* \\n */\n\tvar CARRIAGE = 13 /* \\r */\n\tvar TAB = 9 /* \\t */\n\tvar AT = 64 /* @ */\n\tvar SPACE = 32 /* */\n\tvar AND = 38 /* & */\n\tvar DASH = 45 /* - */\n\tvar UNDERSCORE = 95 /* _ */\n\tvar STAR = 42 /* * */\n\tvar COMMA = 44 /* , */\n\tvar COLON = 58 /* : */\n\tvar SINGLEQUOTE = 39 /* ' */\n\tvar DOUBLEQUOTE = 34 /* \" */\n\tvar FOWARDSLASH = 47 /* / */\n\tvar GREATERTHAN = 62 /* > */\n\tvar PLUS = 43 /* + */\n\tvar TILDE = 126 /* ~ */\n\tvar NULL = 0 /* \\0 */\n\tvar FORMFEED = 12 /* \\f */\n\tvar VERTICALTAB = 11 /* \\v */\n\n\t/* special identifiers */\n\tvar KEYFRAME = 107 /* k */\n\tvar MEDIA = 109 /* m */\n\tvar SUPPORTS = 115 /* s */\n\tvar PLACEHOLDER = 112 /* p */\n\tvar READONLY = 111 /* o */\n\tvar IMPORT = 105 /* <at>i */\n\tvar CHARSET = 99 /* <at>c */\n\tvar DOCUMENT = 100 /* <at>d */\n\tvar PAGE = 112 /* <at>p */\n\n\tvar column = 1 /* current column */\n\tvar line = 1 /* current line numebr */\n\tvar pattern = 0 /* :pattern */\n\n\tvar cascade = 1 /* #id h1 h2 vs h1#id h2#id */\n\tvar prefix = 1 /* vendor prefix */\n\tvar escape = 1 /* escape :global() pattern */\n\tvar compress = 0 /* compress output */\n\tvar semicolon = 0 /* no/semicolon option */\n\tvar preserve = 0 /* preserve empty selectors */\n\n\t/* empty reference */\n\tvar array = []\n\n\t/* plugins */\n\tvar plugins = []\n\tvar plugged = 0\n\tvar should = null\n\n\t/* plugin context */\n\tvar POSTS = -2\n\tvar PREPS = -1\n\tvar UNKWN = 0\n\tvar PROPS = 1\n\tvar BLCKS = 2\n\tvar ATRUL = 3\n\n\t/* plugin newline context */\n\tvar unkwn = 0\n\n\t/* keyframe animation */\n\tvar keyed = 1\n\tvar key = ''\n\n\t/* selector namespace */\n\tvar nscopealt = ''\n\tvar nscope = ''\n\n\t/**\n\t * Compile\n\t *\n\t * @param {Array<string>} parent\n\t * @param {Array<string>} current\n\t * @param {string} body\n\t * @param {number} id\n\t * @param {number} depth\n\t * @return {string}\n\t */\n\tfunction compile (parent, current, body, id, depth) {\n\t\tvar bracket = 0 /* brackets [] */\n\t\tvar comment = 0 /* comments /* // or /* */\n\t\tvar parentheses = 0 /* functions () */\n\t\tvar quote = 0 /* quotes '', \"\" */\n\n\t\tvar first = 0 /* first character code */\n\t\tvar second = 0 /* second character code */\n\t\tvar code = 0 /* current character code */\n\t\tvar tail = 0 /* previous character code */\n\t\tvar trail = 0 /* character before previous code */\n\t\tvar peak = 0 /* previous non-whitespace code */\n\n\t\tvar counter = 0 /* count sequence termination */\n\t\tvar context = 0 /* track current context */\n\t\tvar atrule = 0 /* track @at-rule context */\n\t\tvar pseudo = 0 /* track pseudo token index */\n\t\tvar caret = 0 /* current character index */\n\t\tvar format = 0 /* control character formating context */\n\t\tvar insert = 0 /* auto semicolon insertion */\n\t\tvar invert = 0 /* inverted selector pattern */\n\t\tvar length = 0 /* generic length address */\n\t\tvar eof = body.length /* end of file(length) */\n\t\tvar eol = eof - 1 /* end of file(characters) */\n\n\t\tvar char = '' /* current character */\n\t\tvar chars = '' /* current buffer of characters */\n\t\tvar child = '' /* next buffer of characters */\n\t\tvar out = '' /* compiled body */\n\t\tvar children = '' /* compiled children */\n\t\tvar flat = '' /* compiled leafs */\n\t\tvar selector /* generic selector address */\n\t\tvar result /* generic address */\n\n\t\t// ...build body\n\t\twhile (caret < eof) {\n\t\t\tcode = body.charCodeAt(caret)\n\n\t\t\t// eof varient\n\t\t\tif (caret === eol) {\n\t\t\t\t// last character + noop context, add synthetic padding for noop context to terminate\n\t\t\t\tif (comment + quote + parentheses + bracket !== 0) {\n\t\t\t\t\tif (comment !== 0) {\n\t\t\t\t\t\tcode = comment === FOWARDSLASH ? NEWLINE : FOWARDSLASH\n\t\t\t\t\t}\n\n\t\t\t\t\tquote = parentheses = bracket = 0\n\t\t\t\t\teof++\n\t\t\t\t\teol++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t// eof varient\n\t\t\t\tif (caret === eol) {\n\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chars.trim().length > 0) {\n\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchars += body.charAt(caret)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcode = SEMICOLON\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// auto semicolon insertion\n\t\t\t\tif (insert === 1) {\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t// false flags\n\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\tcase OPENPARENTHESES:\n\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// valid\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\tfirst = code\n\t\t\t\t\t\t\tcaret--\n\t\t\t\t\t\t\tcode = SEMICOLON\n\n\t\t\t\t\t\t\twhile (length < eof) {\n\t\t\t\t\t\t\t\tswitch (body.charCodeAt(length++)) {\n\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// token varient\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\tchars = chars.trim()\n\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\tcounter = 1\n\t\t\t\t\t\tlength = ++caret\n\n\t\t\t\t\t\twhile (caret < eof) {\n\t\t\t\t\t\t\tswitch (code = body.charCodeAt(caret)) {\n\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\tcounter++\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\t\tcounter--\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\tswitch (second = body.charCodeAt(caret + 1)) {\n\t\t\t\t\t\t\t\t\t\t// /*, //\n\t\t\t\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\t\t\tcaret = delimited(second, caret, eol, body)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"[\" === 91 & \"]\" === 93 hence forth 91 + 1 + 1 === 93\n\t\t\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"(\" === 40 & \")\" === 41 hence forth 40 + 1 === 41\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// quote tail delimiter is identical to the head delimiter hence noop,\n\t\t\t\t\t\t\t\t// fallthrough clauses have been shifted to the correct tail delimiter\n\t\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\t\t\twhile (caret++ < eol) {\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(caret) === code) {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (counter === 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcaret++\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchild = body.substring(length, caret)\n\n\t\t\t\t\t\tif (first === NULL) {\n\t\t\t\t\t\t\tfirst = (chars = chars.replace(nullptn, '').trim()).charCodeAt(0)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t// @at-rule\n\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\tcase SUPPORTS:\n\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\tselector = current\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tselector = array\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tchild = compile(current, selector, child, second, depth+1)\n\t\t\t\t\t\t\t\tlength = child.length\n\n\t\t\t\t\t\t\t\t// preserve empty @at-rule\n\t\t\t\t\t\t\t\tif (preserve > 0 && length === 0) {\n\t\t\t\t\t\t\t\t\tlength = chars.length\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// execute plugins, @at-rule context\n\t\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\t\tselector = select(array, chars, invert)\n\t\t\t\t\t\t\t\t\tresult = proxy(ATRUL, child, selector, current, line, column, length, second, depth, id)\n\t\t\t\t\t\t\t\t\tchars = selector.join('')\n\n\t\t\t\t\t\t\t\t\tif (result !== void 0) {\n\t\t\t\t\t\t\t\t\t\tif ((length = (child = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\t\tsecond = 0\n\t\t\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (length > 0) {\n\t\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\t\tcase SUPPORTS: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(supportsptn, supports)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase KEYFRAME: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(keyframeptn, '$1 $2' + (keyed > 0 ? key : ''))\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\n\t\t\t\t\t\t\t\t\t\t\tif (prefix === 1 || (prefix === 2 && vendor('@'+child, 3))) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + webkit + child + '@' + child\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + child\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + child\n\n\t\t\t\t\t\t\t\t\t\t\tif (id === PAGE) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = (out += child, '')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// selector\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchild = compile(current, select(current, chars, invert), child, id, depth+1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildren += child\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tatrule = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\tchars = (format > 0 ? chars.replace(formatptn, '') : chars).trim()\n\n\t\t\t\t\t\tif ((length = chars.length) > 1) {\n\t\t\t\t\t\t\t// monkey-patch missing colon\n\t\t\t\t\t\t\tif (pseudo === 0) {\n\t\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\n\t\t\t\t\t\t\t\t// first character is a letter or dash, buffer has a space character\n\t\t\t\t\t\t\t\tif ((first === DASH || first > 96 && first < 123)) {\n\t\t\t\t\t\t\t\t\tlength = (chars = chars.replace(' ', ':')).length\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// execute plugins, property context\n\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\tif ((result = proxy(PROPS, chars, current, parent, line, column, out.length, id, depth, id)) !== void 0) {\n\t\t\t\t\t\t\t\t\tif ((length = (chars = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\tchars = '\\0\\0'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\t\tif (second === IMPORT || second === CHARSET) {\n\t\t\t\t\t\t\t\t\t\tflat += chars + body.charAt(caret)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\tif (chars.charCodeAt(length-1) === COLON) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tout += property(chars, first, second, chars.charCodeAt(2))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// parse characters\n\t\t\tswitch (code) {\n\t\t\t\tcase CARRIAGE:\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t// auto insert semicolon\n\t\t\t\t\tif (comment + quote + parentheses + bracket + semicolon === 0) {\n\t\t\t\t\t\t// valid non-whitespace characters that\n\t\t\t\t\t\t// may precede a newline\n\t\t\t\t\t\tswitch (peak) {\n\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\tcase AT:\n\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\tcase FOWARDSLASH:\n\t\t\t\t\t\t\tcase DASH:\n\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t// current buffer has a colon\n\t\t\t\t\t\t\t\tif (pseudo > 0) {\n\t\t\t\t\t\t\t\t\tinsert = 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// terminate line comment\n\t\t\t\t\tif (comment === FOWARDSLASH) {\n\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t} else if (cascade + context === 0 && id !== KEYFRAME && chars.length > 0) {\n\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\tchars += '\\0'\n\t\t\t\t\t}\n\n\t\t\t\t\t// execute plugins, newline context\n\t\t\t\t\tif (plugged * unkwn > 0) {\n\t\t\t\t\t\tproxy(UNKWN, chars, current, parent, line, column, out.length, id, depth, id)\n\t\t\t\t\t}\n\n\t\t\t\t\t// next line, reset column position\n\t\t\t\t\tcolumn = 1\n\t\t\t\t\tline++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase SEMICOLON:\n\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t\t\tcolumn++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// increment column position\n\t\t\t\t\tcolumn++\n\n\t\t\t\t\t// current character\n\t\t\t\t\tchar = body.charAt(caret)\n\n\t\t\t\t\t// remove comments, escape functions, strings, attributes and prepare selectors\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tif (quote + bracket + comment === 0) {\n\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tif (code !== SPACE) {\n\t\t\t\t\t\t\t\t\t\t\tchar = ' '\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// escape breaking control characters\n\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\tchar = '\\\\0'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase FORMFEED: {\n\t\t\t\t\t\t\tchar = '\\\\f'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase VERTICALTAB: {\n\t\t\t\t\t\t\tchar = '\\\\v'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// &\n\t\t\t\t\t\tcase AND: {\n\t\t\t\t\t\t\t// inverted selector pattern i.e html &\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0 && cascade > 0) {\n\t\t\t\t\t\t\t\tinvert = 1\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar = '\\f' + char\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ::p<l>aceholder, l\n\t\t\t\t\t\t// :read-on<l>y, l\n\t\t\t\t\t\tcase 108: {\n\t\t\t\t\t\t\tif (quote + comment + bracket + pattern === 0 && pseudo > 0) {\n\t\t\t\t\t\t\t\tswitch (caret - pseudo) {\n\t\t\t\t\t\t\t\t\t// ::placeholder\n\t\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\t\tif (tail === PLACEHOLDER && body.charCodeAt(caret-3) === COLON) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = tail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// :read-only\n\t\t\t\t\t\t\t\t\tcase 8: {\n\t\t\t\t\t\t\t\t\t\tif (trail === READONLY) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = trail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// :<pattern>\n\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tpseudo = caret\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectors\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket === 0) {\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar += '\\r'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// quotes\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t\t\tquote = quote === code ? 0 : (quote === 0 ? code : quote)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// attributes\n\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase CLOSEBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// functions\n\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tparentheses--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\tswitch (tail*2 + trail*3) {\n\t\t\t\t\t\t\t\t\t\t// :matches\n\t\t\t\t\t\t\t\t\t\tcase 533: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// :global, :not, :nth-child etc...\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tcounter = 0\n\t\t\t\t\t\t\t\t\t\t\tcontext = 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tparentheses++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket + pseudo + atrule === 0) {\n\t\t\t\t\t\t\t\tatrule = 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// block/line comments\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\tif (quote + bracket + parentheses > 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch (comment) {\n\t\t\t\t\t\t\t\t// initialize line/block comment context\n\t\t\t\t\t\t\t\tcase 0: {\n\t\t\t\t\t\t\t\t\tswitch (code*2 + body.charCodeAt(caret+1)*3) {\n\t\t\t\t\t\t\t\t\t\t// //\n\t\t\t\t\t\t\t\t\t\tcase 235: {\n\t\t\t\t\t\t\t\t\t\t\tcomment = FOWARDSLASH\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// /*\n\t\t\t\t\t\t\t\t\t\tcase 220: {\n\t\t\t\t\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\t\t\t\t\tcomment = STAR\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// end block comment context\n\t\t\t\t\t\t\t\tcase STAR: {\n\t\t\t\t\t\t\t\t\tif (code === FOWARDSLASH && tail === STAR && length + 2 !== caret) {\n\t\t\t\t\t\t\t\t\t\t// /*<!> ... */, !\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(length+2) === 33) {\n\t\t\t\t\t\t\t\t\t\t\tout += body.substring(length, caret+1)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ignore comment blocks\n\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t// aggressive isolation mode, divide each individual selector\n\t\t\t\t\t\t// including selectors in :not function but excluding selectors in :global function\n\t\t\t\t\t\tif (cascade + quote + bracket + atrule === 0 && id !== KEYFRAME && code !== SEMICOLON) {\n\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t// outside of an isolated context i.e nth-child(<...>)\n\t\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = char + '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = '\\0' + char + (code === COMMA ? '' : '\\0')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// within an isolated context, sleep untill it's terminated\n\t\t\t\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\t// :globa<l>(\n\t\t\t\t\t\t\t\t\t\t\t\tif (pseudo + 7 === caret && tail === 108) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext = ++counter\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\tif ((context = --counter) === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\tcase NULL:\n\t\t\t\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\t\tcase FORMFEED:\n\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t// ignore in isolated contexts\n\t\t\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// concat buffer of characters\n\t\t\t\t\t\tchars += char\n\n\t\t\t\t\t\t// previous non-whitespace character code\n\t\t\t\t\t\tif (code !== SPACE && code !== TAB) {\n\t\t\t\t\t\t\tpeak = code\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tail character codes\n\t\t\ttrail = tail\n\t\t\ttail = code\n\n\t\t\t// visit every character\n\t\t\tcaret++\n\t\t}\n\n\t\tlength = out.length\n\n\t\t// preserve empty selector\n \t\tif (preserve > 0) {\n \t\t\tif (length === 0 && children.length === 0 && (current[0].length === 0) === false) {\n \t\t\t\tif (id !== MEDIA || (current.length === 1 && (cascade > 0 ? nscopealt : nscope) === current[0])) {\n\t\t\t\t\tlength = current.join(',').length + 2\n \t\t\t\t}\n \t\t\t}\n\t\t}\n\n\t\tif (length > 0) {\n\t\t\t// cascade isolation mode?\n\t\t\tselector = cascade === 0 && id !== KEYFRAME ? isolate(current) : current\n\n\t\t\t// execute plugins, block context\n\t\t\tif (plugged > 0) {\n\t\t\t\tresult = proxy(BLCKS, out, selector, parent, line, column, length, id, depth, id)\n\n\t\t\t\tif (result !== void 0 && (out = result).length === 0) {\n\t\t\t\t\treturn flat + out + children\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout = selector.join(',') + '{' + out + '}'\n\n\t\t\tif (prefix*pattern !== 0) {\n\t\t\t\tif (prefix === 2 && !vendor(out, 2))\n\t\t\t\t\tpattern = 0\n\n\t\t\t\tswitch (pattern) {\n\t\t\t\t\t// ::read-only\n\t\t\t\t\tcase READONLY: {\n\t\t\t\t\t\tout = out.replace(readonlyptn, ':'+moz+'$1')+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// ::placeholder\n\t\t\t\t\tcase PLACEHOLDER: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + webkit + 'input-$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + moz + '$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, ':' + ms + 'input-$1') + out\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpattern = 0\n\t\t\t}\n\t\t}\n\n\t\treturn flat + out + children\n\t}\n\n\t/**\n\t * Select\n\t *\n\t * @param {Array<string>} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @return {Array<string>}\n\t */\n\tfunction select (parent, current, invert) {\n\t\tvar selectors = current.trim().split(selectorptn)\n\t\tvar out = selectors\n\n\t\tvar length = selectors.length\n\t\tvar l = parent.length\n\n\t\tswitch (l) {\n\t\t\t// 0-1 parent selectors\n\t\t\tcase 0:\n\t\t\tcase 1: {\n\t\t\t\tfor (var i = 0, selector = l === 0 ? '' : parent[0] + ' '; i < length; ++i) {\n\t\t\t\t\tout[i] = scope(selector, out[i], invert, l).trim()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// >2 parent selectors, nested\n\t\t\tdefault: {\n\t\t\t\tfor (var i = 0, j = 0, out = []; i < length; ++i) {\n\t\t\t\t\tfor (var k = 0; k < l; ++k) {\n\t\t\t\t\t\tout[j++] = scope(parent[k] + ' ', selectors[i], invert, l).trim()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Scope\n\t *\n\t * @param {string} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @param {number} level\n\t * @return {string}\n\t */\n\tfunction scope (parent, current, invert, level) {\n\t\tvar selector = current\n\t\tvar code = selector.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (selector = selector.trim()).charCodeAt(0)\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// &\n\t\t\tcase AND: {\n\t\t\t\tswitch (cascade + level) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\tcase 1: {\n\t\t\t\t\t\tif (parent.trim().length === 0) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// :\n\t\t\tcase COLON: {\n\t\t\t\tswitch (selector.charCodeAt(1)) {\n\t\t\t\t\t// g in :global\n\t\t\t\t\tcase 103: {\n\t\t\t\t\t\tif (escape > 0 && cascade > 0) {\n\t\t\t\t\t\t\treturn selector.replace(escapeptn, '$1').replace(andptn, '$1'+nscope)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// :hover\n\t\t\t\t\t\treturn parent.trim() + selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// html &\n\t\t\t\tif (invert*cascade > 0 && selector.indexOf('\\f') > 0) {\n\t\t\t\t\treturn selector.replace(andptn, (parent.charCodeAt(0) === COLON ? '' : '$1')+parent.trim())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn parent + selector\n\t}\n\n\t/**\n\t * Property\n\t *\n\t * @param {string} input\n\t * @param {number} first\n\t * @param {number} second\n\t * @param {number} third\n\t * @return {string}\n\t */\n\tfunction property (input, first, second, third) {\n\t\tvar index = 0\n\t\tvar out = input + ';'\n\t\tvar hash = (first*2) + (second*3) + (third*4)\n\t\tvar cache\n\n\t\t// animation: a, n, i characters\n\t\tif (hash === 944) {\n\t\t\treturn animation(out)\n\t\t} else if (prefix === 0 || (prefix === 2 && !vendor(out, 1))) {\n\t\t\treturn out\n\t\t}\n\n\t\t// vendor prefix\n\t\tswitch (hash) {\n\t\t\t// text-decoration/text-size-adjust/text-shadow/text-align/text-transform: t, e, x\n\t\t\tcase 1015: {\n\t\t\t\t// text-shadow/text-align/text-transform, a\n\t\t\t\treturn out.charCodeAt(10) === 97 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// filter/fill f, i, l\n\t\t\tcase 951: {\n\t\t\t\t// filter, t\n\t\t\t\treturn out.charCodeAt(3) === 116 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// color/column, c, o, l\n\t\t\tcase 963: {\n\t\t\t\t// column, n\n\t\t\t\treturn out.charCodeAt(5) === 110 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// box-decoration-break, b, o, x\n\t\t\tcase 1009: {\n\t\t\t\tif (out.charCodeAt(4) !== 100) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// mask, m, a, s\n\t\t\t// clip-path, c, l, i\n\t\t\tcase 969:\n\t\t\tcase 942: {\n\t\t\t\treturn webkit + out + out\n\t\t\t}\n\t\t\t// appearance: a, p, p\n\t\t\tcase 978: {\n\t\t\t\treturn webkit + out + moz + out + out\n\t\t\t}\n\t\t\t// hyphens: h, y, p\n\t\t\t// user-select: u, s, e\n\t\t\tcase 1019:\n\t\t\tcase 983: {\n\t\t\t\treturn webkit + out + moz + out + ms + out + out\n\t\t\t}\n\t\t\t// background/backface-visibility, b, a, c\n\t\t\tcase 883: {\n\t\t\t\t// backface-visibility, -\n\t\t\t\tif (out.charCodeAt(8) === DASH) {\n\t\t\t\t\treturn webkit + out + out\n\t\t\t\t}\n\n\t\t\t\t// image-set(...)\n\t\t\t\tif (out.indexOf('image-set(', 11) > 0) {\n\t\t\t\t\treturn out.replace(imgsrcptn, '$1'+webkit+'$2') + out\n\t\t\t\t}\n\n\t\t\t\treturn out\n\t\t\t}\n\t\t\t// flex: f, l, e\n\t\t\tcase 932: {\n\t\t\t\tif (out.charCodeAt(4) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(5)) {\n\t\t\t\t\t\t// flex-grow, g\n\t\t\t\t\t\tcase 103: {\n\t\t\t\t\t\t\treturn webkit + 'box-' + out.replace('-grow', '') + webkit + out + ms + out.replace('grow', 'positive') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-shrink, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('shrink', 'negative') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-basis, b\n\t\t\t\t\t\tcase 98: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('basis', 'preferred-size') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + out + out\n\t\t\t}\n\t\t\t// order: o, r, d\n\t\t\tcase 964: {\n\t\t\t\treturn webkit + out + ms + 'flex' + '-' + out + out\n\t\t\t}\n\t\t\t// justify-items/justify-content, j, u, s\n\t\t\tcase 1023: {\n\t\t\t\t// justify-content, c\n\t\t\t\tif (out.charCodeAt(8) !== 99) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcache = out.substring(out.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify')\n\t\t\t\treturn webkit + 'box-pack' + cache + webkit + out + ms + 'flex-pack' + cache + out\n\t\t\t}\n\t\t\t// cursor, c, u, r\n\t\t\tcase 1005: {\n\t\t\t\treturn cursorptn.test(out) ? out.replace(colonptn, ':' + webkit) + out.replace(colonptn, ':' + moz) + out : out\n\t\t\t}\n\t\t\t// writing-mode, w, r, i\n\t\t\tcase 1000: {\n\t\t\t\tcache = out.substring(13).trim()\n\t\t\t\tindex = cache.indexOf('-') + 1\n\n\t\t\t\tswitch (cache.charCodeAt(0)+cache.charCodeAt(index)) {\n\t\t\t\t\t// vertical-lr\n\t\t\t\t\tcase 226: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// vertical-rl\n\t\t\t\t\tcase 232: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb-rl')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// horizontal-tb\n\t\t\t\t\tcase 220: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'lr')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn out\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + cache + out\n\t\t\t}\n\t\t\t// position: sticky\n\t\t\tcase 1017: {\n\t\t\t\tif (out.indexOf('sticky', 9) === -1) {\n\t\t\t\t\treturn out\n\t\t\t\t}\n\t\t\t}\n\t\t\t// display(flex/inline-flex/inline-box): d, i, s\n\t\t\tcase 975: {\n\t\t\t\tindex = (out = input).length - 10\n\t\t\t\tcache = (out.charCodeAt(index) === 33 ? out.substring(0, index) : out).substring(input.indexOf(':', 7) + 1).trim()\n\n\t\t\t\tswitch (hash = cache.charCodeAt(0) + (cache.charCodeAt(7)|0)) {\n\t\t\t\t\t// inline-\n\t\t\t\t\tcase 203: {\n\t\t\t\t\t\t// inline-box\n\t\t\t\t\t\tif (cache.charCodeAt(8) < 111) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// inline-box/sticky\n\t\t\t\t\tcase 115: {\n\t\t\t\t\t\tout = out.replace(cache, webkit+cache)+';'+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// inline-flex\n\t\t\t\t\t// flex\n\t\t\t\t\tcase 207:\n\t\t\t\t\tcase 102: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(cache, webkit+(hash > 102 ? 'inline-' : '')+'box')+';'+\n\t\t\t\t\t\t\tout.replace(cache, webkit+cache)+';'+\n\t\t\t\t\t\t\tout.replace(cache, ms+cache+'box')+';'+\n\t\t\t\t\t\t\tout\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out + ';'\n\t\t\t}\n\t\t\t// align-items, align-center, align-self: a, l, i, -\n\t\t\tcase 938: {\n\t\t\t\tif (out.charCodeAt(5) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(6)) {\n\t\t\t\t\t\t// align-items, i\n\t\t\t\t\t\tcase 105: {\n\t\t\t\t\t\t\tcache = out.replace('-items', '')\n\t\t\t\t\t\t\treturn webkit + out + webkit + 'box-' + cache + ms + 'flex-' + cache + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-self, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-item-' + out.replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-content\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-line-pack' + out.replace('align-content', '').replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// min/max\n\t\t\tcase 973:\n\t\t\tcase 989: {\n\t\t\t\t// min-/max- height/width/block-size/inline-size\n\t\t\t\tif (out.charCodeAt(3) !== DASH || out.charCodeAt(4) === 122) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// height/width: min-content / width: max-content\n\t\t\tcase 931:\n\t\t\tcase 953: {\n\t\t\t\tif (dimensionptn.test(input) === true) {\n\t\t\t\t\t// stretch\n\t\t\t\t\tif ((cache = input.substring(input.indexOf(':') + 1)).charCodeAt(0) === 115)\n\t\t\t\t\t\treturn property(input.replace('stretch', 'fill-available'), first, second, third).replace(':fill-available', ':stretch')\n\t\t\t\t\telse\n\t\t\t\t\t\treturn out.replace(cache, webkit + cache) + out.replace(cache, moz + cache.replace('fill-', '')) + out\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// transform, transition: t, r, a\n\t\t\tcase 962: {\n\t\t\t\tout = webkit + out + (out.charCodeAt(5) === 102 ? ms + out : '') + out\n\n\t\t\t\t// transitions\n\t\t\t\tif (second + third === 211 && out.charCodeAt(13) === 105 && out.indexOf('transform', 10) > 0) {\n\t\t\t\t\treturn out.substring(0, out.indexOf(';', 27) + 1).replace(transformptn, '$1' + webkit + '$2') + out\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Vendor\n\t *\n\t * @param {string} content\n\t * @param {number} context\n\t * @return {boolean}\n\t */\n\tfunction vendor (content, context) {\n\t\tvar index = content.indexOf(context === 1 ? ':' : '{')\n\t\tvar key = content.substring(0, context !== 3 ? index : 10)\n\t\tvar value = content.substring(index + 1, content.length - 1)\n\n\t\treturn should(context !== 2 ? key : key.replace(pseudofmt, '$1'), value, context)\n\t}\n\n\t/**\n\t * Supports\n\t *\n\t * @param {string} match\n\t * @param {string} group\n\t * @return {string}\n\t */\n\tfunction supports (match, group) {\n\t\tvar out = property(group, group.charCodeAt(0), group.charCodeAt(1), group.charCodeAt(2))\n\n\t\treturn out !== group+';' ? out.replace(propertyptn, ' or ($1)').substring(4) : '('+group+')'\n\t}\n\n\t/**\n\t * Animation\n\t *\n\t * @param {string} input\n\t * @return {string}\n\t */\n\tfunction animation (input) {\n\t\tvar length = input.length\n\t\tvar index = input.indexOf(':', 9) + 1\n\t\tvar declare = input.substring(0, index).trim()\n\t\tvar out = input.substring(index, length-1).trim()\n\n\t\tswitch (input.charCodeAt(9)*keyed) {\n\t\t\tcase 0: {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// animation-*, -\n\t\t\tcase DASH: {\n\t\t\t\t// animation-name, n\n\t\t\t\tif (input.charCodeAt(10) !== 110) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// animation/animation-name\n\t\t\tdefault: {\n\t\t\t\t// split in case of multiple animations\n\t\t\t\tvar list = out.split((out = '', animationptn))\n\n\t\t\t\tfor (var i = 0, index = 0, length = list.length; i < length; index = 0, ++i) {\n\t\t\t\t\tvar value = list[i]\n\t\t\t\t\tvar items = value.split(propertiesptn)\n\n\t\t\t\t\twhile (value = items[index]) {\n\t\t\t\t\t\tvar peak = value.charCodeAt(0)\n\n\t\t\t\t\t\tif (keyed === 1 && (\n\t\t\t\t\t\t\t// letters\n\t\t\t\t\t\t\t(peak > AT && peak < 90) || (peak > 96 && peak < 123) || peak === UNDERSCORE ||\n\t\t\t\t\t\t\t// dash but not in sequence i.e --\n\t\t\t\t\t\t\t(peak === DASH && value.charCodeAt(1) !== DASH)\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t// not a number/function\n\t\t\t\t\t\t\tswitch (isNaN(parseFloat(value)) + (value.indexOf('(') !== -1)) {\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\t\t\t\t\t// not a valid reserved keyword\n\t\t\t\t\t\t\t\t\t\tcase 'infinite': case 'alternate': case 'backwards': case 'running':\n\t\t\t\t\t\t\t\t\t\tcase 'normal': case 'forwards': case 'both': case 'none': case 'linear':\n\t\t\t\t\t\t\t\t\t\tcase 'ease': case 'ease-in': case 'ease-out': case 'ease-in-out':\n\t\t\t\t\t\t\t\t\t\tcase 'paused': case 'reverse': case 'alternate-reverse': case 'inherit':\n\t\t\t\t\t\t\t\t\t\tcase 'initial': case 'unset': case 'step-start': case 'step-end': {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tvalue += key\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titems[index++] = value\n\t\t\t\t\t}\n\n\t\t\t\t\tout += (i === 0 ? '' : ',') + items.join(' ')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tout = declare + out + ';'\n\n\t\tif (prefix === 1 || (prefix === 2 && vendor(out, 1)))\n\t\t\treturn webkit + out + out\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Isolate\n\t *\n\t * @param {Array<string>} current\n\t */\n\tfunction isolate (current) {\n\t\tfor (var i = 0, length = current.length, selector = Array(length), padding, element; i < length; ++i) {\n\t\t\t// split individual elements in a selector i.e h1 h2 === [h1, h2]\n\t\t\tvar elements = current[i].split(elementptn)\n\t\t\tvar out = ''\n\n\t\t\tfor (var j = 0, size = 0, tail = 0, code = 0, l = elements.length; j < l; ++j) {\n\t\t\t\t// empty element\n\t\t\t\tif ((size = (element = elements[j]).length) === 0 && l > 1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttail = out.charCodeAt(out.length-1)\n\t\t\t\tcode = element.charCodeAt(0)\n\t\t\t\tpadding = ''\n\n\t\t\t\tif (j !== 0) {\n\t\t\t\t\t// determine if we need padding\n\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tpadding = ' '\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase AND: {\n\t\t\t\t\t\telement = padding + nscopealt\n\t\t\t\t\t}\n\t\t\t\t\tcase TILDE:\n\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\tcase PLUS:\n\t\t\t\t\tcase SPACE:\n\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\tswitch (element.charCodeAt(1)*2 + element.charCodeAt(2)*3) {\n\t\t\t\t\t\t\t// :global\n\t\t\t\t\t\t\tcase 530: {\n\t\t\t\t\t\t\t\tif (escape > 0) {\n\t\t\t\t\t\t\t\t\telement = padding + element.substring(8, size - 1)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// :hover, :nth-child(), ...\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tif (j < 1 || elements[j-1].length < 1) {\n\t\t\t\t\t\t\t\t\telement = padding + nscopealt + element\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\tpadding = ''\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tif (size > 1 && element.indexOf(':') > 0) {\n\t\t\t\t\t\t\telement = padding + element.replace(pseudoptn, '$1' + nscopealt + '$2')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tout += element\n\t\t\t}\n\n\t\t\tselector[i] = out.replace(formatptn, '').trim()\n\t\t}\n\n\t\treturn selector\n\t}\n\n\t/**\n\t * Proxy\n\t *\n\t * @param {number} context\n\t * @param {string} content\n\t * @param {Array<string>} selectors\n\t * @param {Array<string>} parents\n\t * @param {number} line\n\t * @param {number} column\n\t * @param {number} length\n\t * @param {number} id\n\t * @param {number} depth\n\t * @param {number} at\n\t * @return {(string|void|*)}\n\t */\n\tfunction proxy (context, content, selectors, parents, line, column, length, id, depth, at) {\n\t\tfor (var i = 0, out = content, next; i < plugged; ++i) {\n\t\t\tswitch (next = plugins[i].call(stylis, context, out, selectors, parents, line, column, length, id, depth, at)) {\n\t\t\t\tcase void 0:\n\t\t\t\tcase false:\n\t\t\t\tcase true:\n\t\t\t\tcase null: {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tout = next\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (out !== content) {\n\t\t return out\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} code\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction delimited (code, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\t// /*\n\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\tif (code === STAR) {\n\t\t\t\t\t\tif (body.charCodeAt(i - 1) === STAR && index + 2 !== i) {\n\t\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// //\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\tif (code === FOWARDSLASH) {\n\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * @param {number} type\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {number} find\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction match (type, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\tcase type: {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * Minify\n\t *\n\t * @param {(string|*)} output\n\t * @return {string}\n\t */\n\tfunction minify (output) {\n\t\treturn output\n\t\t\t.replace(formatptn, '')\n\t\t\t.replace(beforeptn, '')\n\t\t\t.replace(afterptn, '$1')\n\t\t\t.replace(tailptn, '$1')\n\t\t\t.replace(whiteptn, ' ')\n\t}\n\n\t/**\n\t * Use\n\t *\n\t * @param {(Array<function(...?)>|function(...?)|number|void)?} plugin\n\t */\n\tfunction use (plugin) {\n\t\tswitch (plugin) {\n\t\t\tcase void 0:\n\t\t\tcase null: {\n\t\t\t\tplugged = plugins.length = 0\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (typeof plugin === 'function') {\n\t\t\t\t\tplugins[plugged++] = plugin\n\t\t\t\t}\telse if (typeof plugin === 'object') {\n\t\t\t\t\tfor (var i = 0, length = plugin.length; i < length; ++i) {\n\t\t\t\t\t\tuse(plugin[i])\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tunkwn = !!plugin|0\n\t\t\t\t}\n\t\t\t}\n \t\t}\n\n \t\treturn use\n\t}\n\n\t/**\n\t * Set\n\t *\n\t * @param {*} options\n\t */\n\tfunction set (options) {\n\t\tfor (var name in options) {\n\t\t\tvar value = options[name]\n\t\t\tswitch (name) {\n\t\t\t\tcase 'keyframe': keyed = value|0; break\n\t\t\t\tcase 'global': escape = value|0; break\n\t\t\t\tcase 'cascade': cascade = value|0; break\n\t\t\t\tcase 'compress': compress = value|0; break\n\t\t\t\tcase 'semicolon': semicolon = value|0; break\n\t\t\t\tcase 'preserve': preserve = value|0; break\n\t\t\t\tcase 'prefix':\n\t\t\t\t\tshould = null\n\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tprefix = 0\n\t\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\t\tprefix = 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprefix = 2\n\t\t\t\t\t\tshould = value\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn set\n\t}\n\n\t/**\n\t * Stylis\n\t *\n\t * @param {string} selector\n\t * @param {string} input\n\t * @return {*}\n\t */\n\tfunction stylis (selector, input) {\n\t\tif (this !== void 0 && this.constructor === stylis) {\n\t\t\treturn factory(selector)\n\t\t}\n\n\t\t// setup\n\t\tvar ns = selector\n\t\tvar code = ns.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (ns = ns.trim()).charCodeAt(0)\n\t\t}\n\n\t\t// keyframe/animation namespace\n\t\tif (keyed > 0) {\n\t\t\tkey = ns.replace(invalidptn, code === OPENBRACKET ? '' : '-')\n\t\t}\n\n\t\t// reset, used to assert if a plugin is moneky-patching the return value\n\t\tcode = 1\n\n\t\t// cascade/isolate\n\t\tif (cascade === 1) {\n\t\t\tnscope = ns\n\t\t} else {\n\t\t\tnscopealt = ns\n\t\t}\n\n\t\tvar selectors = [nscope]\n\t\tvar result\n\n\t\t// execute plugins, pre-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(PREPS, input, selectors, selectors, line, column, 0, 0, 0, 0)\n\n\t\t\tif (result !== void 0 && typeof result === 'string') {\n\t\t\t\tinput = result\n\t\t\t}\n\t\t}\n\n\t\t// build\n\t\tvar output = compile(array, selectors, input, 0, 0)\n\n\t\t// execute plugins, post-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(POSTS, output, selectors, selectors, line, column, output.length, 0, 0, 0)\n\n\t\t\t// bypass minification\n\t\t\tif (result !== void 0 && typeof(output = result) !== 'string') {\n\t\t\t\tcode = 0\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tkey = ''\n\t\tnscope = ''\n\t\tnscopealt = ''\n\t\tpattern = 0\n\t\tline = 1\n\t\tcolumn = 1\n\n\t\treturn compress*code === 0 ? output : minify(output)\n\t}\n\n\tstylis['use'] = use\n\tstylis['set'] = set\n\n\tif (options !== void 0) {\n\t\tset(options)\n\t}\n\n\treturn stylis\n}));\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","function areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","package com.arkivanov.mvikotlin.rx.internal\n\nimport com.arkivanov.mvikotlin.rx.Observer\nimport com.arkivanov.mvikotlin.utils.internal.atomic\nimport com.arkivanov.mvikotlin.utils.internal.getValue\nimport com.arkivanov.mvikotlin.utils.internal.setValue\n\ninterface BehaviorSubject<T> : Subject<T> {\n\n val value: T\n}\n\n@Suppress(\"FunctionName\")\nfun <T> BehaviorSubject(initialValue: T): BehaviorSubject<T> = BehaviorSubjectImpl(initialValue)\n\nprivate class BehaviorSubjectImpl<T>(initialValue: T) : ThreadLocalSubject<T>(), BehaviorSubject<T> {\n\n override var value: T by atomic(initialValue)\n private set\n\n override fun onSubscribed(observer: Observer<T>) {\n super.onSubscribed(observer)\n\n observer.onNext(value)\n }\n\n override fun onNext(value: T) {\n this.value = value\n\n super.onNext(value)\n }\n}\n","package com.arkivanov.mvikotlin.rx.internal\n\ninterface PublishSubject<T> : Subject<T>\n\n@Suppress(\"FunctionName\")\nfun <T> PublishSubject(): PublishSubject<T> = PublishSubjectImpl()\n\nprivate class PublishSubjectImpl<T> : ThreadLocalSubject<T>(), PublishSubject<T>\n","package com.arkivanov.mvikotlin.rx.internal\n\nimport com.arkivanov.mvikotlin.rx.Disposable\nimport com.arkivanov.mvikotlin.utils.internal.atomic\nimport com.arkivanov.mvikotlin.utils.internal.getValue\nimport com.arkivanov.mvikotlin.utils.internal.setValue\n\n@Suppress(\"FunctionName\")\ninline fun Disposable(crossinline onDispose: Disposable.() -> Unit = {}): Disposable =\n object : Disposable {\n @Suppress(\"ObjectPropertyName\")\n override var isDisposed: Boolean by atomic(false)\n\n override fun dispose() {\n isDisposed = true\n onDispose()\n }\n }\n","package com.arkivanov.mvikotlin.rx.internal\n\nimport com.arkivanov.mvikotlin.rx.Disposable\nimport com.arkivanov.mvikotlin.rx.Observer\nimport com.arkivanov.mvikotlin.utils.internal.assertOnMainThread\nimport kotlin.native.concurrent.ThreadLocal\n\ninternal open class ThreadLocalSubject<T> : Subject<T> {\n\n init {\n @Suppress(\"ReplacePutWithAssignment\", \"LeakingThis\") // This is safe in this particular case\n state[this] = MutableState<T>()\n }\n\n override val isActive: Boolean get() = state.containsKey(this)\n\n override fun subscribe(observer: Observer<T>): Disposable {\n val mutableState: MutableState<T>? = getMutableState()\n\n return if (mutableState == null) {\n observer.onComplete()\n Disposable().also(Disposable::dispose)\n } else {\n val disposable = disposable()\n mutableState.map += disposable to observer\n onSubscribed(observer)\n disposable\n }\n }\n\n private fun disposable(): Disposable =\n Disposable {\n assertOnMainThread()\n getMutableState()?.also { it.map -= this }\n }\n\n protected open fun onSubscribed(observer: Observer<T>) {\n }\n\n override fun onNext(value: T) {\n val mutableState = getMutableState() ?: return\n mutableState.queue += value\n mutableState.drainIfNeeded()\n }\n\n override fun onComplete() {\n val mutableState = removeMutableState() ?: return\n mutableState.isCompleted = true\n mutableState.drainIfNeeded()\n }\n\n private fun MutableState<T>.drainIfNeeded() {\n if (!isDraining) {\n isDraining = true\n try {\n drain()\n } finally {\n isDraining = false\n }\n }\n }\n\n private fun MutableState<T>.drain() {\n while (queue.isNotEmpty()) {\n val value = queue.removeAt(0)\n map.values.forEach { it.onNext(value) }\n }\n\n if (isCompleted) {\n map.forEach { (disposable, observer) ->\n disposable.dispose()\n observer.onComplete()\n }\n }\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n private fun getMutableState(): MutableState<T>? = state[this] as MutableState<T>?\n\n @Suppress(\"UNCHECKED_CAST\")\n private fun removeMutableState(): MutableState<T>? = state.remove(this) as MutableState<T>?\n\n @ThreadLocal\n private companion object {\n private val state: MutableMap<ThreadLocalSubject<*>, MutableState<*>> = HashMap()\n }\n\n private class MutableState<T> {\n var map = mapOf<Disposable, Observer<T>>()\n val queue = ArrayList<T>()\n var isCompleted = false\n var isDraining = false\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else if (process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar global = getGlobal();\n\nmodule.exports = exports = global.fetch;\n\n// Needed for TypeScript and Webpack.\nexports.default = global.fetch.bind(global);\n\nexports.Headers = global.Headers;\nexports.Request = global.Request;\nexports.Response = global.Response;","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.database\n\nimport co.touchlab.kermit.CommonLogger\nimport co.touchlab.kermit.Logger\nimport com.shabinder.database.Database\n\nactual fun createDatabase(): Database? = null\nactual fun getLogger(): Logger = CommonLogger()\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.json\n\nimport io.ktor.http.*\n\ninternal class JsonContentTypeMatcher : ContentTypeMatcher {\n override fun contains(contentType: ContentType): Boolean {\n if (ContentType.Application.Json.match(contentType)) {\n return true\n }\n\n val value = contentType.withoutParameters().toString()\n return value.startsWith(\"application/\") && value.endsWith(\"+json\")\n }\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.json\n\nimport io.ktor.client.*\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.client.utils.*\nimport io.ktor.http.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\n\n/**\n * Platform default serializer.\n *\n * Uses service loader on jvm.\n * Consider to add one of the following dependencies:\n * - ktor-client-gson\n * - ktor-client-json\n */\npublic expect fun defaultSerializer(): JsonSerializer\n\n/**\n * [HttpClient] feature that serializes/de-serializes as JSON custom objects\n * to request and from response bodies using a [serializer].\n *\n * The default [serializer] is [GsonSerializer].\n *\n * The default [acceptContentTypes] is a list which contains [ContentType.Application.Json]\n *\n * Note: It will de-serialize the body response if the specified type is a public accessible class\n * and the Content-Type is one of [acceptContentTypes] list (`application/json` by default).\n *\n * @property serializer that is used to serialize and deserialize request/response bodies\n * @property acceptContentTypes that are allowed when receiving content\n */\npublic class JsonFeature internal constructor(\n public val serializer: JsonSerializer,\n public val acceptContentTypes: List<ContentType> = listOf(ContentType.Application.Json),\n private val receiveContentTypeMatchers: List<ContentTypeMatcher> = listOf(JsonContentTypeMatcher()),\n) {\n @Deprecated(\"Install feature properly instead of direct instantiation.\", level = DeprecationLevel.ERROR)\n public constructor(serializer: JsonSerializer) : this(serializer, listOf(ContentType.Application.Json))\n\n internal constructor(config: Config) : this(\n config.serializer ?: defaultSerializer(),\n config.acceptContentTypes,\n config.receiveContentTypeMatchers\n )\n\n /**\n * [JsonFeature] configuration that is used during installation\n */\n public class Config {\n /**\n * Serializer that will be used for serializing requests and deserializing response bodies.\n *\n * Default value for [serializer] is [defaultSerializer].\n */\n public var serializer: JsonSerializer? = null\n\n /**\n * Backing field with mutable list of content types that are handled by this feature.\n */\n private val _acceptContentTypes: MutableList<ContentType> = mutableListOf(ContentType.Application.Json)\n private val _receiveContentTypeMatchers: MutableList<ContentTypeMatcher> =\n mutableListOf(JsonContentTypeMatcher())\n\n /**\n * List of content types that are handled by this feature.\n * It also affects `Accept` request header value.\n * Please note that wildcard content types are supported but no quality specification provided.\n */\n public var acceptContentTypes: List<ContentType>\n set(value) {\n require(value.isNotEmpty()) { \"At least one content type should be provided to acceptContentTypes\" }\n\n _acceptContentTypes.clear()\n _acceptContentTypes.addAll(value)\n }\n get() = _acceptContentTypes\n\n /**\n * List of content type matchers that are handled by this feature.\n * Please note that wildcard content types are supported but no quality specification provided.\n */\n public var receiveContentTypeMatchers: List<ContentTypeMatcher>\n set(value) {\n require(value.isNotEmpty()) { \"At least one content type should be provided to acceptContentTypes\" }\n _receiveContentTypeMatchers.clear()\n _receiveContentTypeMatchers.addAll(value)\n }\n get() = _receiveContentTypeMatchers\n\n /**\n * Adds accepted content types. Be aware that [ContentType.Application.Json] accepted by default is removed from\n * the list if you use this function to provide accepted content types.\n * It also affects `Accept` request header value.\n */\n public fun accept(vararg contentTypes: ContentType) {\n _acceptContentTypes += contentTypes\n }\n\n /**\n * Adds accepted content types. Existing content types will not be removed.\n */\n public fun receive(matcher: ContentTypeMatcher) {\n _receiveContentTypeMatchers += matcher\n }\n }\n\n internal fun canHandle(contentType: ContentType): Boolean {\n val accepted = acceptContentTypes.any { contentType.match(it) }\n val matchers = receiveContentTypeMatchers\n\n return accepted || matchers.any { matcher -> matcher.contains(contentType) }\n }\n\n /**\n * Companion object for feature installation\n */\n public companion object Feature : HttpClientFeature<Config, JsonFeature> {\n override val key: AttributeKey<JsonFeature> = AttributeKey(\"Json\")\n\n override fun prepare(block: Config.() -> Unit): JsonFeature {\n val config = Config().apply(block)\n val serializer = config.serializer ?: defaultSerializer()\n val allowedContentTypes = config.acceptContentTypes.toList()\n val receiveContentTypeMatchers = config.receiveContentTypeMatchers\n\n return JsonFeature(serializer, allowedContentTypes, receiveContentTypeMatchers)\n }\n\n override fun install(feature: JsonFeature, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.Transform) { payload ->\n feature.acceptContentTypes.forEach { context.accept(it) }\n\n val contentType = context.contentType() ?: return@intercept\n if (!feature.canHandle(contentType)) return@intercept\n\n context.headers.remove(HttpHeaders.ContentType)\n\n val serializedContent = when (payload) {\n Unit -> EmptyContent\n is EmptyContent -> EmptyContent\n else -> feature.serializer.write(payload, contentType)\n }\n\n proceedWith(serializedContent)\n }\n\n scope.responsePipeline.intercept(HttpResponsePipeline.Transform) { (info, body) ->\n if (body !is ByteReadChannel) return@intercept\n\n val contentType = context.response.contentType() ?: return@intercept\n if (!feature.canHandle(contentType)) return@intercept\n\n val parsedBody = feature.serializer.read(info, body.readRemaining())\n val response = HttpResponseContainer(info, parsedBody)\n proceedWith(response)\n }\n }\n }\n}\n\n/**\n * Install [JsonFeature].\n */\npublic fun HttpClientConfig<*>.Json(block: JsonFeature.Config.() -> Unit) {\n install(JsonFeature, block)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.json\n\nimport io.ktor.client.call.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Client json serializer.\n */\npublic interface JsonSerializer {\n /**\n * Convert data object to [OutgoingContent].\n */\n public fun write(data: Any, contentType: ContentType): OutgoingContent\n\n /**\n * Convert data object to [OutgoingContent].\n */\n public fun write(data: Any): OutgoingContent = write(data, ContentType.Application.Json)\n\n /**\n * Read content from response using information specified in [type].\n */\n public fun read(type: TypeInfo, body: Input): Any\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.json\n\nimport io.ktor.util.*\n\n/**\n * Platform default serializer.\n */\npublic actual fun defaultSerializer(): JsonSerializer =\n serializersStore.first()\n\n@Suppress(\"KDocMissingDocumentation\")\n@InternalAPI\npublic val serializersStore: MutableList<JsonSerializer> = mutableListOf<JsonSerializer>()\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.main\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.Picture\nimport com.shabinder.common.main.integration.SpotiFlyerMainImpl\nimport com.shabinder.common.models.Consumer\nimport com.shabinder.common.models.DownloadRecord\nimport com.shabinder.database.Database\nimport kotlinx.coroutines.flow.Flow\n\ninterface SpotiFlyerMain {\n\n val models: Flow<State>\n\n /*\n * We Intend to Move to List Screen\n * Note: Implementation in Root\n * */\n fun onLinkSearch(link: String)\n\n /*\n * Update TextBox's Text\n * */\n fun onInputLinkChanged(link: String)\n\n /*\n * change TabBar Selected Category\n * */\n fun selectCategory(category: HomeCategory)\n\n /*\n * Load Image from cache/Internet and cache it\n * */\n suspend fun loadImage(url: String): Picture\n\n interface Dependencies {\n val mainOutput: Consumer<Output>\n val storeFactory: StoreFactory\n val database: Database?\n val dir: Dir\n val showPopUpMessage: (String) -> Unit\n }\n\n sealed class Output {\n data class Search(val link: String) : Output()\n }\n\n data class State(\n val records: List<DownloadRecord> = emptyList(),\n val link: String = \"\",\n val selectedCategory: HomeCategory = HomeCategory.About\n )\n enum class HomeCategory {\n About, History\n }\n}\n\n@Suppress(\"FunctionName\") // Factory function\nfun SpotiFlyerMain(componentContext: ComponentContext, dependencies: SpotiFlyerMain.Dependencies): SpotiFlyerMain =\n SpotiFlyerMainImpl(componentContext, dependencies)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.main.integration\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.mvikotlin.extensions.coroutines.states\nimport com.shabinder.common.di.Picture\nimport com.shabinder.common.di.isInternetAvailable\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.main.SpotiFlyerMain.Dependencies\nimport com.shabinder.common.main.SpotiFlyerMain.HomeCategory\nimport com.shabinder.common.main.SpotiFlyerMain.Output\nimport com.shabinder.common.main.SpotiFlyerMain.State\nimport com.shabinder.common.main.store.SpotiFlyerMainStore.Intent\nimport com.shabinder.common.main.store.SpotiFlyerMainStoreProvider\nimport com.shabinder.common.main.store.getStore\nimport kotlinx.coroutines.flow.Flow\n\ninternal class SpotiFlyerMainImpl(\n componentContext: ComponentContext,\n dependencies: Dependencies\n) : SpotiFlyerMain, ComponentContext by componentContext, Dependencies by dependencies {\n\n private val store =\n instanceKeeper.getStore {\n SpotiFlyerMainStoreProvider(\n storeFactory = storeFactory,\n database = database,\n showPopUpMessage = showPopUpMessage\n ).provide()\n }\n\n override val models: Flow<State> = store.states\n\n override fun onLinkSearch(link: String) {\n if (isInternetAvailable) mainOutput.callback(Output.Search(link = link))\n else showPopUpMessage(\"Check Network Connection Please\")\n }\n\n override fun onInputLinkChanged(link: String) {\n store.accept(Intent.SetLink(link))\n }\n\n override fun selectCategory(category: HomeCategory) {\n store.accept(Intent.SelectCategory(category))\n }\n\n override suspend fun loadImage(url: String): Picture = dir.loadImage(url)\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.main.store\n\nimport com.arkivanov.decompose.instancekeeper.InstanceKeeper\nimport com.arkivanov.decompose.instancekeeper.getOrCreate\nimport com.arkivanov.mvikotlin.core.store.Store\n\nfun <T : Store<*, *, *>> InstanceKeeper.getStore(key: Any, factory: () -> T): T =\n getOrCreate(key) { StoreHolder(factory()) }\n .store\n\ninline fun <reified T :\n\n Store<*, *, *>> InstanceKeeper.getStore(noinline factory: () -> T): T =\n getStore(T::class, factory)\n\nprivate class StoreHolder<T : Store<*, *, *>>(\n val store: T\n) : InstanceKeeper.Instance {\n override fun onDestroy() {\n store.dispose()\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.main.store\n\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.main.store.SpotiFlyerMainStore.Intent\n\ninternal interface SpotiFlyerMainStore : Store<Intent, SpotiFlyerMain.State, Nothing> {\n sealed class Intent {\n data class OpenPlatform(val platformID: String, val platformLink: String) : Intent()\n data class SetLink(val link: String) : Intent()\n data class SelectCategory(val category: SpotiFlyerMain.HomeCategory) : Intent()\n object GiveDonation : Intent()\n object ShareApp : Intent()\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.main.store\n\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.SimpleBootstrapper\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.arkivanov.mvikotlin.extensions.coroutines.SuspendExecutor\nimport com.shabinder.common.di.giveDonation\nimport com.shabinder.common.di.openPlatform\nimport com.shabinder.common.di.shareApp\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.main.SpotiFlyerMain.State\nimport com.shabinder.common.main.store.SpotiFlyerMainStore.Intent\nimport com.shabinder.common.models.DownloadRecord\nimport com.shabinder.database.Database\nimport com.squareup.sqldelight.runtime.coroutines.asFlow\nimport com.squareup.sqldelight.runtime.coroutines.mapToList\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.map\n\ninternal class SpotiFlyerMainStoreProvider(\n private val storeFactory: StoreFactory,\n private val showPopUpMessage: (String) -> Unit,\n private val database: Database?\n) {\n\n fun provide(): SpotiFlyerMainStore =\n object :\n SpotiFlyerMainStore,\n Store<Intent, State, Nothing> by storeFactory.create(\n name = \"SpotiFlyerHomeStore\",\n initialState = State(),\n bootstrapper = SimpleBootstrapper(Unit),\n executorFactory = ::ExecutorImpl,\n reducer = ReducerImpl\n ) {}\n\n val updates: Flow<List<DownloadRecord>>? =\n database?.downloadRecordDatabaseQueries\n ?.selectAll()\n ?.asFlow()\n ?.mapToList(Dispatchers.Default)\n ?.map {\n it.map { record ->\n record.run {\n DownloadRecord(id, type, name, link, coverUrl, totalFiles)\n }\n }\n }\n\n private sealed class Result {\n data class ItemsLoaded(val items: List<DownloadRecord>) : Result()\n data class CategoryChanged(val category: SpotiFlyerMain.HomeCategory) : Result()\n data class LinkChanged(val link: String) : Result()\n }\n\n private inner class ExecutorImpl : SuspendExecutor<Intent, Unit, State, Result, Nothing>() {\n override suspend fun executeAction(action: Unit, getState: () -> State) {\n updates?.collect {\n dispatch(Result.ItemsLoaded(it))\n }\n }\n\n override suspend fun executeIntent(intent: Intent, getState: () -> State) {\n when (intent) {\n is Intent.OpenPlatform -> openPlatform(intent.platformID, intent.platformLink)\n is Intent.GiveDonation -> giveDonation()\n is Intent.ShareApp -> shareApp()\n is Intent.SetLink -> dispatch(Result.LinkChanged(link = intent.link))\n is Intent.SelectCategory -> dispatch(Result.CategoryChanged(intent.category))\n }\n }\n }\n\n private object ReducerImpl : Reducer<State, Result> {\n override fun State.reduce(result: Result): State =\n when (result) {\n is Result.ItemsLoaded -> copy(records = result.items)\n is Result.LinkChanged -> copy(link = result.link)\n is Result.CategoryChanged -> copy(selectedCategory = result.category)\n }\n }\n}\n","package com.arkivanov.mvikotlin.extensions.coroutines\n\nimport com.arkivanov.mvikotlin.rx.Disposable\nimport com.arkivanov.mvikotlin.rx.Observer\nimport com.arkivanov.mvikotlin.rx.observer\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.channels.awaitClose\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.callbackFlow\n\n@ExperimentalCoroutinesApi\ninternal inline fun <T, R> T.toFlow(\n crossinline subscribe: T.(Observer<R>) -> Disposable\n): Flow<R> =\n callbackFlow {\n val disposable =\n subscribe(\n observer(\n onComplete = { channel.close() },\n onNext = { channel.offer(it) }\n )\n )\n\n awaitClose(disposable::dispose)\n }\n","package com.arkivanov.mvikotlin.extensions.coroutines\n\nimport com.arkivanov.mvikotlin.core.annotations.MainThread\nimport com.arkivanov.mvikotlin.core.store.Bootstrapper\nimport com.arkivanov.mvikotlin.core.store.Executor\nimport com.arkivanov.mvikotlin.core.store.Executor.Callbacks\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.utils.internal.atomic\nimport com.arkivanov.mvikotlin.utils.internal.initialize\nimport com.arkivanov.mvikotlin.utils.internal.requireValue\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.launch\nimport kotlin.coroutines.CoroutineContext\n\n/**\n * An abstract implementation of the [Executor] that provides interoperability with coroutines.\n * All coroutines are launched in a scope which closes when the [Executor] is disposed.\n */\nopen class SuspendExecutor<in Intent : Any, in Action : Any, in State : Any, Result : Any, Label : Any>(\n mainContext: CoroutineContext = Dispatchers.Main\n) : Executor<Intent, Action, State, Result, Label> {\n\n private val callbacks = atomic<Callbacks<State, Result, Label>>()\n private val getState: () -> State = { callbacks.requireValue().state }\n private val scope = CoroutineScope(mainContext)\n\n final override fun init(callbacks: Callbacks<State, Result, Label>) {\n this.callbacks.initialize(callbacks)\n }\n\n final override fun handleIntent(intent: Intent) {\n scope.launch {\n executeIntent(intent, getState)\n }\n }\n\n /**\n * A suspending variant of the [Executor.handleIntent] method.\n * The coroutine is launched in a scope which closes when the [Executor] is disposed.\n *\n * @param intent an `Intent` received by the [Store]\n * @param getState a `State` supplier that returns the *current* `State` of the [Store]\n */\n @MainThread\n protected open suspend fun executeIntent(intent: Intent, getState: () -> State) {\n }\n\n final override fun handleAction(action: Action) {\n scope.launch {\n executeAction(action, getState)\n }\n }\n\n /**\n * Called for every `Action` produced by the [Executor]\n * The coroutine is launched in a scope which closes when the [Executor] is disposed.\n *\n * @param action an `Action` produced by the [Bootstrapper]\n * @param getState a `State` supplier that returns the *current* `State` of the [Store]\n */\n @MainThread\n protected open suspend fun executeAction(action: Action, getState: () -> State) {\n }\n\n override fun dispose() {\n scope.cancel()\n }\n\n /**\n * Dispatches the provided `Result` to the [Reducer].\n * The updated `State` will be available immediately after this method returns.\n *\n * @param result a `Result` to be dispatched to the `Reducer`\n */\n @MainThread\n protected fun dispatch(result: Result) {\n callbacks.requireValue().onResult(result)\n }\n\n /**\n * Sends the provided `Label` to the [Store] for publication\n *\n * @param label a `Label` to be published\n */\n @MainThread\n protected fun publish(label: Label) {\n callbacks.requireValue().onLabel(label)\n }\n}\n","package com.arkivanov.mvikotlin.extensions.coroutines\n\nimport com.arkivanov.mvikotlin.core.store.Store\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.flow.Flow\nimport kotlin.coroutines.CoroutineContext\n\n/**\n * Returns a [Flow] that emits [Store] `States`.\n * The first emission with the current `State` will be performed synchronously on collection.\n * Please not that the actual collection of the [Flow] may not be synchronous depending on [CoroutineContext] being used.\n */\n@ExperimentalCoroutinesApi\nval <State : Any> Store<*, State, *>.states: Flow<State>\n get() = toFlow(Store<*, State, *>::states)\n\n/**\n * Returns a [Flow] that emits [Store] `Labels`\n */\n@ExperimentalCoroutinesApi\nval <Label : Any> Store<*, *, Label>.labels: Flow<Label>\n get() = toFlow(Store<*, *, Label>::labels)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.list\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.FetchPlatformQueryResult\nimport com.shabinder.common.di.Picture\nimport com.shabinder.common.list.integration.SpotiFlyerListImpl\nimport com.shabinder.common.models.Consumer\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.PlatformQueryResult\nimport com.shabinder.common.models.TrackDetails\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableSharedFlow\n\ninterface SpotiFlyerList {\n\n val models: Flow<State>\n\n /*\n * Download All Tracks(after filtering already Downloaded)\n * */\n fun onDownloadAllClicked(trackList: List<TrackDetails>)\n\n /*\n * Download All Tracks(after filtering already Downloaded)\n * */\n fun onDownloadClicked(track: TrackDetails)\n\n /*\n * To Pop and return back to Main Screen\n * */\n fun onBackPressed()\n\n /*\n * Load Image from cache/Internet and cache it\n * */\n suspend fun loadImage(url: String): Picture\n\n /*\n * Sync Tracks Statuses\n * */\n fun onRefreshTracksStatuses()\n\n interface Dependencies {\n val storeFactory: StoreFactory\n val fetchQuery: FetchPlatformQueryResult\n val dir: Dir\n val link: String\n val listOutput: Consumer<Output>\n val showPopUpMessage: (String) -> Unit\n val downloadProgressFlow: MutableSharedFlow<HashMap<String, DownloadStatus>>\n }\n sealed class Output {\n object Finished : Output()\n }\n data class State(\n val queryResult: PlatformQueryResult? = null,\n val link: String = \"\",\n val trackList: List<TrackDetails> = emptyList()\n )\n}\n\n@Suppress(\"FunctionName\") // Factory function\nfun SpotiFlyerList(componentContext: ComponentContext, dependencies: SpotiFlyerList.Dependencies): SpotiFlyerList =\n SpotiFlyerListImpl(componentContext, dependencies)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.list.integration\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.mvikotlin.extensions.coroutines.states\nimport com.shabinder.common.di.Picture\nimport com.shabinder.common.list.SpotiFlyerList\nimport com.shabinder.common.list.SpotiFlyerList.Dependencies\nimport com.shabinder.common.list.SpotiFlyerList.State\nimport com.shabinder.common.list.store.SpotiFlyerListStore.Intent\nimport com.shabinder.common.list.store.SpotiFlyerListStoreProvider\nimport com.shabinder.common.list.store.getStore\nimport com.shabinder.common.models.TrackDetails\nimport kotlinx.coroutines.flow.Flow\n\ninternal class SpotiFlyerListImpl(\n componentContext: ComponentContext,\n dependencies: Dependencies\n) : SpotiFlyerList, ComponentContext by componentContext, Dependencies by dependencies {\n\n private val store =\n instanceKeeper.getStore {\n SpotiFlyerListStoreProvider(\n dir = this.dir,\n storeFactory = storeFactory,\n fetchQuery = fetchQuery,\n downloadProgressFlow = downloadProgressFlow,\n link = link,\n showPopUpMessage = showPopUpMessage\n ).provide()\n }\n\n override val models: Flow<State> = store.states\n\n override fun onDownloadAllClicked(trackList: List<TrackDetails>) {\n store.accept(Intent.StartDownloadAll(trackList))\n }\n\n override fun onDownloadClicked(track: TrackDetails) {\n store.accept(Intent.StartDownload(track))\n }\n\n override fun onBackPressed() {\n listOutput.callback(SpotiFlyerList.Output.Finished)\n }\n\n override fun onRefreshTracksStatuses() {\n store.accept(Intent.RefreshTracksStatuses)\n }\n\n override suspend fun loadImage(url: String): Picture = dir.loadImage(url)\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.list.store\n\nimport com.arkivanov.decompose.instancekeeper.InstanceKeeper\nimport com.arkivanov.decompose.instancekeeper.getOrCreate\nimport com.arkivanov.mvikotlin.core.store.Store\n\nfun <T : Store<*, *, *>> InstanceKeeper.getStore(key: Any, factory: () -> T): T =\n getOrCreate(key) { StoreHolder(factory()) }\n .store\n\ninline fun <reified T :\n\n Store<*, *, *>> InstanceKeeper.getStore(noinline factory: () -> T): T =\n getStore(T::class, factory)\n\nprivate class StoreHolder<T : Store<*, *, *>>(\n val store: T\n) : InstanceKeeper.Instance {\n override fun onDestroy() {\n store.dispose()\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.list.store\n\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.shabinder.common.list.SpotiFlyerList.State\nimport com.shabinder.common.list.store.SpotiFlyerListStore.Intent\nimport com.shabinder.common.models.TrackDetails\n\ninternal interface SpotiFlyerListStore : Store<Intent, State, Nothing> {\n sealed class Intent {\n data class SearchLink(val link: String) : Intent()\n data class StartDownload(val track: TrackDetails) : Intent()\n data class StartDownloadAll(val trackList: List<TrackDetails>) : Intent()\n object RefreshTracksStatuses : Intent()\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.list.store\n\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.SimpleBootstrapper\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.arkivanov.mvikotlin.extensions.coroutines.SuspendExecutor\nimport com.shabinder.common.database.getLogger\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.FetchPlatformQueryResult\nimport com.shabinder.common.di.downloadTracks\nimport com.shabinder.common.di.queryActiveTracks\nimport com.shabinder.common.list.SpotiFlyerList.State\nimport com.shabinder.common.list.store.SpotiFlyerListStore.Intent\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.PlatformQueryResult\nimport com.shabinder.common.models.TrackDetails\nimport kotlinx.coroutines.flow.MutableSharedFlow\nimport kotlinx.coroutines.flow.collectLatest\n\ninternal class SpotiFlyerListStoreProvider(\n private val dir: Dir,\n private val storeFactory: StoreFactory,\n private val fetchQuery: FetchPlatformQueryResult,\n private val link: String,\n private val showPopUpMessage: (String) -> Unit,\n private val downloadProgressFlow: MutableSharedFlow<HashMap<String, DownloadStatus>>\n) {\n val logger = getLogger()\n fun provide(): SpotiFlyerListStore =\n object :\n SpotiFlyerListStore,\n Store<Intent, State, Nothing> by storeFactory.create(\n name = \"SpotiFlyerListStore\",\n initialState = State(),\n bootstrapper = SimpleBootstrapper(Unit),\n executorFactory = ::ExecutorImpl,\n reducer = ReducerImpl\n ) {}\n\n private sealed class Result {\n data class ResultFetched(val result: PlatformQueryResult, val trackList: List<TrackDetails>) : Result()\n data class UpdateTrackList(val list: List<TrackDetails>) : Result()\n data class UpdateTrackItem(val item: TrackDetails) : Result()\n }\n\n private inner class ExecutorImpl : SuspendExecutor<Intent, Unit, State, Result, Nothing>() {\n\n override suspend fun executeAction(action: Unit, getState: () -> State) {\n executeIntent(Intent.SearchLink(link), getState)\n\n downloadProgressFlow.collectLatest { map ->\n logger.d(map.size.toString(), \"ListStore: flow Updated\")\n val updatedTrackList = getState().trackList.updateTracksStatuses(map)\n if (updatedTrackList.isNotEmpty()) dispatch(Result.UpdateTrackList(updatedTrackList))\n }\n }\n\n override suspend fun executeIntent(intent: Intent, getState: () -> State) {\n when (intent) {\n is Intent.SearchLink -> fetchQuery.query(link)?.let { result ->\n result.trackList = result.trackList.toMutableList()\n dispatch((Result.ResultFetched(result, result.trackList.updateTracksStatuses(downloadProgressFlow.replayCache.getOrElse(0) { hashMapOf() }))))\n executeIntent(Intent.RefreshTracksStatuses, getState)\n }\n\n is Intent.StartDownloadAll -> {\n val finalList =\n intent.trackList.filter { it.downloaded == DownloadStatus.NotDownloaded }\n if (finalList.isNullOrEmpty()) showPopUpMessage(\"All Songs are Processed\")\n else downloadTracks(finalList, fetchQuery, dir)\n\n val list = intent.trackList.map {\n if (it.downloaded == DownloadStatus.NotDownloaded)\n return@map it.copy(downloaded = DownloadStatus.Queued)\n it\n }\n dispatch(Result.UpdateTrackList(list.updateTracksStatuses(downloadProgressFlow.replayCache.getOrElse(0) { hashMapOf() })))\n }\n is Intent.StartDownload -> {\n downloadTracks(listOf(intent.track), fetchQuery, dir)\n dispatch(Result.UpdateTrackItem(intent.track.copy(downloaded = DownloadStatus.Queued)))\n }\n is Intent.RefreshTracksStatuses -> queryActiveTracks()\n }\n }\n }\n private object ReducerImpl : Reducer<State, Result> {\n override fun State.reduce(result: Result): State =\n when (result) {\n is Result.ResultFetched -> copy(queryResult = result.result, trackList = result.trackList, link = link)\n is Result.UpdateTrackList -> copy(trackList = result.list)\n is Result.UpdateTrackItem -> updateTrackItem(result.item)\n }\n\n private fun State.updateTrackItem(item: TrackDetails): State {\n val position = this.trackList.map { it.title }.indexOf(item.title)\n if (position != -1) {\n return copy(trackList = trackList.toMutableList().apply { set(position, item) })\n }\n return this\n }\n }\n private fun List<TrackDetails>.updateTracksStatuses(map: HashMap<String, DownloadStatus>): List<TrackDetails> {\n val titleList = this.map { it.title }\n val updatedList = mutableListOf<TrackDetails>().also { it.addAll(this) }\n\n for (newTrack in map) {\n titleList.indexOf(newTrack.key).let { position ->\n if (position != -1) {\n updatedList.getOrNull(position)?.copy(downloaded = newTrack.value, progress = (newTrack.value as? DownloadStatus.Downloading)?.progress ?: updatedList[position].progress)?.also { updatedTrack ->\n updatedList[position] = updatedTrack\n // logger.d(\"$position) ${updatedTrack.downloaded} - ${updatedTrack.title}\",\"List Store Track Update\")\n }\n }\n }\n }\n return updatedList\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,"(function (root, factory) {\n if (typeof define === 'function' && define.amd)\n define(['exports', 'kotlin', 'kotlin-wrappers-kotlin-react-jsLegacy', 'react', 'kotlinx-html-js', 'kotlin-wrappers-kotlin-extensions-jsLegacy', 'react-dom'], factory);\n else if (typeof exports === 'object')\n factory(module.exports, require('kotlin'), require('kotlin-wrappers-kotlin-react-jsLegacy'), require('react'), require('kotlinx-html-js'), require('kotlin-wrappers-kotlin-extensions-jsLegacy'), require('react-dom'));\n else {\n if (typeof kotlin === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }if (typeof this['kotlin-wrappers-kotlin-react-jsLegacy'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'kotlin-wrappers-kotlin-react-jsLegacy' was not found. Please, check whether 'kotlin-wrappers-kotlin-react-jsLegacy' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }if (typeof react === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'react' was not found. Please, check whether 'react' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }if (typeof this['kotlinx-html-js'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'kotlinx-html-js' was not found. Please, check whether 'kotlinx-html-js' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }if (typeof this['kotlin-wrappers-kotlin-extensions-jsLegacy'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'kotlin-wrappers-kotlin-extensions-jsLegacy' was not found. Please, check whether 'kotlin-wrappers-kotlin-extensions-jsLegacy' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }if (typeof this['react-dom'] === 'undefined') {\n throw new Error(\"Error loading module 'kotlin-wrappers-kotlin-react-dom-jsLegacy'. Its dependency 'react-dom' was not found. Please, check whether 'react-dom' is loaded prior to 'kotlin-wrappers-kotlin-react-dom-jsLegacy'.\");\n }root['kotlin-wrappers-kotlin-react-dom-jsLegacy'] = factory(typeof this['kotlin-wrappers-kotlin-react-dom-jsLegacy'] === 'undefined' ? {} : this['kotlin-wrappers-kotlin-react-dom-jsLegacy'], kotlin, this['kotlin-wrappers-kotlin-react-jsLegacy'], react, this['kotlinx-html-js'], this['kotlin-wrappers-kotlin-extensions-jsLegacy'], this['react-dom']);\n }\n}(this, function (_, Kotlin, $module$kotlin_wrappers_kotlin_react_jsLegacy, $module$react, $module$kotlinx_html_js, $module$kotlin_wrappers_kotlin_extensions_jsLegacy, $module$react_dom) {\n 'use strict';\n var $$importsForInline$$ = _.$$importsForInline$$ || (_.$$importsForInline$$ = {});\n var defineInlineFunction = Kotlin.defineInlineFunction;\n var set_key = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.set_key_38rnt0$;\n var set_ref = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.set_ref_jjyqia$;\n var ref = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.ref_dpkau5$;\n var createElement = $module$react.createElement;\n var RBuilder = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.RBuilder;\n var IllegalStateException_init = Kotlin.kotlin.IllegalStateException_init_pdl1vj$;\n var StringBuilder_init = Kotlin.kotlin.text.StringBuilder_init;\n var Kind_CLASS = Kotlin.Kind.CLASS;\n var Unsafe = $module$kotlinx_html_js.kotlinx.html.Unsafe;\n var Unit = Kotlin.kotlin.Unit;\n var TagConsumer = $module$kotlinx_html_js.kotlinx.html.TagConsumer;\n var copyToArray = Kotlin.kotlin.collections.copyToArray;\n var buildElements = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.buildElements_zepujl$;\n var render = $module$react_dom.render;\n var listOf = Kotlin.kotlin.collections.listOf_i5x0yv$;\n var to = Kotlin.kotlin.to_ujzrz7$;\n var toMap = Kotlin.kotlin.collections.toMap_6hr0sd$;\n var toMutableMap = Kotlin.kotlin.collections.toMutableMap_abgq59$;\n var Kind_OBJECT = Kotlin.Kind.OBJECT;\n var PropertyMetadata = Kotlin.PropertyMetadata;\n var wrapFunction = Kotlin.wrapFunction;\n var collectionSizeOrDefault = Kotlin.kotlin.collections.collectionSizeOrDefault_ba2ldo$;\n var ArrayList_init = Kotlin.kotlin.collections.ArrayList_init_ww73n8$;\n RDOMBuilder.prototype = Object.create(RBuilder.prototype);\n RDOMBuilder.prototype.constructor = RDOMBuilder;\n function RDOMBuilder(factory) {\n RBuilder.call(this);\n this.consumer = new RDOMBuilder$consumer$ObjectLiteral(this);\n this.attrs = factory(this.consumer);\n this.props = {};\n var tmp$;\n tmp$ = this.attrs.attributesEntries.iterator();\n while (tmp$.hasNext()) {\n var element = tmp$.next();\n this.setProp_4w9ihe$(element.key, element.value);\n }\n }\n RDOMBuilder.prototype.setProp_4w9ihe$ = function (attribute, value) {\n var key = fixAttributeName(attribute);\n this.props[key] = value;\n };\n RDOMBuilder.prototype.get_g0n3bx$ = function ($receiver, name) {\n return this.props[name];\n };\n RDOMBuilder.prototype.set_hpg2xa$ = function ($receiver, name, value) {\n this.props[name] = value;\n };\n RDOMBuilder.prototype.get_defaultChecked_a2ovwx$ = function ($receiver) {\n var tmp$;\n return (tmp$ = this.get_g0n3bx$($receiver, 'defaultChecked')) != null ? tmp$ : false;\n };\n RDOMBuilder.prototype.set_defaultChecked_47da7g$ = function ($receiver, value) {\n this.set_hpg2xa$($receiver, 'defaultChecked', value);\n };\n RDOMBuilder.prototype.get_values_sktobr$ = function ($receiver) {\n var tmp$;\n return ((tmp$ = this.get_g0n3bx$($receiver, 'value')) != null ? tmp$ : []).toSet();\n };\n RDOMBuilder.prototype.set_values_d8zj82$ = function ($receiver, value) {\n this.set_hpg2xa$($receiver, 'value', copyToArray(value));\n };\n RDOMBuilder.prototype.get_value_sktobr$ = function ($receiver) {\n return this.get_g0n3bx$($receiver, 'value');\n };\n RDOMBuilder.prototype.set_value_g9clh3$ = function ($receiver, value) {\n this.set_hpg2xa$($receiver, 'value', value);\n };\n RDOMBuilder.prototype.attrs_1wdtl9$ = defineInlineFunction('kotlin-wrappers-kotlin-react-dom-jsLegacy.react.dom.RDOMBuilder.attrs_1wdtl9$', function (handler) {\n handler(this.attrs);\n });\n Object.defineProperty(RDOMBuilder.prototype, 'key', {configurable: true, get: function () {\n throw IllegalStateException_init(''.toString());\n }, set: function (value) {\n set_key(this.props, value);\n }});\n Object.defineProperty(RDOMBuilder.prototype, 'ref', {configurable: true, get: function () {\n throw IllegalStateException_init(''.toString());\n }, set: function (value) {\n set_ref(this.props, value);\n }});\n RDOMBuilder.prototype.ref_5ij4lk$ = function (handler) {\n ref(this.props, handler);\n };\n RDOMBuilder.prototype.create = function () {\n return createElement.apply(null, [this.attrs.tagName, this.props].concat(copyToArray(this.childList)));\n };\n function RDOMBuilder$consumer$ObjectLiteral(this$RDOMBuilder) {\n this.this$RDOMBuilder = this$RDOMBuilder;\n }\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagAttributeChange_5n2z71$ = function (tag, attribute, value) {\n this.this$RDOMBuilder.setProp_4w9ihe$(attribute, value);\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagComment_6bul2c$ = function (content) {\n throw IllegalStateException_init('Comments are not supported');\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagContent_6bul2c$ = function (content) {\n this.this$RDOMBuilder.childList.add_11rb$(content);\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagContentEntity_ws8or7$ = function (entity) {\n this.this$RDOMBuilder.childList.add_11rb$(entity.text);\n };\n function RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral(closure$sb) {\n this.closure$sb = closure$sb;\n }\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.prototype.unaryPlus_pdl1vz$ = function ($receiver) {\n this.closure$sb.append_pdl1vj$($receiver);\n };\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.$metadata$ = {kind: Kind_CLASS, interfaces: [Unsafe]};\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagContentUnsafe_kntra7$ = function (block) {\n var sb = StringBuilder_init();\n block(new RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral(sb));\n var tmp$ = this.this$RDOMBuilder.props;\n var $receiver = {};\n $receiver.__html = sb.toString();\n tmp$.dangerouslySetInnerHTML = $receiver;\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagStart_tkgjla$ = function (tag) {\n throw IllegalStateException_init(\"Don't nest tags inside props block\");\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagEnd_tkgjla$ = function (tag) {\n throw IllegalStateException_init(\"Don't nest tags inside props block\");\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagEvent_azi6uv$ = function (tag, event, value) {\n this.this$RDOMBuilder.setProp_4w9ihe$(event, value);\n };\n RDOMBuilder$consumer$ObjectLiteral.prototype.finalize = function () {\n return Unit;\n };\n RDOMBuilder$consumer$ObjectLiteral.$metadata$ = {kind: Kind_CLASS, interfaces: [TagConsumer]};\n RDOMBuilder.$metadata$ = {kind: Kind_CLASS, simpleName: 'RDOMBuilder', interfaces: [RBuilder]};\n function render$lambda() {\n return Unit;\n }\n function render_0(container, callback, handler) {\n if (callback === void 0)\n callback = render$lambda;\n render(buildElements(handler), container, callback);\n }\n var events;\n var attrsMap;\n function fixAttributeName(event) {\n var tmp$;\n return (tmp$ = attrsMap.get_11rb$(event)) != null ? tmp$ : event;\n }\n function StringAttr() {\n StringAttr_instance = this;\n }\n StringAttr.prototype.getValue_pt3q5s$ = function (thisRef, property) {\n var tmp$;\n return (tmp$ = thisRef.attributes.get_11rb$(property.callableName)) != null ? tmp$ : '';\n };\n StringAttr.prototype.setValue_wi26v6$ = function (thisRef, property, value) {\n var $receiver = thisRef.attributes;\n var key = property.callableName;\n $receiver.put_xwzc9p$(key, value);\n };\n StringAttr.$metadata$ = {kind: Kind_OBJECT, simpleName: 'StringAttr', interfaces: []};\n var StringAttr_instance = null;\n function StringAttr_getInstance() {\n if (StringAttr_instance === null) {\n new StringAttr();\n }return StringAttr_instance;\n }\n var key;\n var key_metadata = new PropertyMetadata('key');\n var defaultValue;\n var defaultValue_metadata = new PropertyMetadata('defaultValue');\n var defaultValue_0;\n var defaultValue_metadata_0 = new PropertyMetadata('defaultValue');\n var value;\n var value_metadata = new PropertyMetadata('value');\n $$importsForInline$$['kotlin-wrappers-kotlin-extensions-jsLegacy'] = $module$kotlin_wrappers_kotlin_extensions_jsLegacy;\n var package$react = _.react || (_.react = {});\n var package$dom = package$react.dom || (package$react.dom = {});\n package$dom.RDOMBuilder = RDOMBuilder;\n package$dom.render_2955dm$ = render_0;\n package$dom.fixAttributeName_61zpoe$ = fixAttributeName;\n Object.defineProperty(package$dom, 'StringAttr', {get: StringAttr_getInstance});\n $$importsForInline$$['kotlinx-html-js'] = $module$kotlinx_html_js;\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.prototype.unaryPlus_lvwjq6$ = Unsafe.prototype.unaryPlus_lvwjq6$;\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.prototype.raw_3p81yu$ = Unsafe.prototype.raw_3p81yu$;\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.prototype.raw_61zpoe$ = Unsafe.prototype.raw_61zpoe$;\n RDOMBuilder$consumer$ObjectLiteral$onTagContentUnsafe$ObjectLiteral.prototype.raw_ws8or7$ = Unsafe.prototype.raw_ws8or7$;\n RDOMBuilder$consumer$ObjectLiteral.prototype.onTagError_cjwpn3$ = TagConsumer.prototype.onTagError_cjwpn3$;\n events = listOf(['onCopy', 'onCut', 'onPaste', 'onCompositionEnd', 'onCompositionStart', 'onCompositionUpdate', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onFocus', 'onBlur', 'onChange', 'onInput', 'onSubmit', 'onClick', 'onContextMenu', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onSelect', 'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart', 'onScroll', 'onWheel', 'onAbort', 'onCanPlay', 'onCanPlayThrough', 'onDurationChange', 'onEmptied', 'onEncrypted', 'onEnded', 'onError', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onSeeked', 'onSeeking', 'onStalled', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting', 'onLoad', 'onError', 'onAnimationStart', 'onAnimationEnd', 'onAnimationIteration', 'onTransitionEnd', 'accept', 'acceptCharset', 'accessKey', 'action', 'allowFullScreen', 'allowTransparency', 'alt', 'async', 'autoComplete', 'autoFocus', 'autoPlay', 'capture', 'cellPadding', 'cellSpacing', 'challenge', 'charSet', 'checked', 'cite', 'classID', 'className', 'colSpan', 'cols', 'content', 'contentEditable', 'contextMenu', 'controls', 'coords', 'crossOrigin', 'data', 'dateTime', 'default', 'defer', 'dir', 'disabled', 'download', 'draggable', 'encType', 'form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'frameBorder', 'headers', 'height', 'hidden', 'high', 'href', 'hrefLang', 'htmlFor', 'httpEquiv', 'icon', 'id', 'inputMode', 'integrity', 'is', 'keyParams', 'keyType', 'kind', 'label', 'lang', 'list', 'loop', 'low', 'manifest', 'marginHeight', 'marginWidth', 'max', 'maxLength', 'media', 'mediaGroup', 'method', 'min', 'minLength', 'multiple', 'muted', 'name', 'noValidate', 'nonce', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'profile', 'radioGroup', 'readOnly', 'rel', 'required', 'reversed', 'role', 'rowSpan', 'rows', 'sandbox', 'scope', 'scoped', 'scrolling', 'seamless', 'selected', 'shape', 'size', 'sizes', 'span', 'spellCheck', 'src', 'srcDoc', 'srcLang', 'srcSet', 'start', 'step', 'style', 'summary', 'tabIndex', 'target', 'title', 'type', 'useMap', 'value', 'width', 'wmode', 'wrap']);\n var $receiver = events;\n var destination = ArrayList_init(collectionSizeOrDefault($receiver, 10));\n var tmp$;\n tmp$ = $receiver.iterator();\n while (tmp$.hasNext()) {\n var item = tmp$.next();\n destination.add_11rb$(to(item.toLowerCase(), item));\n }\n var $receiver_0 = toMutableMap(toMap(destination));\n $receiver_0.put_xwzc9p$('class', 'className');\n $receiver_0.put_xwzc9p$('ondblclick', 'onDoubleClick');\n attrsMap = $receiver_0;\n key = StringAttr_getInstance();\n defaultValue = StringAttr_getInstance();\n defaultValue_0 = StringAttr_getInstance();\n value = StringAttr_getInstance();\n return _;\n}));\n\n//# sourceMappingURL=kotlin-wrappers-kotlin-react-dom-jsLegacy.js.map\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = hyphenateProperty;\n\nvar _hyphenateStyleName = require('hyphenate-style-name');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction hyphenateProperty(property) {\n return (0, _hyphenateStyleName2.default)(property);\n}\nmodule.exports = exports['default'];","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\r\nfunction getType(payload) {\r\n return Object.prototype.toString.call(payload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\nfunction isUndefined(payload) {\r\n return getType(payload) === 'Undefined';\r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(payload) {\r\n return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isPlainObject(payload) {\r\n if (getType(payload) !== 'Object')\r\n return false;\r\n return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isObject(payload) {\r\n return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is { [K in any]: never }}\r\n */\r\nfunction isEmptyObject(payload) {\r\n return isPlainObject(payload) && Object.keys(payload).length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isFullObject(payload) {\r\n return isPlainObject(payload) && Object.keys(payload).length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isAnyObject(payload) {\r\n return getType(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\r\nfunction isObjectLike(payload) {\r\n return isAnyObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a function (regular or async)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is AnyFunction}\r\n */\r\nfunction isFunction(payload) {\r\n return typeof payload === 'function';\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {any} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isArray(payload) {\r\n return getType(payload) === 'Array';\r\n}\r\n/**\r\n * Returns whether the payload is a an array with at least 1 item\r\n *\r\n * @param {*} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isFullArray(payload) {\r\n return isArray(payload) && payload.length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is []}\r\n */\r\nfunction isEmptyArray(payload) {\r\n return isArray(payload) && payload.length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isString(payload) {\r\n return getType(payload) === 'String';\r\n}\r\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isFullString(payload) {\r\n return isString(payload) && payload !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isEmptyString(payload) {\r\n return payload === '';\r\n}\r\n/**\r\n * Returns whether the payload is a number (but not NaN)\r\n *\r\n * This will return `false` for `NaN`!!\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\r\nfunction isNumber(payload) {\r\n return getType(payload) === 'Number' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\r\nfunction isBoolean(payload) {\r\n return getType(payload) === 'Boolean';\r\n}\r\n/**\r\n * Returns whether the payload is a regular expression (RegExp)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunction isRegExp(payload) {\r\n return getType(payload) === 'RegExp';\r\n}\r\n/**\r\n * Returns whether the payload is a Map\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Map<any, any>}\r\n */\r\nfunction isMap(payload) {\r\n return getType(payload) === 'Map';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakMap\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakMap<any, any>}\r\n */\r\nfunction isWeakMap(payload) {\r\n return getType(payload) === 'WeakMap';\r\n}\r\n/**\r\n * Returns whether the payload is a Set\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Set<any>}\r\n */\r\nfunction isSet(payload) {\r\n return getType(payload) === 'Set';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakSet\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakSet<any>}\r\n */\r\nfunction isWeakSet(payload) {\r\n return getType(payload) === 'WeakSet';\r\n}\r\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\r\nfunction isSymbol(payload) {\r\n return getType(payload) === 'Symbol';\r\n}\r\n/**\r\n * Returns whether the payload is a Date, and that the date is valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\nfunction isDate(payload) {\r\n return getType(payload) === 'Date' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a Blob\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payload) {\r\n return getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whether the payload is a File\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */\r\nfunction isFile(payload) {\r\n return getType(payload) === 'File';\r\n}\r\n/**\r\n * Returns whether the payload is a Promise\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Promise<any>}\r\n */\r\nfunction isPromise(payload) {\r\n return getType(payload) === 'Promise';\r\n}\r\n/**\r\n * Returns whether the payload is an Error\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Error}\r\n */\r\nfunction isError(payload) {\r\n return getType(payload) === 'Error';\r\n}\r\n/**\r\n * Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is typeof NaN}\r\n */\r\nfunction isNaNValue(payload) {\r\n return getType(payload) === 'Number' && isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is boolean | null | undefined | number | string | symbol)}\r\n */\r\nfunction isPrimitive(payload) {\r\n return (isBoolean(payload) ||\r\n isNull(payload) ||\r\n isUndefined(payload) ||\r\n isNumber(payload) ||\r\n isString(payload) ||\r\n isSymbol(payload));\r\n}\r\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\r\nvar isNullOrUndefined = isOneOf(isNull, isUndefined);\r\nfunction isOneOf(a, b, c, d, e) {\r\n return function (value) {\r\n return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));\r\n };\r\n}\r\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n if (!(type instanceof Function)) {\r\n throw new TypeError('Type must be a function');\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {\r\n throw new TypeError('Type is not a class');\r\n }\r\n // Classes usually have names (as functions usually have names)\r\n var name = type.name;\r\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\r\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","import { isPlainObject, isArray, isSymbol } from 'is-what';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\r\n var propType = originalObject.propertyIsEnumerable(key)\r\n ? 'enumerable'\r\n : 'nonenumerable';\r\n if (propType === 'enumerable')\r\n carry[key] = newVal;\r\n if (propType === 'nonenumerable') {\r\n Object.defineProperty(carry, key, {\r\n value: newVal,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n });\r\n }\r\n}\r\nfunction mergeRecursively(origin, newComer, extensions) {\r\n // work directly on newComer if its not an object\r\n if (!isPlainObject(newComer)) {\r\n // extend merge rules\r\n if (extensions && isArray(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newComer = extend(origin, newComer);\r\n });\r\n }\r\n return newComer;\r\n }\r\n // define newObject to merge all values upon\r\n var newObject = {};\r\n if (isPlainObject(origin)) {\r\n var props_1 = Object.getOwnPropertyNames(origin);\r\n var symbols_1 = Object.getOwnPropertySymbols(origin);\r\n newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) {\r\n // @ts-ignore\r\n var targetVal = origin[key];\r\n if ((!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key)) ||\r\n (isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) {\r\n assignProp(carry, key, targetVal, origin);\r\n }\r\n return carry;\r\n }, {});\r\n }\r\n var props = Object.getOwnPropertyNames(newComer);\r\n var symbols = Object.getOwnPropertySymbols(newComer);\r\n var result = __spreadArrays(props, symbols).reduce(function (carry, key) {\r\n // re-define the origin and newComer as targetVal and newVal\r\n var newVal = newComer[key];\r\n var targetVal = (isPlainObject(origin))\r\n // @ts-ignore\r\n ? origin[key]\r\n : undefined;\r\n // extend merge rules\r\n if (extensions && isArray(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newVal = extend(targetVal, newVal);\r\n });\r\n }\r\n // When newVal is an object do the merge recursively\r\n if (targetVal !== undefined && isPlainObject(newVal)) {\r\n newVal = mergeRecursively(targetVal, newVal, extensions);\r\n }\r\n assignProp(carry, key, newVal, newComer);\r\n return carry;\r\n }, newObject);\r\n return result;\r\n}\r\n/**\r\n * Merge anything recursively.\r\n * Objects get merged, special objects (classes etc.) are re-assigned \"as is\".\r\n * Basic types overwrite objects or other basic types.\r\n *\r\n * @param {(IConfig | any)} origin\r\n * @param {...any[]} newComers\r\n * @returns the result\r\n */\r\nfunction merge(origin) {\r\n var newComers = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n newComers[_i - 1] = arguments[_i];\r\n }\r\n var extensions = null;\r\n var base = origin;\r\n if (isPlainObject(origin) && origin.extensions && Object.keys(origin).length === 1) {\r\n base = {};\r\n extensions = origin.extensions;\r\n }\r\n return newComers.reduce(function (result, newComer) {\r\n return mergeRecursively(result, newComer, extensions);\r\n }, base);\r\n}\n\nfunction concatArrays(originVal, newVal) {\r\n if (isArray(originVal) && isArray(newVal)) {\r\n // concat logic\r\n return originVal.concat(newVal);\r\n }\r\n return newVal; // always return newVal as fallback!!\r\n}\n\nexport default merge;\nexport { concatArrays, merge };\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage extras\n\nimport kotlinext.js.Object\nimport kotlinext.js.jsObject\n\nvar uniqueId: Long = 0L\n\ninternal fun Any.uniqueId(): Long {\n var id: dynamic = asDynamic().__unique_id\n if (id == undefined) {\n id = ++uniqueId\n Object.defineProperty<Any, Long>(this, \"__unique_id\", jsObject { value = id })\n }\n\n return id\n}\n",null,null,"/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\n//\n// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt\n// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib\n//\n\nimport kotlin.random.*\nimport kotlin.ranges.contains\nimport kotlin.ranges.reversed\n\n/**\n * Returns 1st *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 1.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component1(): T {\n return get(0)\n}\n\n/**\n * Returns 2nd *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 2.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component2(): T {\n return get(1)\n}\n\n/**\n * Returns 3rd *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 3.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component3(): T {\n return get(2)\n}\n\n/**\n * Returns 4th *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 4.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component4(): T {\n return get(3)\n}\n\n/**\n * Returns 5th *element* from the list.\n * \n * Throws an [IndexOutOfBoundsException] if the size of this list is less than 5.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> List<T>.component5(): T {\n return get(4)\n}\n\n/**\n * Returns `true` if [element] is found in the collection.\n */\npublic operator fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.contains(element: T): Boolean {\n if (this is Collection)\n return contains(element)\n return indexOf(element) >= 0\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\npublic fun <T> Iterable<T>.elementAt(index: Int): T {\n if (this is List)\n return get(index)\n return elementAtOrElse(index) { throw IndexOutOfBoundsException(\"Collection doesn't contain element at index $index.\") }\n}\n\n/**\n * Returns an element at the given [index] or throws an [IndexOutOfBoundsException] if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAt\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAt(index: Int): T {\n return get(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\npublic fun <T> Iterable<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n if (this is List)\n return this.getOrElse(index, defaultValue)\n if (index < 0)\n return defaultValue(index)\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this collection.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\npublic fun <T> Iterable<T>.elementAtOrNull(index: Int): T? {\n if (this is List)\n return this.getOrNull(index)\n if (index < 0)\n return null\n val iterator = iterator()\n var count = 0\n while (iterator.hasNext()) {\n val element = iterator.next()\n if (index == count++)\n return element\n }\n return null\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.elementAtOrNull\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.elementAtOrNull(index: Int): T? {\n return this.getOrNull(index)\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T? {\n return firstOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.find\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.findLast(predicate: (T) -> Boolean): T? {\n return lastOrNull(predicate)\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the collection is empty.\n */\npublic fun <T> Iterable<T>.first(): T {\n when (this) {\n is List -> return this.first()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n return iterator.next()\n }\n }\n}\n\n/**\n * Returns first element.\n * @throws [NoSuchElementException] if the list is empty.\n */\npublic fun <T> List<T>.first(): T {\n if (isEmpty())\n throw NoSuchElementException(\"List is empty.\")\n return this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate].\n * @throws [NoSuchElementException] if no such element is found.\n */\npublic inline fun <T> Iterable<T>.first(predicate: (T) -> Boolean): T {\n for (element in this) if (predicate(element)) return element\n throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n}\n\n/**\n * Returns the first element, or `null` if the collection is empty.\n */\npublic fun <T> Iterable<T>.firstOrNull(): T? {\n when (this) {\n is List -> {\n if (isEmpty())\n return null\n else\n return this[0]\n }\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n return iterator.next()\n }\n }\n}\n\n/**\n * Returns the first element, or `null` if the list is empty.\n */\npublic fun <T> List<T>.firstOrNull(): T? {\n return if (isEmpty()) null else this[0]\n}\n\n/**\n * Returns the first element matching the given [predicate], or `null` if element was not found.\n */\npublic inline fun <T> Iterable<T>.firstOrNull(predicate: (T) -> Boolean): T? {\n for (element in this) if (predicate(element)) return element\n return null\n}\n\n/**\n * Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this list.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> List<T>.getOrElse(index: Int, defaultValue: (Int) -> T): T {\n return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)\n}\n\n/**\n * Returns an element at the given [index] or `null` if the [index] is out of bounds of this list.\n * \n * @sample samples.collections.Collections.Elements.getOrNull\n */\npublic fun <T> List<T>.getOrNull(index: Int): T? {\n return if (index >= 0 && index <= lastIndex) get(index) else null\n}\n\n/**\n * Returns first index of [element], or -1 if the collection does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.indexOf(element: T): Int {\n if (this is List) return this.indexOf(element)\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns first index of [element], or -1 if the list does not contain element.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\npublic fun <@kotlin.internal.OnlyInputTypes T> List<T>.indexOf(element: T): Int {\n return indexOf(element)\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the collection does not contain such element.\n */\npublic inline fun <T> Iterable<T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the first element matching the given [predicate], or -1 if the list does not contain such element.\n */\npublic inline fun <T> List<T>.indexOfFirst(predicate: (T) -> Boolean): Int {\n var index = 0\n for (item in this) {\n if (predicate(item))\n return index\n index++\n }\n return -1\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the collection does not contain such element.\n */\npublic inline fun <T> Iterable<T>.indexOfLast(predicate: (T) -> Boolean): Int {\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (predicate(item))\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns index of the last element matching the given [predicate], or -1 if the list does not contain such element.\n */\npublic inline fun <T> List<T>.indexOfLast(predicate: (T) -> Boolean): Int {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n if (predicate(iterator.previous())) {\n return iterator.nextIndex()\n }\n }\n return -1\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the collection is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Iterable<T>.last(): T {\n when (this) {\n is List -> return this.last()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n }\n }\n}\n\n/**\n * Returns the last element.\n * \n * @throws NoSuchElementException if the list is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> List<T>.last(): T {\n if (isEmpty())\n throw NoSuchElementException(\"List is empty.\")\n return this[lastIndex]\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Iterable<T>.last(predicate: (T) -> Boolean): T {\n var last: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n last = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return last as T\n}\n\n/**\n * Returns the last element matching the given [predicate].\n * \n * @throws NoSuchElementException if no such element is found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> List<T>.last(predicate: (T) -> Boolean): T {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n val element = iterator.previous()\n if (predicate(element)) return element\n }\n throw NoSuchElementException(\"List contains no element matching the predicate.\")\n}\n\n/**\n * Returns last index of [element], or -1 if the collection does not contain element.\n */\npublic fun <@kotlin.internal.OnlyInputTypes T> Iterable<T>.lastIndexOf(element: T): Int {\n if (this is List) return this.lastIndexOf(element)\n var lastIndex = -1\n var index = 0\n for (item in this) {\n checkIndexOverflow(index)\n if (element == item)\n lastIndex = index\n index++\n }\n return lastIndex\n}\n\n/**\n * Returns last index of [element], or -1 if the list does not contain element.\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\npublic fun <@kotlin.internal.OnlyInputTypes T> List<T>.lastIndexOf(element: T): Int {\n return lastIndexOf(element)\n}\n\n/**\n * Returns the last element, or `null` if the collection is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> Iterable<T>.lastOrNull(): T? {\n when (this) {\n is List -> return if (isEmpty()) null else this[size - 1]\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n var last = iterator.next()\n while (iterator.hasNext())\n last = iterator.next()\n return last\n }\n }\n}\n\n/**\n * Returns the last element, or `null` if the list is empty.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic fun <T> List<T>.lastOrNull(): T? {\n return if (isEmpty()) null else this[size - 1]\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> Iterable<T>.lastOrNull(predicate: (T) -> Boolean): T? {\n var last: T? = null\n for (element in this) {\n if (predicate(element)) {\n last = element\n }\n }\n return last\n}\n\n/**\n * Returns the last element matching the given [predicate], or `null` if no such element was found.\n * \n * @sample samples.collections.Collections.Elements.last\n */\npublic inline fun <T> List<T>.lastOrNull(predicate: (T) -> Boolean): T? {\n val iterator = this.listIterator(size)\n while (iterator.hasPrevious()) {\n val element = iterator.previous()\n if (predicate(element)) return element\n }\n return null\n}\n\n/**\n * Returns a random element from this collection.\n * \n * @throws NoSuchElementException if this collection is empty.\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.random(): T {\n return random(Random)\n}\n\n/**\n * Returns a random element from this collection using the specified source of randomness.\n * \n * @throws NoSuchElementException if this collection is empty.\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> Collection<T>.random(random: Random): T {\n if (isEmpty())\n throw NoSuchElementException(\"Collection is empty.\")\n return elementAt(random.nextInt(size))\n}\n\n/**\n * Returns a random element from this collection, or `null` if this collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.randomOrNull(): T? {\n return randomOrNull(Random)\n}\n\n/**\n * Returns a random element from this collection using the specified source of randomness, or `null` if this collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> Collection<T>.randomOrNull(random: Random): T? {\n if (isEmpty())\n return null\n return elementAt(random.nextInt(size))\n}\n\n/**\n * Returns the single element, or throws an exception if the collection is empty or has more than one element.\n */\npublic fun <T> Iterable<T>.single(): T {\n when (this) {\n is List -> return this.single()\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n throw NoSuchElementException(\"Collection is empty.\")\n val single = iterator.next()\n if (iterator.hasNext())\n throw IllegalArgumentException(\"Collection has more than one element.\")\n return single\n }\n }\n}\n\n/**\n * Returns the single element, or throws an exception if the list is empty or has more than one element.\n */\npublic fun <T> List<T>.single(): T {\n return when (size) {\n 0 -> throw NoSuchElementException(\"List is empty.\")\n 1 -> this[0]\n else -> throw IllegalArgumentException(\"List has more than one element.\")\n }\n}\n\n/**\n * Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element.\n */\npublic inline fun <T> Iterable<T>.single(predicate: (T) -> Boolean): T {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) throw IllegalArgumentException(\"Collection contains more than one matching element.\")\n single = element\n found = true\n }\n }\n if (!found) throw NoSuchElementException(\"Collection contains no element matching the predicate.\")\n @Suppress(\"UNCHECKED_CAST\")\n return single as T\n}\n\n/**\n * Returns single element, or `null` if the collection is empty or has more than one element.\n */\npublic fun <T> Iterable<T>.singleOrNull(): T? {\n when (this) {\n is List -> return if (size == 1) this[0] else null\n else -> {\n val iterator = iterator()\n if (!iterator.hasNext())\n return null\n val single = iterator.next()\n if (iterator.hasNext())\n return null\n return single\n }\n }\n}\n\n/**\n * Returns single element, or `null` if the list is empty or has more than one element.\n */\npublic fun <T> List<T>.singleOrNull(): T? {\n return if (size == 1) this[0] else null\n}\n\n/**\n * Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found.\n */\npublic inline fun <T> Iterable<T>.singleOrNull(predicate: (T) -> Boolean): T? {\n var single: T? = null\n var found = false\n for (element in this) {\n if (predicate(element)) {\n if (found) return null\n single = element\n found = true\n }\n }\n if (!found) return null\n return single\n}\n\n/**\n * Returns a list containing all elements except first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> Iterable<T>.drop(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return toList()\n val list: ArrayList<T>\n if (this is Collection<*>) {\n val resultSize = size - n\n if (resultSize <= 0)\n return emptyList()\n if (resultSize == 1)\n return listOf(last())\n list = ArrayList<T>(resultSize)\n if (this is List<T>) {\n if (this is RandomAccess) {\n for (index in n until size)\n list.add(this[index])\n } else {\n for (item in listIterator(n))\n list.add(item)\n }\n return list\n }\n }\n else {\n list = ArrayList<T>()\n }\n var count = 0\n for (item in this) {\n if (count >= n) list.add(item) else ++count\n }\n return list.optimizeReadOnlyList()\n}\n\n/**\n * Returns a list containing all elements except last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic fun <T> List<T>.dropLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n return take((size - n).coerceAtLeast(0))\n}\n\n/**\n * Returns a list containing all elements except last elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> List<T>.dropLastWhile(predicate: (T) -> Boolean): List<T> {\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n if (!predicate(iterator.previous())) {\n return take(iterator.nextIndex() + 1)\n }\n }\n }\n return emptyList()\n}\n\n/**\n * Returns a list containing all elements except first elements that satisfy the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.drop\n */\npublic inline fun <T> Iterable<T>.dropWhile(predicate: (T) -> Boolean): List<T> {\n var yielding = false\n val list = ArrayList<T>()\n for (item in this)\n if (yielding)\n list.add(item)\n else if (!predicate(item)) {\n list.add(item)\n yielding = true\n }\n return list\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {\n return filterTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing only elements matching the given [predicate].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexed\n */\npublic inline fun <T> Iterable<T>.filterIndexed(predicate: (index: Int, T) -> Boolean): List<T> {\n return filterIndexedTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * @param [predicate] function that takes the index of an element and the element itself\n * and returns the result of predicate evaluation on the element.\n * \n * @sample samples.collections.Collections.Filtering.filterIndexedTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterIndexedTo(destination: C, predicate: (index: Int, T) -> Boolean): C {\n forEachIndexed { index, element ->\n if (predicate(index, element)) destination.add(element)\n }\n return destination\n}\n\n/**\n * Returns a list containing all elements that are instances of specified type parameter R.\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstance\n */\npublic inline fun <reified R> Iterable<*>.filterIsInstance(): List<@kotlin.internal.NoInfer R> {\n return filterIsInstanceTo(ArrayList<R>())\n}\n\n/**\n * Appends all elements that are instances of specified type parameter R to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterIsInstanceTo\n */\npublic inline fun <reified R, C : MutableCollection<in R>> Iterable<*>.filterIsInstanceTo(destination: C): C {\n for (element in this) if (element is R) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n * \n * @sample samples.collections.Collections.Filtering.filter\n */\npublic inline fun <T> Iterable<T>.filterNot(predicate: (T) -> Boolean): List<T> {\n return filterNotTo(ArrayList<T>(), predicate)\n}\n\n/**\n * Returns a list containing all elements that are not `null`.\n * \n * @sample samples.collections.Collections.Filtering.filterNotNull\n */\npublic fun <T : Any> Iterable<T?>.filterNotNull(): List<T> {\n return filterNotNullTo(ArrayList<T>())\n}\n\n/**\n * Appends all elements that are not `null` to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterNotNullTo\n */\npublic fun <C : MutableCollection<in T>, T : Any> Iterable<T?>.filterNotNullTo(destination: C): C {\n for (element in this) if (element != null) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements not matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterNotTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (!predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Appends all elements matching the given [predicate] to the given [destination].\n * \n * @sample samples.collections.Collections.Filtering.filterTo\n */\npublic inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterTo(destination: C, predicate: (T) -> Boolean): C {\n for (element in this) if (predicate(element)) destination.add(element)\n return destination\n}\n\n/**\n * Returns a list containing elements at indices in the specified [indices] range.\n */\npublic fun <T> List<T>.slice(indices: IntRange): List<T> {\n if (indices.isEmpty()) return listOf()\n return this.subList(indices.start, indices.endInclusive + 1).toList()\n}\n\n/**\n * Returns a list containing elements at specified [indices].\n */\npublic fun <T> List<T>.slice(indices: Iterable<Int>): List<T> {\n val size = indices.collectionSizeOrDefault(10)\n if (size == 0) return emptyList()\n val list = ArrayList<T>(size)\n for (index in indices) {\n list.add(get(index))\n }\n return list\n}\n\n/**\n * Returns a list containing first [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> Iterable<T>.take(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n if (this is Collection<T>) {\n if (n >= size) return toList()\n if (n == 1) return listOf(first())\n }\n var count = 0\n val list = ArrayList<T>(n)\n for (item in this) {\n list.add(item)\n if (++count == n)\n break\n }\n return list.optimizeReadOnlyList()\n}\n\n/**\n * Returns a list containing last [n] elements.\n * \n * @throws IllegalArgumentException if [n] is negative.\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic fun <T> List<T>.takeLast(n: Int): List<T> {\n require(n >= 0) { \"Requested element count $n is less than zero.\" }\n if (n == 0) return emptyList()\n val size = size\n if (n >= size) return toList()\n if (n == 1) return listOf(last())\n val list = ArrayList<T>(n)\n if (this is RandomAccess) {\n for (index in size - n until size)\n list.add(this[index])\n } else {\n for (item in listIterator(size - n))\n list.add(item)\n }\n return list\n}\n\n/**\n * Returns a list containing last elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> List<T>.takeLastWhile(predicate: (T) -> Boolean): List<T> {\n if (isEmpty())\n return emptyList()\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n if (!predicate(iterator.previous())) {\n iterator.next()\n val expectedSize = size - iterator.nextIndex()\n if (expectedSize == 0) return emptyList()\n return ArrayList<T>(expectedSize).apply {\n while (iterator.hasNext())\n add(iterator.next())\n }\n }\n }\n return toList()\n}\n\n/**\n * Returns a list containing first elements satisfying the given [predicate].\n * \n * @sample samples.collections.Collections.Transformations.take\n */\npublic inline fun <T> Iterable<T>.takeWhile(predicate: (T) -> Boolean): List<T> {\n val list = ArrayList<T>()\n for (item in this) {\n if (!predicate(item))\n break\n list.add(item)\n }\n return list\n}\n\n/**\n * Reverses elements in the list in-place.\n */\npublic expect fun <T> MutableList<T>.reverse(): Unit\n\n/**\n * Returns a list with elements in reversed order.\n */\npublic fun <T> Iterable<T>.reversed(): List<T> {\n if (this is Collection && size <= 1) return toList()\n val list = toMutableList()\n list.reverse()\n return list\n}\n\n/**\n * Randomly shuffles elements in this list in-place using the specified [random] instance as the source of randomness.\n * \n * See: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\n */\n@SinceKotlin(\"1.3\")\npublic fun <T> MutableList<T>.shuffle(random: Random): Unit {\n for (i in lastIndex downTo 1) {\n val j = random.nextInt(i + 1)\n this[j] = this.set(i, this[j])\n }\n}\n\n/**\n * Sorts elements in the list in-place according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> MutableList<T>.sortBy(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareBy(selector))\n}\n\n/**\n * Sorts elements in the list in-place descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> MutableList<T>.sortByDescending(crossinline selector: (T) -> R?): Unit {\n if (size > 1) sortWith(compareByDescending(selector))\n}\n\n/**\n * Sorts elements in the list in-place descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> MutableList<T>.sortDescending(): Unit {\n sortWith(reverseOrder())\n}\n\n/**\n * Returns a list of all elements sorted according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Iterable<T>.sorted(): List<T> {\n if (this is Collection) {\n if (size <= 1) return this.toList()\n @Suppress(\"UNCHECKED_CAST\")\n return (toTypedArray<Comparable<T>>() as Array<T>).apply { sort() }.asList()\n }\n return toMutableList().apply { sort() }\n}\n\n/**\n * Returns a list of all elements sorted according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n * \n * @sample samples.collections.Collections.Sorting.sortedBy\n */\npublic inline fun <T, R : Comparable<R>> Iterable<T>.sortedBy(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareBy(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to natural sort order of the value returned by specified [selector] function.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic inline fun <T, R : Comparable<R>> Iterable<T>.sortedByDescending(crossinline selector: (T) -> R?): List<T> {\n return sortedWith(compareByDescending(selector))\n}\n\n/**\n * Returns a list of all elements sorted descending according to their natural sort order.\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T : Comparable<T>> Iterable<T>.sortedDescending(): List<T> {\n return sortedWith(reverseOrder())\n}\n\n/**\n * Returns a list of all elements sorted according to the specified [comparator].\n * \n * The sort is _stable_. It means that equal elements preserve their order relative to each other after sorting.\n */\npublic fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T> {\n if (this is Collection) {\n if (size <= 1) return this.toList()\n @Suppress(\"UNCHECKED_CAST\")\n return (toTypedArray<Any?>() as Array<T>).apply { sortWith(comparator) }.asList()\n }\n return toMutableList().apply { sortWith(comparator) }\n}\n\n/**\n * Returns an array of Boolean containing all of the elements of this collection.\n */\npublic fun Collection<Boolean>.toBooleanArray(): BooleanArray {\n val result = BooleanArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Byte containing all of the elements of this collection.\n */\npublic fun Collection<Byte>.toByteArray(): ByteArray {\n val result = ByteArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Char containing all of the elements of this collection.\n */\npublic fun Collection<Char>.toCharArray(): CharArray {\n val result = CharArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Double containing all of the elements of this collection.\n */\npublic fun Collection<Double>.toDoubleArray(): DoubleArray {\n val result = DoubleArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Float containing all of the elements of this collection.\n */\npublic fun Collection<Float>.toFloatArray(): FloatArray {\n val result = FloatArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Int containing all of the elements of this collection.\n */\npublic fun Collection<Int>.toIntArray(): IntArray {\n val result = IntArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Long containing all of the elements of this collection.\n */\npublic fun Collection<Long>.toLongArray(): LongArray {\n val result = LongArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns an array of Short containing all of the elements of this collection.\n */\npublic fun Collection<Short>.toShortArray(): ShortArray {\n val result = ShortArray(size)\n var index = 0\n for (element in this)\n result[index++] = element\n return result\n}\n\n/**\n * Returns a [Map] containing key-value pairs provided by [transform] function\n * applied to elements of the given collection.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associate\n */\npublic inline fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateTo(LinkedHashMap<K, V>(capacity), transform)\n}\n\n/**\n * Returns a [Map] containing the elements from the given collection indexed by the key\n * returned from [keySelector] function applied to each element.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateBy\n */\npublic inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, T>(capacity), keySelector)\n}\n\n/**\n * Returns a [Map] containing the values provided by [valueTransform] and indexed by [keySelector] functions applied to elements of the given collection.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateByWithValueTransform\n */\npublic inline fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V> {\n val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16)\n return associateByTo(LinkedHashMap<K, V>(capacity), keySelector, valueTransform)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function applied to each element of the given collection\n * and value is the element itself.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateByTo\n */\npublic inline fun <T, K, M : MutableMap<in K, in T>> Iterable<T>.associateByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n destination.put(keySelector(element), element)\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs,\n * where key is provided by the [keySelector] function and\n * and value is provided by the [valueTransform] function applied to elements of the given collection.\n * \n * If any two elements would have the same key returned by [keySelector] the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateByToWithValueTransform\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n destination.put(keySelector(element), valueTransform(element))\n }\n return destination\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs\n * provided by [transform] function applied to each element of the given collection.\n * \n * If any of two pairs would have the same key the last one gets added to the map.\n * \n * @sample samples.collections.Collections.Transformations.associateTo\n */\npublic inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateTo(destination: M, transform: (T) -> Pair<K, V>): M {\n for (element in this) {\n destination += transform(element)\n }\n return destination\n}\n\n/**\n * Returns a [Map] where keys are elements from the given collection and values are\n * produced by the [valueSelector] function applied to each element.\n * \n * If any two elements are equal, the last one gets added to the map.\n * \n * The returned map preserves the entry iteration order of the original collection.\n * \n * @sample samples.collections.Collections.Transformations.associateWith\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V> Iterable<K>.associateWith(valueSelector: (K) -> V): Map<K, V> {\n val result = LinkedHashMap<K, V>(mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16))\n return associateWithTo(result, valueSelector)\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs for each element of the given collection,\n * where key is the element itself and value is provided by the [valueSelector] function applied to that key.\n * \n * If any two elements are equal, the last one overwrites the former value in the map.\n * \n * @sample samples.collections.Collections.Transformations.associateWithTo\n */\n@SinceKotlin(\"1.3\")\npublic inline fun <K, V, M : MutableMap<in K, in V>> Iterable<K>.associateWithTo(destination: M, valueSelector: (K) -> V): M {\n for (element in this) {\n destination.put(element, valueSelector(element))\n }\n return destination\n}\n\n/**\n * Appends all elements to the given [destination] collection.\n */\npublic fun <T, C : MutableCollection<in T>> Iterable<T>.toCollection(destination: C): C {\n for (item in this) {\n destination.add(item)\n }\n return destination\n}\n\n/**\n * Returns a new [HashSet] of all elements.\n */\npublic fun <T> Iterable<T>.toHashSet(): HashSet<T> {\n return toCollection(HashSet<T>(mapCapacity(collectionSizeOrDefault(12))))\n}\n\n/**\n * Returns a [List] containing all elements.\n */\npublic fun <T> Iterable<T>.toList(): List<T> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptyList()\n 1 -> listOf(if (this is List) get(0) else iterator().next())\n else -> this.toMutableList()\n }\n }\n return this.toMutableList().optimizeReadOnlyList()\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this collection.\n */\npublic fun <T> Iterable<T>.toMutableList(): MutableList<T> {\n if (this is Collection<T>)\n return this.toMutableList()\n return toCollection(ArrayList<T>())\n}\n\n/**\n * Returns a new [MutableList] filled with all elements of this collection.\n */\npublic fun <T> Collection<T>.toMutableList(): MutableList<T> {\n return ArrayList(this)\n}\n\n/**\n * Returns a [Set] of all elements.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic fun <T> Iterable<T>.toSet(): Set<T> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptySet()\n 1 -> setOf(if (this is List) this[0] else iterator().next())\n else -> toCollection(LinkedHashSet<T>(mapCapacity(size)))\n }\n }\n return toCollection(LinkedHashSet<T>()).optimizeReadOnlySet()\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\npublic inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMap\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequence\")\npublic inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Sequence<R>): List<R> {\n return flatMapTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterable\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Returns a single list of all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.flatMapIndexed\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequence\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Sequence<R>): List<R> {\n return flatMapIndexedTo(ArrayList<R>(), transform)\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedIterableTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element\n * and its index in the original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapIndexedSequenceTo\")\n@kotlin.internal.InlineOnly\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Sequence<R>): C {\n var index = 0\n for (element in this) {\n val list = transform(checkIndexOverflow(index++), element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original collection, to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapTo(destination: C, transform: (T) -> Iterable<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Appends all elements yielded from results of [transform] function being invoked on each element of original collection, to the given [destination].\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"flatMapSequenceTo\")\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapTo(destination: C, transform: (T) -> Sequence<R>): C {\n for (element in this) {\n val list = transform(element)\n destination.addAll(list)\n }\n return destination\n}\n\n/**\n * Groups elements of the original collection by the key returned by the given [keySelector] function\n * applied to each element and returns a map where each group key is associated with a list of corresponding elements.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original collection.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K> Iterable<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {\n return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original collection\n * by the key returned by the given [keySelector] function applied to the element\n * and returns a map where each group key is associated with a list of corresponding values.\n * \n * The returned map preserves the entry iteration order of the keys produced from the original collection.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V> Iterable<T>.groupBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, List<V>> {\n return groupByTo(LinkedHashMap<K, MutableList<V>>(), keySelector, valueTransform)\n}\n\n/**\n * Groups elements of the original collection by the key returned by the given [keySelector] function\n * applied to each element and puts to the [destination] map each group key associated with a list of corresponding elements.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupBy\n */\npublic inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<T>() }\n list.add(element)\n }\n return destination\n}\n\n/**\n * Groups values returned by the [valueTransform] function applied to each element of the original collection\n * by the key returned by the given [keySelector] function applied to the element\n * and puts to the [destination] map each group key associated with a list of corresponding values.\n * \n * @return The [destination] map.\n * \n * @sample samples.collections.Collections.Transformations.groupByKeysAndValues\n */\npublic inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K, valueTransform: (T) -> V): M {\n for (element in this) {\n val key = keySelector(element)\n val list = destination.getOrPut(key) { ArrayList<V>() }\n list.add(valueTransform(element))\n }\n return destination\n}\n\n/**\n * Creates a [Grouping] source from a collection to be used later with one of group-and-fold operations\n * using the specified [keySelector] function to extract a key from each element.\n * \n * @sample samples.collections.Grouping.groupingByEachCount\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, K> Iterable<T>.groupingBy(crossinline keySelector: (T) -> K): Grouping<T, K> {\n return object : Grouping<T, K> {\n override fun sourceIterator(): Iterator<T> = this@groupingBy.iterator()\n override fun keyOf(element: T): K = keySelector(element)\n }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.map\n */\npublic inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {\n return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to each element and its index in the original collection.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R> Iterable<T>.mapIndexed(transform: (index: Int, T) -> R): List<R> {\n return mapIndexedTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element and its index in the original collection.\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any> Iterable<T>.mapIndexedNotNull(transform: (index: Int, T) -> R?): List<R> {\n return mapIndexedNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original collection\n * and appends only the non-null results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Iterable<T>.mapIndexedNotNullTo(destination: C, transform: (index: Int, T) -> R?): C {\n forEachIndexed { index, element -> transform(index, element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element and its index in the original collection\n * and appends the results to the given [destination].\n * @param [transform] function that takes the index of an element and the element itself\n * and returns the result of the transform applied to the element.\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapIndexedTo(destination: C, transform: (index: Int, T) -> R): C {\n var index = 0\n for (item in this)\n destination.add(transform(checkIndexOverflow(index++), item))\n return destination\n}\n\n/**\n * Returns a list containing only the non-null results of applying the given [transform] function\n * to each element in the original collection.\n * \n * @sample samples.collections.Collections.Transformations.mapNotNull\n */\npublic inline fun <T, R : Any> Iterable<T>.mapNotNull(transform: (T) -> R?): List<R> {\n return mapNotNullTo(ArrayList<R>(), transform)\n}\n\n/**\n * Applies the given [transform] function to each element in the original collection\n * and appends only the non-null results to the given [destination].\n */\npublic inline fun <T, R : Any, C : MutableCollection<in R>> Iterable<T>.mapNotNullTo(destination: C, transform: (T) -> R?): C {\n forEach { element -> transform(element)?.let { destination.add(it) } }\n return destination\n}\n\n/**\n * Applies the given [transform] function to each element of the original collection\n * and appends the results to the given [destination].\n */\npublic inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapTo(destination: C, transform: (T) -> R): C {\n for (item in this)\n destination.add(transform(item))\n return destination\n}\n\n/**\n * Returns a lazy [Iterable] that wraps each element of the original collection\n * into an [IndexedValue] containing the index of that element and the element itself.\n */\npublic fun <T> Iterable<T>.withIndex(): Iterable<IndexedValue<T>> {\n return IndexingIterable { iterator() }\n}\n\n/**\n * Returns a list containing only distinct elements from the given collection.\n * \n * Among equal elements of the given collection, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source collection.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic fun <T> Iterable<T>.distinct(): List<T> {\n return this.toMutableSet().toList()\n}\n\n/**\n * Returns a list containing only elements from the given collection\n * having distinct keys returned by the given [selector] function.\n * \n * Among elements of the given collection with equal keys, only the first one will be present in the resulting list.\n * The elements in the resulting list are in the same order as they were in the source collection.\n * \n * @sample samples.collections.Collections.Transformations.distinctAndDistinctBy\n */\npublic inline fun <T, K> Iterable<T>.distinctBy(selector: (T) -> K): List<T> {\n val set = HashSet<K>()\n val list = ArrayList<T>()\n for (e in this) {\n val key = selector(e)\n if (set.add(key))\n list.add(e)\n }\n return list\n}\n\n/**\n * Returns a set containing all elements that are contained by both this collection and the specified collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n * \n * To get a set containing all elements that are contained at least in one of these collections use [union].\n */\npublic infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.retainAll(other)\n return set\n}\n\n/**\n * Returns a set containing all elements that are contained by this collection and not contained by the specified collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic infix fun <T> Iterable<T>.subtract(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.removeAll(other)\n return set\n}\n\n/**\n * Returns a new [MutableSet] containing all distinct elements from the given collection.\n * \n * The returned set preserves the element iteration order of the original collection.\n */\npublic fun <T> Iterable<T>.toMutableSet(): MutableSet<T> {\n return when (this) {\n is Collection<T> -> LinkedHashSet(this)\n else -> toCollection(LinkedHashSet<T>())\n }\n}\n\n/**\n * Returns a set containing all distinct elements from both collections.\n * \n * The returned set preserves the element iteration order of the original collection.\n * Those elements of the [other] collection that are unique are iterated in the end\n * in the order of the [other] collection.\n * \n * To get a set containing all elements that are contained in both collections use [intersect].\n */\npublic infix fun <T> Iterable<T>.union(other: Iterable<T>): Set<T> {\n val set = this.toMutableSet()\n set.addAll(other)\n return set\n}\n\n/**\n * Returns `true` if all elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.all\n */\npublic inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return true\n for (element in this) if (!predicate(element)) return false\n return true\n}\n\n/**\n * Returns `true` if collection has at least one element.\n * \n * @sample samples.collections.Collections.Aggregates.any\n */\npublic fun <T> Iterable<T>.any(): Boolean {\n if (this is Collection) return !isEmpty()\n return iterator().hasNext()\n}\n\n/**\n * Returns `true` if at least one element matches the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.anyWithPredicate\n */\npublic inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return false\n for (element in this) if (predicate(element)) return true\n return false\n}\n\n/**\n * Returns the number of elements in this collection.\n */\npublic fun <T> Iterable<T>.count(): Int {\n if (this is Collection) return size\n var count = 0\n for (element in this) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Returns the number of elements in this collection.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.count(): Int {\n return size\n}\n\n/**\n * Returns the number of elements matching the given [predicate].\n */\npublic inline fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int {\n if (this is Collection && isEmpty()) return 0\n var count = 0\n for (element in this) if (predicate(element)) checkCountOverflow(++count)\n return count\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns the specified [initial] value if the collection is empty.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R {\n var accumulator = initial\n for (element in this) accumulator = operation(accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Returns the specified [initial] value if the collection is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n */\npublic inline fun <T, R> Iterable<T>.foldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): R {\n var index = 0\n var accumulator = initial\n for (element in this) accumulator = operation(checkIndexOverflow(index++), accumulator, element)\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns the specified [initial] value if the list is empty.\n * \n * @param [operation] function that takes an element and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> List<T>.foldRight(initial: R, operation: (T, acc: R) -> R): R {\n var accumulator = initial\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with [initial] value and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Returns the specified [initial] value if the list is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself\n * and current accumulator value, and calculates the next accumulator value.\n */\npublic inline fun <T, R> List<T>.foldRightIndexed(initial: R, operation: (index: Int, T, acc: R) -> R): R {\n var accumulator = initial\n if (!isEmpty()) {\n val iterator = listIterator(size)\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n }\n return accumulator\n}\n\n/**\n * Performs the given [action] on each element.\n */\n@kotlin.internal.HidesMembers\npublic inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {\n for (element in this) action(element)\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\npublic inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {\n var index = 0\n for (item in this) action(checkIndexOverflow(index++), item)\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Double>.max(): Double? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Float>.max(): Float? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxOrNull instead.\", ReplaceWith(\"this.maxOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.max(): T? {\n return maxOrNull()\n}\n\n@Deprecated(\"Use maxByOrNull instead.\", ReplaceWith(\"this.maxByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {\n return maxByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the largest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.maxByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxElem = iterator.next()\n if (!iterator.hasNext()) return maxElem\n var maxValue = selector(maxElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (maxValue < v) {\n maxElem = e\n maxValue = v\n }\n } while (iterator.hasNext())\n return maxElem\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.maxOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n maxValue = maxOf(maxValue, v)\n }\n return maxValue\n}\n\n/**\n * Returns the largest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.maxOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (maxValue < v) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.maxOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.maxOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var maxValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(maxValue, v) < 0) {\n maxValue = v\n }\n }\n return maxValue\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Double>.maxOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Float>.maxOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n max = maxOf(max, e)\n }\n return max\n}\n\n/**\n * Returns the largest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.maxOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (max < e) max = e\n }\n return max\n}\n\n@Deprecated(\"Use maxWithOrNull instead.\", ReplaceWith(\"this.maxWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Iterable<T>.maxWith(comparator: Comparator<in T>): T? {\n return maxWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the largest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Iterable<T>.maxWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var max = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(max, e) < 0) max = e\n }\n return max\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Double>.min(): Double? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\n@SinceKotlin(\"1.1\")\npublic fun Iterable<Float>.min(): Float? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minOrNull instead.\", ReplaceWith(\"this.minOrNull()\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.min(): T? {\n return minOrNull()\n}\n\n@Deprecated(\"Use minByOrNull instead.\", ReplaceWith(\"this.minByOrNull(selector)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minBy(selector: (T) -> R): T? {\n return minByOrNull(selector)\n}\n\n/**\n * Returns the first element yielding the smallest value of the given function or `null` if there are no elements.\n * \n * @sample samples.collections.Collections.Aggregates.minByOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minByOrNull(selector: (T) -> R): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minElem = iterator.next()\n if (!iterator.hasNext()) return minElem\n var minValue = selector(minElem)\n do {\n val e = iterator.next()\n val v = selector(e)\n if (minValue > v) {\n minElem = e\n minValue = v\n }\n } while (iterator.hasNext())\n return minElem\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOf(selector: (T) -> Double): Double {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOf(selector: (T) -> Float): Float {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minOf(selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOfOrNull(selector: (T) -> Double): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n * \n * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minOfOrNull(selector: (T) -> Float): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n minValue = minOf(minValue, v)\n }\n return minValue\n}\n\n/**\n * Returns the smallest value among all values produced by [selector] function\n * applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R : Comparable<R>> Iterable<T>.minOfOrNull(selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (minValue > v) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection.\n * \n * @throws NoSuchElementException if the collection is empty.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.minOfWith(comparator: Comparator<in R>, selector: (T) -> R): R {\n val iterator = iterator()\n if (!iterator.hasNext()) throw NoSuchElementException()\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest value according to the provided [comparator]\n * among all values produced by [selector] function applied to each element in the collection or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> Iterable<T>.minOfWithOrNull(comparator: Comparator<in R>, selector: (T) -> R): R? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var minValue = selector(iterator.next())\n while (iterator.hasNext()) {\n val v = selector(iterator.next())\n if (comparator.compare(minValue, v) > 0) {\n minValue = v\n }\n }\n return minValue\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Double>.minOrNull(): Double? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n * \n * If any of elements is `NaN` returns `NaN`.\n */\n@SinceKotlin(\"1.4\")\npublic fun Iterable<Float>.minOrNull(): Float? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n min = minOf(min, e)\n }\n return min\n}\n\n/**\n * Returns the smallest element or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T : Comparable<T>> Iterable<T>.minOrNull(): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (min > e) min = e\n }\n return min\n}\n\n@Deprecated(\"Use minWithOrNull instead.\", ReplaceWith(\"this.minWithOrNull(comparator)\"))\n@DeprecatedSinceKotlin(warningSince = \"1.4\")\npublic fun <T> Iterable<T>.minWith(comparator: Comparator<in T>): T? {\n return minWithOrNull(comparator)\n}\n\n/**\n * Returns the first element having the smallest value according to the provided [comparator] or `null` if there are no elements.\n */\n@SinceKotlin(\"1.4\")\npublic fun <T> Iterable<T>.minWithOrNull(comparator: Comparator<in T>): T? {\n val iterator = iterator()\n if (!iterator.hasNext()) return null\n var min = iterator.next()\n while (iterator.hasNext()) {\n val e = iterator.next()\n if (comparator.compare(min, e) > 0) min = e\n }\n return min\n}\n\n/**\n * Returns `true` if the collection has no elements.\n * \n * @sample samples.collections.Collections.Aggregates.none\n */\npublic fun <T> Iterable<T>.none(): Boolean {\n if (this is Collection) return isEmpty()\n return !iterator().hasNext()\n}\n\n/**\n * Returns `true` if no elements match the given [predicate].\n * \n * @sample samples.collections.Collections.Aggregates.noneWithPredicate\n */\npublic inline fun <T> Iterable<T>.none(predicate: (T) -> Boolean): Boolean {\n if (this is Collection && isEmpty()) return true\n for (element in this) if (predicate(element)) return false\n return true\n}\n\n/**\n * Performs the given [action] on each element and returns the collection itself afterwards.\n */\n@SinceKotlin(\"1.1\")\npublic inline fun <T, C : Iterable<T>> C.onEach(action: (T) -> Unit): C {\n return apply { for (element in this) action(element) }\n}\n\n/**\n * Performs the given [action] on each element, providing sequential index with the element,\n * and returns the collection itself afterwards.\n * @param [action] function that takes the index of an element and the element itself\n * and performs the action on the element.\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, C : Iterable<T>> C.onEachIndexed(action: (index: Int, T) -> Unit): C {\n return apply { forEachIndexed(action) }\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Throws an exception if this collection is empty. If the collection can be empty in an expected way,\n * please use [reduceOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty collection can't be reduced.\")\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Throws an exception if this collection is empty. If the collection can be empty in an expected way,\n * please use [reduceIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduce\n */\npublic inline fun <S, T : S> Iterable<T>.reduceIndexed(operation: (index: Int, acc: S, T) -> S): S {\n val iterator = this.iterator()\n if (!iterator.hasNext()) throw UnsupportedOperationException(\"Empty collection can't be reduced.\")\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element with its index in the original collection.\n * \n * Returns `null` if the collection is empty.\n * \n * @param [operation] function that takes the index of an element, current accumulator value and the element itself,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Iterable<T>.reduceIndexedOrNull(operation: (index: Int, acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var index = 1\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(checkIndexOverflow(index++), accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the first element and applying [operation] from left to right\n * to current accumulator value and each element.\n * \n * Returns `null` if the collection is empty.\n * \n * @param [operation] function that takes current accumulator value and an element,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Iterable<T>.reduceOrNull(operation: (acc: S, T) -> S): S? {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return null\n var accumulator: S = iterator.next()\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Throws an exception if this list is empty. If the list can be empty in an expected way,\n * please use [reduceRightOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> List<T>.reduceRight(operation: (T, acc: S) -> S): S {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n throw UnsupportedOperationException(\"Empty list can't be reduced.\")\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Throws an exception if this list is empty. If the list can be empty in an expected way,\n * please use [reduceRightIndexedOrNull] instead. It returns `null` when its receiver is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRight\n */\npublic inline fun <S, T : S> List<T>.reduceRightIndexed(operation: (index: Int, T, acc: S) -> S): S {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n throw UnsupportedOperationException(\"Empty list can't be reduced.\")\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element with its index in the original list and current accumulator value.\n * \n * Returns `null` if the list is empty.\n * \n * @param [operation] function that takes the index of an element, the element itself and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> List<T>.reduceRightIndexedOrNull(operation: (index: Int, T, acc: S) -> S): S? {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n return null\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n val index = iterator.previousIndex()\n accumulator = operation(index, iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Accumulates value starting with the last element and applying [operation] from right to left\n * to each element and current accumulator value.\n * \n * Returns `null` if the list is empty.\n * \n * @param [operation] function that takes an element and current accumulator value,\n * and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.reduceRightOrNull\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> List<T>.reduceRightOrNull(operation: (T, acc: S) -> S): S? {\n val iterator = listIterator(size)\n if (!iterator.hasPrevious())\n return null\n var accumulator: S = iterator.previous()\n while (iterator.hasPrevious()) {\n accumulator = operation(iterator.previous(), accumulator)\n }\n return accumulator\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Iterable<T>.runningFold(initial: R, operation: (acc: R, T) -> R): List<R> {\n val estimatedSize = collectionSizeOrDefault(9)\n if (estimatedSize == 0) return listOf(initial)\n val result = ArrayList<R>(estimatedSize + 1).apply { add(initial) }\n var accumulator = initial\n for (element in this) {\n accumulator = operation(accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningFold\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <T, R> Iterable<T>.runningFoldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n val estimatedSize = collectionSizeOrDefault(9)\n if (estimatedSize == 0) return listOf(initial)\n val result = ArrayList<R>(estimatedSize + 1).apply { add(initial) }\n var index = 0\n var accumulator = initial\n for (element in this) {\n accumulator = operation(index++, accumulator, element)\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with the first element of this collection.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and the element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <S, T : S> Iterable<T>.runningReduce(operation: (acc: S, T) -> S): List<S> {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return emptyList()\n var accumulator: S = iterator.next()\n val result = ArrayList<S>(collectionSizeOrDefault(10)).apply { add(accumulator) }\n while (iterator.hasNext()) {\n accumulator = operation(accumulator, iterator.next())\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with the first element of this collection.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.runningReduce\n */\n@SinceKotlin(\"1.4\")\npublic inline fun <S, T : S> Iterable<T>.runningReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n val iterator = this.iterator()\n if (!iterator.hasNext()) return emptyList()\n var accumulator: S = iterator.next()\n val result = ArrayList<S>(collectionSizeOrDefault(10)).apply { add(accumulator) }\n var index = 1\n while (iterator.hasNext()) {\n accumulator = operation(index++, accumulator, iterator.next())\n result.add(accumulator)\n }\n return result\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes current accumulator value and an element, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Iterable<T>.scan(initial: R, operation: (acc: R, T) -> R): List<R> {\n return runningFold(initial, operation)\n}\n\n/**\n * Returns a list containing successive accumulation values generated by applying [operation] from left to right\n * to each element, its index in the original collection and current accumulator value that starts with [initial] value.\n * \n * Note that `acc` value passed to [operation] function should not be mutated;\n * otherwise it would affect the previous value in resulting list.\n * \n * @param [operation] function that takes the index of an element, current accumulator value\n * and the element itself, and calculates the next accumulator value.\n * \n * @sample samples.collections.Collections.Aggregates.scan\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic inline fun <T, R> Iterable<T>.scanIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): List<R> {\n return runningFoldIndexed(initial, operation)\n}\n\n@Deprecated(\"Use runningReduce instead.\", ReplaceWith(\"runningReduce(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Iterable<T>.scanReduce(operation: (acc: S, T) -> S): List<S> {\n return runningReduce(operation)\n}\n\n@Deprecated(\"Use runningReduceIndexed instead.\", ReplaceWith(\"runningReduceIndexed(operation)\"), level = DeprecationLevel.ERROR)\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\npublic inline fun <S, T : S> Iterable<T>.scanReduceIndexed(operation: (index: Int, acc: S, T) -> S): List<S> {\n return runningReduceIndexed(operation)\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\npublic inline fun <T> Iterable<T>.sumBy(selector: (T) -> Int): Int {\n var sum: Int = 0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\npublic inline fun <T> Iterable<T>.sumByDouble(selector: (T) -> Double): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfDouble\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Double): Double {\n var sum: Double = 0.toDouble()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfInt\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Int): Int {\n var sum: Int = 0.toInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfLong\")\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> Long): Long {\n var sum: Long = 0.toLong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfUInt\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> UInt): UInt {\n var sum: UInt = 0.toUInt()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns the sum of all values produced by [selector] function applied to each element in the collection.\n */\n@SinceKotlin(\"1.4\")\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@kotlin.jvm.JvmName(\"sumOfULong\")\n@ExperimentalUnsignedTypes\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.sumOf(selector: (T) -> ULong): ULong {\n var sum: ULong = 0.toULong()\n for (element in this) {\n sum += selector(element)\n }\n return sum\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n */\npublic fun <T : Any> Iterable<T?>.requireNoNulls(): Iterable<T> {\n for (element in this) {\n if (element == null) {\n throw IllegalArgumentException(\"null element found in $this.\")\n }\n }\n @Suppress(\"UNCHECKED_CAST\")\n return this as Iterable<T>\n}\n\n/**\n * Returns an original collection containing all the non-`null` elements, throwing an [IllegalArgumentException] if there are any `null` elements.\n */\npublic fun <T : Any> List<T?>.requireNoNulls(): List<T> {\n for (element in this) {\n if (element == null) {\n throw IllegalArgumentException(\"null element found in $this.\")\n }\n }\n @Suppress(\"UNCHECKED_CAST\")\n return this as List<T>\n}\n\n/**\n * Splits this collection into a list of lists each not exceeding the given [size].\n * \n * The last list in the resulting list may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this collection.\n * \n * @sample samples.collections.Collections.Transformations.chunked\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.chunked(size: Int): List<List<T>> {\n return windowed(size, size, partialWindows = true)\n}\n\n/**\n * Splits this collection into several lists each not exceeding the given [size]\n * and applies the given [transform] function to an each.\n * \n * @return list of results of the [transform] applied to an each list.\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * The last list may have fewer elements than the given [size].\n * \n * @param size the number of elements to take in each list, must be positive and can be greater than the number of elements in this collection.\n * \n * @sample samples.text.Strings.chunkedTransform\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Iterable<T>.chunked(size: Int, transform: (List<T>) -> R): List<R> {\n return windowed(size, size, partialWindows = true, transform = transform)\n}\n\n/**\n * Returns a list containing all elements of the original collection without the first occurrence of the given [element].\n */\npublic operator fun <T> Iterable<T>.minus(element: T): List<T> {\n val result = ArrayList<T>(collectionSizeOrDefault(10))\n var removed = false\n return this.filterTo(result) { if (!removed && it == element) { removed = true; false } else true }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] array.\n * \n * The [elements] array may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Array<out T>): List<T> {\n if (elements.isEmpty()) return this.toList()\n val other = elements.toHashSet()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] collection.\n * \n * The [elements] collection may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Iterable<T>): List<T> {\n val other = elements.convertToSetForSetOperationWith(this)\n if (other.isEmpty())\n return this.toList()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection except the elements contained in the given [elements] sequence.\n * \n * The [elements] sequence may be converted to a [HashSet] to speed up the operation, thus the elements are required to have\n * a correct and stable implementation of `hashCode()` that doesn't change between successive invocations.\n */\npublic operator fun <T> Iterable<T>.minus(elements: Sequence<T>): List<T> {\n val other = elements.toHashSet()\n if (other.isEmpty())\n return this.toList()\n return this.filterNot { it in other }\n}\n\n/**\n * Returns a list containing all elements of the original collection without the first occurrence of the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.minusElement(element: T): List<T> {\n return minus(element)\n}\n\n/**\n * Splits the original collection into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n * \n * @sample samples.collections.Iterables.Operations.partition\n */\npublic inline fun <T> Iterable<T>.partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {\n val first = ArrayList<T>()\n val second = ArrayList<T>()\n for (element in this) {\n if (predicate(element)) {\n first.add(element)\n } else {\n second.add(element)\n }\n }\n return Pair(first, second)\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\npublic operator fun <T> Iterable<T>.plus(element: T): List<T> {\n if (this is Collection) return this.plus(element)\n val result = ArrayList<T>()\n result.addAll(this)\n result.add(element)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\npublic operator fun <T> Collection<T>.plus(element: T): List<T> {\n val result = ArrayList<T>(size + 1)\n result.addAll(this)\n result.add(element)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] array.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Array<out T>): List<T> {\n if (this is Collection) return this.plus(elements)\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] array.\n */\npublic operator fun <T> Collection<T>.plus(elements: Array<out T>): List<T> {\n val result = ArrayList<T>(this.size + elements.size)\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] collection.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Iterable<T>): List<T> {\n if (this is Collection) return this.plus(elements)\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] collection.\n */\npublic operator fun <T> Collection<T>.plus(elements: Iterable<T>): List<T> {\n if (elements is Collection) {\n val result = ArrayList<T>(this.size + elements.size)\n result.addAll(this)\n result.addAll(elements)\n return result\n } else {\n val result = ArrayList<T>(this)\n result.addAll(elements)\n return result\n }\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] sequence.\n */\npublic operator fun <T> Iterable<T>.plus(elements: Sequence<T>): List<T> {\n val result = ArrayList<T>()\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then all elements of the given [elements] sequence.\n */\npublic operator fun <T> Collection<T>.plus(elements: Sequence<T>): List<T> {\n val result = ArrayList<T>(this.size + 10)\n result.addAll(this)\n result.addAll(elements)\n return result\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.plusElement(element: T): List<T> {\n return plus(element)\n}\n\n/**\n * Returns a list containing all elements of the original collection and then the given [element].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Collection<T>.plusElement(element: T): List<T> {\n return plus(element)\n}\n\n/**\n * Returns a list of snapshots of the window of the given [size]\n * sliding along this collection with the given [step], where each\n * snapshot is a list.\n * \n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this collection.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.takeWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<List<T>> {\n checkWindowSizeStep(size, step)\n if (this is RandomAccess && this is List) {\n val thisSize = this.size\n val resultCapacity = thisSize / step + if (thisSize % step == 0) 0 else 1\n val result = ArrayList<List<T>>(resultCapacity)\n var index = 0\n while (index in 0 until thisSize) {\n val windowSize = size.coerceAtMost(thisSize - index)\n if (windowSize < size && !partialWindows) break\n result.add(List(windowSize) { this[it + index] })\n index += step\n }\n return result\n }\n val result = ArrayList<List<T>>()\n windowedIterator(iterator(), size, step, partialWindows, reuseBuffer = false).forEach {\n result.add(it)\n }\n return result\n}\n\n/**\n * Returns a list of results of applying the given [transform] function to\n * an each list representing a view over the window of the given [size]\n * sliding along this collection with the given [step].\n * \n * Note that the list passed to the [transform] function is ephemeral and is valid only inside that function.\n * You should not store it or allow it to escape in some way, unless you made a snapshot of it.\n * Several last lists may have fewer elements than the given [size].\n * \n * Both [size] and [step] must be positive and can be greater than the number of elements in this collection.\n * @param size the number of elements to take in each window\n * @param step the number of elements to move the window forward by on an each step, by default 1\n * @param partialWindows controls whether or not to keep partial windows in the end if any,\n * by default `false` which means partial windows won't be preserved\n * \n * @sample samples.collections.Sequences.Transformations.averageWindows\n */\n@SinceKotlin(\"1.2\")\npublic fun <T, R> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (List<T>) -> R): List<R> {\n checkWindowSizeStep(size, step)\n if (this is RandomAccess && this is List) {\n val thisSize = this.size\n val resultCapacity = thisSize / step + if (thisSize % step == 0) 0 else 1\n val result = ArrayList<R>(resultCapacity)\n val window = MovingSubList(this)\n var index = 0\n while (index in 0 until thisSize) {\n val windowSize = size.coerceAtMost(thisSize - index)\n if (!partialWindows && windowSize < size) break\n window.move(index, index + windowSize)\n result.add(transform(window))\n index += step\n }\n return result\n }\n val result = ArrayList<R>()\n windowedIterator(iterator(), size, step, partialWindows, reuseBuffer = true).forEach {\n result.add(transform(it))\n }\n return result\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and the [other] array with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Iterable<T>.zip(other: Array<out R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` collection and the [other] array with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Iterable<T>.zip(other: Array<out R>, transform: (a: T, b: R) -> V): List<V> {\n val arraySize = other.size\n val list = ArrayList<V>(minOf(collectionSizeOrDefault(10), arraySize))\n var i = 0\n for (element in this) {\n if (i >= arraySize) break\n list.add(transform(element, other[i++]))\n }\n return list\n}\n\n/**\n * Returns a list of pairs built from the elements of `this` collection and [other] collection with the same index.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterable\n */\npublic infix fun <T, R> Iterable<T>.zip(other: Iterable<R>): List<Pair<T, R>> {\n return zip(other) { t1, t2 -> t1 to t2 }\n}\n\n/**\n * Returns a list of values built from the elements of `this` collection and the [other] collection with the same index\n * using the provided [transform] function applied to each pair of elements.\n * The returned list has length of the shortest collection.\n * \n * @sample samples.collections.Iterables.Operations.zipIterableWithTransform\n */\npublic inline fun <T, R, V> Iterable<T>.zip(other: Iterable<R>, transform: (a: T, b: R) -> V): List<V> {\n val first = iterator()\n val second = other.iterator()\n val list = ArrayList<V>(minOf(collectionSizeOrDefault(10), other.collectionSizeOrDefault(10)))\n while (first.hasNext() && second.hasNext()) {\n list.add(transform(first.next(), second.next()))\n }\n return list\n}\n\n/**\n * Returns a list of pairs of each two adjacent elements in this collection.\n * \n * The returned list is empty if this collection contains less than two elements.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNext\n */\n@SinceKotlin(\"1.2\")\npublic fun <T> Iterable<T>.zipWithNext(): List<Pair<T, T>> {\n return zipWithNext { a, b -> a to b }\n}\n\n/**\n * Returns a list containing the results of applying the given [transform] function\n * to an each pair of two adjacent elements in this collection.\n * \n * The returned list is empty if this collection contains less than two elements.\n * \n * @sample samples.collections.Collections.Transformations.zipWithNextToFindDeltas\n */\n@SinceKotlin(\"1.2\")\npublic inline fun <T, R> Iterable<T>.zipWithNext(transform: (a: T, b: T) -> R): List<R> {\n val iterator = iterator()\n if (!iterator.hasNext()) return emptyList()\n val result = mutableListOf<R>()\n var current = iterator.next()\n while (iterator.hasNext()) {\n val next = iterator.next()\n result.add(transform(current, next))\n current = next\n }\n return result\n}\n\n/**\n * Appends the string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinTo\n */\npublic fun <T, A : Appendable> Iterable<T>.joinTo(buffer: A, separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): A {\n buffer.append(prefix)\n var count = 0\n for (element in this) {\n if (++count > 1) buffer.append(separator)\n if (limit < 0 || count <= limit) {\n buffer.appendElement(element, transform)\n } else break\n }\n if (limit >= 0 && count > limit) buffer.append(truncated)\n buffer.append(postfix)\n return buffer\n}\n\n/**\n * Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.\n * \n * If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]\n * elements will be appended, followed by the [truncated] string (which defaults to \"...\").\n * \n * @sample samples.collections.Collections.Transformations.joinToString\n */\npublic fun <T> Iterable<T>.joinToString(separator: CharSequence = \", \", prefix: CharSequence = \"\", postfix: CharSequence = \"\", limit: Int = -1, truncated: CharSequence = \"...\", transform: ((T) -> CharSequence)? = null): String {\n return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform).toString()\n}\n\n/**\n * Returns this collection as an [Iterable].\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> Iterable<T>.asIterable(): Iterable<T> {\n return this\n}\n\n/**\n * Creates a [Sequence] instance that wraps the original collection returning its elements when being iterated.\n * \n * @sample samples.collections.Sequences.Building.sequenceFromCollection\n */\npublic fun <T> Iterable<T>.asSequence(): Sequence<T> {\n return Sequence { this.iterator() }\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfByte\")\npublic fun Iterable<Byte>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfShort\")\npublic fun Iterable<Short>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfInt\")\npublic fun Iterable<Int>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfLong\")\npublic fun Iterable<Long>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfFloat\")\npublic fun Iterable<Float>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns an average value of elements in the collection.\n */\n@kotlin.jvm.JvmName(\"averageOfDouble\")\npublic fun Iterable<Double>.average(): Double {\n var sum: Double = 0.0\n var count: Int = 0\n for (element in this) {\n sum += element\n checkCountOverflow(++count)\n }\n return if (count == 0) Double.NaN else sum / count\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfByte\")\npublic fun Iterable<Byte>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfShort\")\npublic fun Iterable<Short>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfInt\")\npublic fun Iterable<Int>.sum(): Int {\n var sum: Int = 0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfLong\")\npublic fun Iterable<Long>.sum(): Long {\n var sum: Long = 0L\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfFloat\")\npublic fun Iterable<Float>.sum(): Float {\n var sum: Float = 0.0f\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n/**\n * Returns the sum of all elements in the collection.\n */\n@kotlin.jvm.JvmName(\"sumOfDouble\")\npublic fun Iterable<Double>.sum(): Double {\n var sum: Double = 0.0\n for (element in this) {\n sum += element\n }\n return sum\n}\n\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport co.touchlab.kermit.Kermit\nimport com.arkivanov.decompose.DefaultComponentContext\nimport com.arkivanov.decompose.lifecycle.LifecycleRegistry\nimport com.arkivanov.decompose.lifecycle.destroy\nimport com.arkivanov.decompose.lifecycle.resume\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.arkivanov.mvikotlin.logging.store.LoggingStoreFactory\nimport com.arkivanov.mvikotlin.main.store.DefaultStoreFactory\nimport com.shabinder.common.di.DownloadProgressFlow\nimport com.shabinder.common.root.SpotiFlyerRoot\nimport com.shabinder.database.Database\nimport extras.renderableChild\nimport react.RBuilder\nimport react.RComponent\nimport react.RProps\nimport react.RState\nimport react.ReactElement\nimport root.RootR\n\nexternal interface AppProps : RProps {\n var dependencies: AppDependencies\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.App(attrs: AppProps.() -> Unit): ReactElement {\n return child(App::class){\n this.attrs(attrs)\n }\n}\n\nclass App(props: AppProps): RComponent<AppProps, RState>(props) {\n\n private val lifecycle = LifecycleRegistry()\n private val ctx = DefaultComponentContext(lifecycle = lifecycle)\n private val dependencies = props.dependencies\n\n private val root = SpotiFlyerRoot(ctx,\n object : SpotiFlyerRoot.Dependencies{\n override val storeFactory: StoreFactory = LoggingStoreFactory(DefaultStoreFactory)\n override val fetchPlatformQueryResult = dependencies.fetchPlatformQueryResult\n override val directories = dependencies.directories\n override val database: Database? = directories.db\n override val showPopUpMessage: (String) -> Unit = {}//TODO\n override val downloadProgressReport = DownloadProgressFlow\n\n }\n )\n\n override fun componentDidMount() {\n lifecycle.resume()\n }\n\n override fun componentWillUnmount() {\n lifecycle.destroy()\n }\n\n override fun RBuilder.render() {\n renderableChild(RootR::class, root)\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport kotlinx.css.Align\nimport kotlinx.css.BorderStyle\nimport kotlinx.css.Color\nimport kotlinx.css.Display\nimport kotlinx.css.JustifyContent\nimport kotlinx.css.alignContent\nimport kotlinx.css.alignItems\nimport kotlinx.css.backgroundColor\nimport kotlinx.css.borderBottomColor\nimport kotlinx.css.borderBottomStyle\nimport kotlinx.css.borderColor\nimport kotlinx.css.borderRadius\nimport kotlinx.css.borderRightColor\nimport kotlinx.css.borderWidth\nimport kotlinx.css.color\nimport kotlinx.css.display\nimport kotlinx.css.justifyContent\nimport kotlinx.css.margin\nimport kotlinx.css.padding\nimport kotlinx.css.px\nimport styled.StyleSheet\n\nval colorPrimary = Color(\"#FC5C7D\")\nval colorPrimaryDark = Color(\"#CE1CFF\")\nval colorAccent = Color(\"#9AB3FF\")\nval colorOffWhite = Color(\"#E7E7E7\")\n\nobject Styles: StyleSheet(\"Searchbar\", isStatic = true) {\n val makeRow by css {\n display = Display.flex\n alignItems = Align.center\n alignContent = Align.center\n justifyContent = JustifyContent.center\n }\n val darkMode by css {\n backgroundColor = Color.black\n color = Color.white\n }\n val circular by css {\n borderRadius = 30.px\n borderWidth = 5.px\n borderBottomStyle = BorderStyle.solid\n }\n val circularGradient by css {\n apply(circular)\n borderColor = Color.aqua\n borderBottomColor = colorPrimary\n borderRightColor = colorPrimary\n }\n val largePadding by css { padding(20.px) }\n val mediumPadding by css { padding(14.px) }\n val smallPadding by css { padding(4.px) }\n val largeMargin by css { margin(20.px) }\n val mediumMargin by css { margin(12.px) }\n val smallMargin by css { margin(4.px) }\n}","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StandardKt\")\npackage kotlin\n\nimport kotlin.contracts.*\n\n/**\n * An exception is thrown to indicate that a method body remains to be implemented.\n */\npublic class NotImplementedError(message: String = \"An operation is not implemented.\") : Error(message)\n\n/**\n * Always throws [NotImplementedError] stating that operation is not implemented.\n */\n\n@kotlin.internal.InlineOnly\npublic inline fun TODO(): Nothing = throw NotImplementedError()\n\n/**\n * Always throws [NotImplementedError] stating that operation is not implemented.\n *\n * @param reason a string explaining why the implementation is missing.\n */\n@kotlin.internal.InlineOnly\npublic inline fun TODO(reason: String): Nothing = throw NotImplementedError(\"An operation is not implemented: $reason\")\n\n\n\n/**\n * Calls the specified function [block] and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#run).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <R> run(block: () -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block()\n}\n\n/**\n * Calls the specified function [block] with `this` value as its receiver and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#run).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> T.run(block: T.() -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block()\n}\n\n/**\n * Calls the specified function [block] with the given [receiver] as its receiver and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#with).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> with(receiver: T, block: T.() -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return receiver.block()\n}\n\n/**\n * Calls the specified function [block] with `this` value as its receiver and returns `this` value.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T> T.apply(block: T.() -> Unit): T {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n block()\n return this\n}\n\n/**\n * Calls the specified function [block] with `this` value as its argument and returns `this` value.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#also).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.also(block: (T) -> Unit): T {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n block(this)\n return this\n}\n\n/**\n * Calls the specified function [block] with `this` value as its argument and returns its result.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#let).\n */\n@kotlin.internal.InlineOnly\npublic inline fun <T, R> T.let(block: (T) -> R): R {\n contract {\n callsInPlace(block, InvocationKind.EXACTLY_ONCE)\n }\n return block(this)\n}\n\n/**\n * Returns `this` value if it satisfies the given [predicate] or `null`, if it doesn't.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#takeif-and-takeunless).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {\n contract {\n callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)\n }\n return if (predicate(this)) this else null\n}\n\n/**\n * Returns `this` value if it _does not_ satisfy the given [predicate] or `null`, if it does.\n *\n * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#takeif-and-takeunless).\n */\n@kotlin.internal.InlineOnly\n@SinceKotlin(\"1.1\")\npublic inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? {\n contract {\n callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)\n }\n return if (!predicate(this)) this else null\n}\n\n/**\n * Executes the given function [action] specified number of [times].\n *\n * A zero-based index of current iteration is passed as a parameter to [action].\n *\n * @sample samples.misc.ControlFlow.repeat\n */\n@kotlin.internal.InlineOnly\npublic inline fun repeat(times: Int, action: (Int) -> Unit) {\n contract { callsInPlace(action) }\n\n for (index in 0 until times) {\n action(index)\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport co.touchlab.kermit.Kermit\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.FetchPlatformQueryResult\nimport com.shabinder.common.di.initKoin\nimport react.dom.render\nimport kotlinx.browser.document\nimport kotlinx.browser.window\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\n\nfun main() {\n window.onload = {\n render(document.getElementById(\"root\")) {\n App {\n dependencies = AppDependencies\n }\n }\n }\n}\n\nobject AppDependencies : KoinComponent {\n val appScope = CoroutineScope(Dispatchers.Default)\n val logger: Kermit\n val directories: Dir\n val fetchPlatformQueryResult: FetchPlatformQueryResult\n init {\n initKoin()\n directories = get()\n logger = get()\n fetchPlatformQueryResult = get()\n appScope.launch {\n //fetchPlatformQueryResult.spotifyProvider.authenticateSpotifyClient(true)\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage extras\n\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport react.RComponent\nimport react.RProps\nimport react.RState\nimport react.setState\n\nabstract class RenderableComponent<\n T : Any,\n S : Any\n >(\n props: Props<T>,\n initialState: S\n) : RComponent<RenderableComponent.Props<T>, RenderableComponent.State<S>>(props) {\n\n protected abstract val stateFlow: Flow<S>\n protected val model: T get() = props.model\n protected var scope: CoroutineScope = CoroutineScope(Dispatchers.Default)\n\n init {\n state = State(data = initialState)\n }\n\n override fun componentDidMount() {\n if(!scope.isActive)\n scope = CoroutineScope(Dispatchers.Default)\n scope.launch {\n stateFlow.collect {\n setState { data = it }\n }\n }\n }\n\n override fun componentWillUnmount() {\n scope.cancel(\"Component Unmounted\")\n }\n\n interface Props<T : Any> : RProps {\n var model: T\n }\n\n class State<S>(\n var data: S\n ):RState\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage extras\n\nimport com.arkivanov.decompose.value.Value\nimport com.arkivanov.decompose.value.ValueObserver\nimport extras.RenderableRootComponent.Props\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.isActive\nimport react.RComponent\nimport react.RProps\nimport react.RState\nimport react.setState\n\nabstract class RenderableRootComponent<\n T : Any,\n S : RState\n >(\n props: Props<T>,\n initialState: S\n) : RComponent<Props<T>, S>(props) {\n\n protected val model: T get() = props.model\n private val subscriptions = ArrayList<Subscription<*>>()\n protected var scope: CoroutineScope = CoroutineScope(Dispatchers.Default)\n\n init {\n this.state = initialState\n }\n\n override fun componentDidMount() {\n subscriptions.forEach { subscribe(it) }\n if(!scope.isActive)\n scope = CoroutineScope(Dispatchers.Default)\n }\n\n private fun <T : Any> subscribe(subscription: Subscription<T>) {\n subscription.value.subscribe(subscription.observer)\n }\n\n override fun componentWillUnmount() {\n subscriptions.forEach { unsubscribe(it) }\n scope.cancel(\"Component Unmounted\")\n }\n\n private fun <T : Any> unsubscribe(subscription: Subscription<T>) {\n subscription.value.unsubscribe(subscription.observer)\n }\n\n protected fun <T : Any> Value<T>.bindToState(buildState: S.(T) -> Unit) {\n subscriptions += Subscription(this) { data -> setState { buildState(data) } }\n }\n\n interface Props<T : Any> : RProps {\n var model: T\n }\n\n protected class Subscription<T : Any>(\n val value: Value<T>,\n val observer: ValueObserver<T>\n )\n}\n",null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage extras\n\nimport react.RBuilder\nimport kotlin.reflect.KClass\n\nfun <M : Any, T : RenderableRootComponent<M, *>> RBuilder.renderableChild(clazz: KClass<out T>, model: M) {\n child(clazz) {\n key = model.uniqueId().toString()\n attrs.model = model\n }\n}\nfun <M : Any, T : RenderableComponent<M, *>> RBuilder.renderableChild(clazz: KClass<out T>, model: M) {\n child(clazz) {\n key = model.uniqueId().toString()\n attrs.model = model\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage home\n\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.main.SpotiFlyerMain.State\nimport extras.RenderableComponent\nimport kotlinx.browser.document\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.FlexDirection\nimport kotlinx.css.JustifyContent\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.flexDirection\nimport kotlinx.css.flexGrow\nimport kotlinx.css.justifyContent\nimport kotlinx.dom.appendElement\nimport react.RBuilder\nimport styled.css\nimport styled.styledDiv\n\nclass HomeScreen(\n props: Props<SpotiFlyerMain>,\n) : RenderableComponent<SpotiFlyerMain, State>(\n props,\n initialState = State()\n) {\n override fun componentDidMount() {\n super.componentDidMount()\n val form = document.getElementById(\"razorpay-form\")!!\n repeat(form.childNodes.length){\n form.childNodes.item(0)?.let { it1 -> form.removeChild(it1) }\n form.childNodes.item(it)?.let { it1 -> form.removeChild(it1) }\n }\n form.appendElement(\"script\"){\n this.setAttribute(\"src\",\"https://checkout.razorpay.com/v1/payment-button.js\")\n this.setAttribute(\"async\", true.toString())\n this.setAttribute(\"data-payment_button_id\", \"pl_GnKuuDBdBu0ank\")\n }\n }\n\n override val stateFlow: Flow<SpotiFlyerMain.State> = model.models\n\n override fun RBuilder.render() {\n styledDiv{\n css {\n display = Display.flex\n flexDirection = FlexDirection.column\n flexGrow = 1.0\n justifyContent = JustifyContent.center\n alignItems = Align.center\n }\n\n Message {\n text = \"Your Gateway to Nirvana, for FREE!\"\n }\n\n SearchBar {\n link = state.data.link\n search = model::onLinkSearch\n onLinkChange = model::onInputLinkChanged\n }\n\n IconList {\n iconsAndPlatforms = platformIconList\n isBadge = false\n }\n }\n IconList {\n iconsAndPlatforms = badges\n isBadge = true\n }\n }\n}\n\n\nprivate val platformIconList = mapOf(\n \"spotify.svg\" to \"https://open.spotify.com/\",\n \"gaana.svg\" to \"https://www.gaana.com/\",\n //\"youtube.svg\" to \"https://www.youtube.com/\",\n //\"youtube_music.svg\" to \"https://music.youtube.com/\"\n)\nprivate val badges = mapOf(\n \"https://img.shields.io/github/v/release/Shabinder/SpotiFlyer?color=7885FF&label=SpotiFlyer&logo=android&style=for-the-badge\"\n to \"https://github.com/Shabinder/SpotiFlyer/releases/latest/\",\n \"https://img.shields.io/github/downloads/Shabinder/SpotiFlyer/total?style=for-the-badge&logo=android&color=17B2E7\"\n to \"https://github.com/Shabinder/SpotiFlyer/releases/latest/\"\n)","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage home\n\nimport Styles\nimport kotlinx.css.borderRadius\nimport kotlinx.css.height\nimport kotlinx.css.margin\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport kotlinx.html.id\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledA\nimport styled.styledDiv\nimport styled.styledForm\nimport styled.styledImg\n\nexternal interface IconListProps : RProps {\n var iconsAndPlatforms: Map<String,String>\n var isBadge:Boolean\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.IconList(handler:IconListProps.() -> Unit): ReactElement {\n return child(iconList){\n attrs {\n handler()\n }\n }\n}\n\nprivate val iconList = functionalComponent<IconListProps>(\"IconList\") { props ->\n\n styledDiv {\n css {\n margin(18.px)\n if(props.isBadge) {\n classes = mutableListOf(\"info-banners\")\n }\n + Styles.makeRow\n }\n val firstElem = props.iconsAndPlatforms.keys.elementAt(1)\n for((icon,platformLink) in props.iconsAndPlatforms){\n if(icon == firstElem && props.isBadge){\n //<form><script src=\"https://checkout.razorpay.com/v1/payment-button.js\" data-payment_button_id=\"pl_GnKuuDBdBu0ank\" async> </script> </form>\n styledForm {\n attrs{\n id = \"razorpay-form\"\n }\n }\n }\n styledA(href = platformLink,target=\"_blank\"){\n styledImg {\n attrs {\n src = icon\n }\n css {\n classes = mutableListOf(\"glow-button\")\n margin(8.px)\n if (!props.isBadge) {\n height = 42.px\n width = 42.px\n borderRadius = 50.px\n }\n }\n }\n }\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage home\n\nimport kotlinx.css.em\nimport kotlinx.css.fontSize\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\nimport styled.styledH1\n\nexternal interface MessageProps : RProps {\n var text: String\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.Message(handler:MessageProps.() -> Unit): ReactElement {\n return child(message){\n attrs {\n handler()\n }\n }\n}\n\nprivate val message = functionalComponent<MessageProps>(\"Message\") { props->\n styledDiv {\n styledH1 {\n + props.text\n css {\n classes = mutableListOf(\"headingTitle\")\n fontSize = 2.6.em\n }\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage home\n\nimport kotlinx.browser.window\nimport kotlinx.html.InputType\nimport kotlinx.html.js.onChangeFunction\nimport kotlinx.html.js.onClickFunction\nimport kotlinx.html.js.onKeyDownFunction\nimport org.w3c.dom.HTMLInputElement\nimport react.RBuilder\nimport react.RProps\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledButton\nimport styled.styledDiv\nimport styled.styledImg\nimport styled.styledInput\n\nexternal interface SearchbarProps : RProps {\n var link: String\n var search:(String)->Unit\n var onLinkChange:(String)->Unit\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.SearchBar(handler:SearchbarProps.() -> Unit) = child(searchbar){\n attrs {\n handler()\n }\n}\n\n\n\nval searchbar = functionalComponent<SearchbarProps>(\"SearchBar\"){ props ->\n styledDiv{\n css {\n classes = mutableListOf(\"searchBox\")\n }\n styledInput(type = InputType.url){\n attrs {\n placeholder = \"Search\"\n onChangeFunction = {\n val target = it.target as HTMLInputElement\n props.onLinkChange(target.value)\n }\n this.onKeyDownFunction = {\n if(it.asDynamic().key == \"Enter\") {\n if(props.link.isEmpty()) window.alert(\"Enter a Link from Supported Platforms\")\n else props.search(props.link)\n }\n }\n value = props.link\n }\n css {\n classes = mutableListOf(\"searchInput\")\n }\n }\n styledButton {\n attrs {\n onClickFunction = {\n if(props.link.isEmpty()) window.alert(\"Enter a Link from Supported Platforms\")\n else props.search(props.link)\n }\n }\n css {\n classes = mutableListOf(\"searchButton\")\n }\n styledImg(src = \"search.svg\") {\n css {\n classes = mutableListOf(\"search-icon\")\n }\n }\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.FlexDirection\nimport kotlinx.css.TextAlign\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.flexDirection\nimport kotlinx.css.height\nimport kotlinx.css.marginTop\nimport kotlinx.css.px\nimport kotlinx.css.textAlign\nimport kotlinx.css.width\nimport kotlinx.html.id\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\nimport styled.styledH1\nimport styled.styledImg\n\nexternal interface CoverImageProps : RProps {\n var coverImageURL: String\n var coverName: String\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.CoverImage(handler: CoverImageProps.() -> Unit): ReactElement {\n return child(coverImage){\n attrs {\n handler()\n }\n }\n}\n\nprivate val coverImage = functionalComponent<CoverImageProps>(\"CoverImage\"){ props ->\n styledDiv {\n styledImg(src= props.coverImageURL){\n css {\n height = 220.px\n width = 220.px\n }\n }\n styledH1 {\n +props.coverName\n css {\n textAlign = TextAlign.center\n }\n }\n attrs {\n id = \"cover-image\"\n }\n css {\n display = Display.flex\n alignItems = Align.center\n flexDirection = FlexDirection.column\n marginTop = 12.px\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.JustifyContent\nimport kotlinx.css.WhiteSpace\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.fontSize\nimport kotlinx.css.height\nimport kotlinx.css.justifyContent\nimport kotlinx.css.px\nimport kotlinx.css.whiteSpace\nimport kotlinx.html.id\nimport kotlinx.html.js.onClickFunction\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport react.useEffect\nimport react.useState\nimport styled.css\nimport styled.styledDiv\nimport styled.styledH5\nimport styled.styledImg\n\nexternal interface DownloadAllButtonProps : RProps {\n var isActive:Boolean\n var link : String\n var downloadAll:()->Unit\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.DownloadAllButton(handler: DownloadAllButtonProps.() -> Unit): ReactElement {\n return child(downloadAllButton){\n attrs {\n handler()\n }\n }\n}\n\nprivate val downloadAllButton = functionalComponent<DownloadAllButtonProps>(\"DownloadAllButton\") { props->\n\n val (isClicked,setClicked) = useState(false)\n\n useEffect(mutableListOf(props.link)){\n setClicked(false)\n }\n\n if(props.isActive){\n if(isClicked) {\n styledDiv{\n css {\n display = Display.flex\n alignItems = Align.center\n justifyContent = JustifyContent.center\n height = 52.px\n }\n LoadingSpinner { }\n }\n }\n else{\n styledDiv {\n attrs {\n onClickFunction = {\n props.downloadAll()\n setClicked(true)\n }\n }\n styledDiv {\n\n styledImg(src = \"download.svg\",alt = \"Download All Button\") {\n css {\n classes = mutableListOf(\"download-all-icon\")\n height = 32.px\n }\n }\n\n styledH5 {\n attrs {\n id = \"download-all-text\"\n }\n + \"Download All\"\n css {\n whiteSpace = WhiteSpace.nowrap\n fontSize = 15.px\n }\n }\n\n css {\n classes = mutableListOf(\"download-icon\")\n display = Display.flex\n alignItems = Align.center\n }\n }\n css {\n classes = mutableListOf(\"download-button\")\n display = Display.flex\n alignItems = Align.center\n }\n }\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport com.shabinder.common.models.DownloadStatus\nimport kotlinx.css.borderRadius\nimport kotlinx.css.em\nimport kotlinx.css.margin\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport kotlinx.html.js.onClickFunction\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\nimport styled.styledImg\n\n@Suppress(\"FunctionName\")\nfun RBuilder.DownloadButton(handler: DownloadButtonProps.() -> Unit): ReactElement {\n return child(downloadButton){\n attrs {\n handler()\n }\n }\n}\n\nexternal interface DownloadButtonProps : RProps {\n var onClick:()->Unit\n var status :DownloadStatus\n}\n\nprivate val downloadButton = functionalComponent<DownloadButtonProps>(\"Circular-Progress-Bar\") { props->\n styledDiv {\n val src = when(props.status){\n is DownloadStatus.NotDownloaded -> \"download-gradient.svg\"\n is DownloadStatus.Downloaded -> \"check.svg\"\n is DownloadStatus.Failed -> \"error.svg\"\n else -> \"\"\n }\n styledImg(src = src) {\n attrs {\n onClickFunction = {\n props.onClick()\n }\n }\n css {\n width = (2.5).em\n margin(8.px)\n }\n }\n css {\n classes = mutableListOf(\"glow-button\")\n borderRadius = 100.px\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport com.shabinder.common.list.SpotiFlyerList\nimport com.shabinder.common.list.SpotiFlyerList.State\nimport extras.RenderableComponent\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.css.Color\nimport kotlinx.css.Display\nimport kotlinx.css.FlexDirection\nimport kotlinx.css.color\nimport kotlinx.css.display\nimport kotlinx.css.flexDirection\nimport kotlinx.css.flexGrow\nimport kotlinx.css.padding\nimport kotlinx.css.px\nimport kotlinx.html.id\nimport react.RBuilder\nimport styled.css\nimport styled.styledDiv\nimport styled.styledSection\n\nclass ListScreen(\n props: Props<SpotiFlyerList>,\n) : RenderableComponent<SpotiFlyerList, State>(props,initialState = State()) {\n\n override val stateFlow: Flow<SpotiFlyerList.State> = model.models\n\n override fun RBuilder.render() {\n\n val result = state.data.queryResult\n\n styledSection {\n attrs {\n id = \"list-screen\"\n }\n\n if(result == null){\n LoadingAnim { }\n }else{\n CoverImage {\n coverImageURL = result.coverUrl\n coverName = result.title\n }\n\n DownloadAllButton {\n isActive = state.data.trackList.size > 1\n downloadAll = {\n model.onDownloadAllClicked(state.data.trackList)\n }\n link = state.data.link\n }\n\n styledDiv{\n css {\n display =Display.flex\n flexGrow = 1.0\n flexDirection = FlexDirection.column\n color = Color.white\n }\n state.data.trackList.forEachIndexed{ _, trackDetails ->\n TrackItem {\n details = trackDetails\n downloadTrack = model::onDownloadClicked\n }\n }\n }\n }\n\n css {\n classes = mutableListOf(\"list-screen\")\n display = Display.flex\n padding(8.px)\n flexDirection = FlexDirection.column\n flexGrow = 1.0\n }\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.flexGrow\nimport kotlinx.css.height\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\n\n@Suppress(\"FunctionName\")\nfun RBuilder.LoadingAnim(handler: RProps.() -> Unit): ReactElement {\n return child(loadingAnim){\n attrs {\n handler()\n }\n }\n}\n\nprivate val loadingAnim = functionalComponent<RProps>(\"Loading Animation\") {\n styledDiv{\n css {\n flexGrow = 1.0\n display = Display.flex\n alignItems = Align.center\n }\n styledDiv {\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube1\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube2\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube3\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube4\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube5\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube6\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube7\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube8\") } }\n styledDiv { css { classes = mutableListOf(\"sk-cube sk-cube9\") } }\n\n css {\n classes = mutableListOf(\"sk-cube-grid\")\n height = 60.px\n width = 60.px\n }\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport kotlinx.css.marginRight\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\n\n@Suppress(\"FunctionName\")\nfun RBuilder.LoadingSpinner(handler: RProps.() -> Unit): ReactElement {\n return child(loadingSpinner){\n attrs {\n handler()\n }\n }\n}\n\nprivate val loadingSpinner = functionalComponent<RProps>(\"Loading-Spinner\") {\n styledDiv {\n styledDiv{}\n styledDiv{}\n styledDiv{}\n styledDiv{}\n css{\n classes = mutableListOf(\"lds-ring\")\n width = 50.px\n marginRight = 8.px\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.models.TrackDetails\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.FlexDirection\nimport kotlinx.css.Overflow\nimport kotlinx.css.TextAlign\nimport kotlinx.css.TextOverflow\nimport kotlinx.css.WhiteSpace\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.em\nimport kotlinx.css.flexDirection\nimport kotlinx.css.flexGrow\nimport kotlinx.css.fontSize\nimport kotlinx.css.height\nimport kotlinx.css.margin\nimport kotlinx.css.minWidth\nimport kotlinx.css.overflow\nimport kotlinx.css.padding\nimport kotlinx.css.paddingRight\nimport kotlinx.css.px\nimport kotlinx.css.textAlign\nimport kotlinx.css.textOverflow\nimport kotlinx.css.whiteSpace\nimport kotlinx.css.width\nimport kotlinx.html.id\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport react.useEffect\nimport react.useState\nimport styled.css\nimport styled.styledDiv\nimport styled.styledH3\nimport styled.styledH4\nimport styled.styledImg\n\nexternal interface TrackItemProps : RProps {\n var details:TrackDetails\n var downloadTrack:(TrackDetails)->Unit\n}\n\n@Suppress(\"FunctionName\")\nfun RBuilder.TrackItem(handler: TrackItemProps.() -> Unit): ReactElement {\n return child(trackItem){\n attrs {\n handler()\n }\n }\n}\n\nprivate val trackItem = functionalComponent<TrackItemProps>(\"Track-Item\"){ props ->\n val (downloadStatus,setDownloadStatus) = useState(props.details.downloaded)\n val details = props.details\n useEffect(listOf(props.details)){\n setDownloadStatus(props.details.downloaded)\n }\n styledDiv {\n styledImg(src = details.albumArtURL) {\n css {\n height = 90.px\n width = 90.px\n }\n }\n\n styledDiv {\n attrs {\n id = \"text-details\"\n }\n css {\n flexGrow = 1.0\n minWidth = 0.px\n display = Display.flex\n flexDirection = FlexDirection.column\n margin(8.px)\n }\n styledDiv{\n css {\n height = 40.px\n alignItems = Align.center\n display = Display.flex\n }\n styledH3 {\n + details.title\n css {\n padding(8.px)\n fontSize = 1.3.em\n textOverflow = TextOverflow.ellipsis\n whiteSpace = WhiteSpace.nowrap\n overflow = Overflow.hidden\n }\n }\n }\n styledDiv {\n css {\n height = 40.px\n alignItems = Align.center\n display = Display.flex\n }\n styledH4 {\n + details.artists.joinToString(\",\")\n css {\n flexGrow = 1.0\n padding(8.px)\n minWidth = 4.em\n fontSize = 1.1.em\n textOverflow = TextOverflow.ellipsis\n whiteSpace = WhiteSpace.nowrap\n overflow = Overflow.hidden\n }\n }\n styledH4 {\n css {\n textAlign = TextAlign.end\n flexGrow = 1.0\n padding(8.px)\n minWidth = 4.em\n fontSize = 1.1.em\n textOverflow = TextOverflow.ellipsis\n whiteSpace = WhiteSpace.nowrap\n overflow = Overflow.hidden\n }\n + \"${details.durationSec/60} min, ${details.durationSec%60} sec\"\n }\n }\n }\n when(downloadStatus){\n is DownloadStatus.NotDownloaded ->{\n DownloadButton {\n onClick = {\n setDownloadStatus(DownloadStatus.Queued)\n props.downloadTrack(details)\n }\n status = downloadStatus\n }\n }\n //TODO Fix Progress Indicator\n /*is DownloadStatus.Downloading -> {\n CircularProgressBar {\n progress = downloadStatus.progress\n }\n }\n is DownloadStatus.Converting -> {\n LoadingSpinner {}\n }\n is DownloadStatus.Queued -> {\n LoadingSpinner {}\n }*/\n is DownloadStatus.Downloaded -> {\n DownloadButton {\n onClick = {}\n status = downloadStatus\n }\n }\n is DownloadStatus.Failed -> {\n DownloadButton {\n onClick = {}\n status = downloadStatus\n }\n }\n else -> LoadingSpinner { }\n }\n\n css {\n alignItems = Align.center\n display =Display.flex\n paddingRight = 16.px\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage navbar\n\nimport kotlinx.css.Align\nimport kotlinx.css.Display\nimport kotlinx.css.LinearDimension\nimport kotlinx.css.alignItems\nimport kotlinx.css.display\nimport kotlinx.css.filter\nimport kotlinx.css.fontSize\nimport kotlinx.css.height\nimport kotlinx.css.margin\nimport kotlinx.css.marginLeft\nimport kotlinx.css.marginRight\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport kotlinx.html.id\nimport kotlinx.html.js.onBlurFunction\nimport kotlinx.html.js.onClickFunction\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledA\nimport styled.styledDiv\nimport styled.styledH1\nimport styled.styledImg\nimport styled.styledNav\n\n@Suppress(\"FunctionName\")\nfun RBuilder.NavBar(handler: NavBarProps.() -> Unit): ReactElement{\n return child(navBar){\n attrs {\n handler()\n }\n }\n}\n\nexternal interface NavBarProps:RProps{\n var isBackVisible: Boolean\n var popBackToHomeScreen: () -> Unit\n}\n\n\nprivate val navBar = functionalComponent<NavBarProps>(\"NavBar\") { props ->\n\n styledNav {\n css {\n +NavBarStyles.nav\n }\n styledDiv{\n attrs {\n onClickFunction = {\n props.popBackToHomeScreen()\n }\n onBlurFunction = {\n props.popBackToHomeScreen()\n }\n }\n styledImg(src = \"left-arrow.svg\",alt = \"Back Arrow\"){\n css {\n height = 42.px\n width = 42.px\n display = if(props.isBackVisible) Display.inline else Display.none\n filter = \"invert(100)\"\n marginRight = 12.px\n }\n }\n }\n styledA(href = \"https://shabinder.github.io/SpotiFlyer/\",target=\"_blank\") {\n css {\n display = Display.flex\n alignItems = Align.center\n }\n styledImg(src = \"spotiflyer.svg\",alt = \"Logo\") {\n css {\n height = 42.px\n width = 42.px\n }\n }\n styledH1 {\n +\"SpotiFlyer\"\n attrs {\n id = \"appName\"\n }\n css{\n fontSize = 46.px\n margin(horizontal = 14.px)\n }\n }\n }\n\n /*val (corsMode,setCorsMode) = useState(CorsProxy.SelfHostedCorsProxy() as CorsProxy)\n\n useEffect {\n setCorsMode(corsProxy)\n }*/\n\n styledDiv{\n\n /*styledH4 { + \"Extension\" }\n\n styledDiv {\n styledInput(type = InputType.checkBox) {\n attrs{\n id = \"cmn-toggle-4\"\n value = \"Extension\"\n checked = corsMode.extensionMode()\n onChangeFunction = {\n val state = it.target as HTMLInputElement\n if(state.checked){\n setCorsMode(corsProxy.toggle(CorsProxy.PublicProxyWithExtension()))\n } else{\n setCorsMode(corsProxy.toggle(CorsProxy.SelfHostedCorsProxy()))\n }\n println(\"Active Proxy: ${corsProxy.url}\")\n }\n }\n css{\n classes = mutableListOf(\"cmn-toggle\",\"cmn-toggle-round-flat\")\n }\n }\n styledLabel { attrs { htmlFor = \"cmn-toggle-4\" } }\n css{\n classes = mutableListOf(\"switch\")\n marginLeft = 8.px\n marginRight = 16.px\n }\n }*/\n\n styledA(href = \"https://github.com/Shabinder/SpotiFlyer/\"){\n styledImg(src = \"github.svg\"){\n css {\n height = 42.px\n width = 42.px\n }\n }\n }\n css {\n display = Display.flex\n alignItems = Align.center\n marginLeft = LinearDimension.auto\n }\n }\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage navbar\n\nimport kotlinx.css.*\nimport styled.StyleSheet\n\nobject NavBarStyles : StyleSheet(\"WelcomeStyles\", isStatic = true) {\n val nav by css{\n padding(horizontal = 16.px)\n marginTop = 10.px\n backgroundColor = Color.transparent\n height = 56.px\n display = Display.flex\n flexDirection = FlexDirection.row\n alignItems = Align.center\n alignSelf = Align.stretch\n }\n} \n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"CollectionsKt\")\n\npackage kotlin.collections\n\nimport kotlin.random.Random\n\n/**\n * Removes a single instance of the specified element from this\n * collection, if it is present.\n *\n * Allows to overcome type-safety restriction of `remove` that requires to pass an element of type `E`.\n *\n * @return `true` if the element has been successfully removed; `false` if it was not present in the collection.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.remove(element: T): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).remove(element)\n\n/**\n * Removes all of this collection's elements that are also contained in the specified collection.\n\n * Allows to overcome type-safety restriction of `removeAll` that requires to pass a collection of type `Collection<E>`.\n *\n * @return `true` if any of the specified elements was removed from the collection, `false` if the collection was not modified.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.removeAll(elements: Collection<T>): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).removeAll(elements)\n\n/**\n * Retains only the elements in this collection that are contained in the specified collection.\n *\n * Allows to overcome type-safety restriction of `retainAll` that requires to pass a collection of type `Collection<E>`.\n *\n * @return `true` if any element was removed from the collection, `false` if the collection was not modified.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.retainAll(elements: Collection<T>): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableCollection<T>).retainAll(elements)\n\n/**\n * Adds the specified [element] to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(element: T) {\n this.add(element)\n}\n\n/**\n * Adds all elements of the given [elements] collection to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Iterable<T>) {\n this.addAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] array to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Array<T>) {\n this.addAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] sequence to this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.plusAssign(elements: Sequence<T>) {\n this.addAll(elements)\n}\n\n/**\n * Removes a single instance of the specified [element] from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(element: T) {\n this.remove(element)\n}\n\n/**\n * Removes all elements contained in the given [elements] collection from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Iterable<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Removes all elements contained in the given [elements] array from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Array<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Removes all elements contained in the given [elements] sequence from this mutable collection.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <T> MutableCollection<in T>.minusAssign(elements: Sequence<T>) {\n this.removeAll(elements)\n}\n\n/**\n * Adds all elements of the given [elements] collection to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Iterable<T>): Boolean {\n when (elements) {\n is Collection -> return addAll(elements)\n else -> {\n var result: Boolean = false\n for (item in elements)\n if (add(item)) result = true\n return result\n }\n }\n}\n\n/**\n * Adds all elements of the given [elements] sequence to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Sequence<T>): Boolean {\n var result: Boolean = false\n for (item in elements) {\n if (add(item)) result = true\n }\n return result\n}\n\n/**\n * Adds all elements of the given [elements] array to this [MutableCollection].\n */\npublic fun <T> MutableCollection<in T>.addAll(elements: Array<out T>): Boolean {\n return addAll(elements.asList())\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] collection.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Iterable<T>): Boolean {\n return removeAll(elements.convertToSetForSetOperationWith(this))\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] sequence.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Sequence<T>): Boolean {\n val set = elements.toHashSet()\n return set.isNotEmpty() && removeAll(set)\n}\n\n/**\n * Removes all elements from this [MutableCollection] that are also contained in the given [elements] array.\n */\npublic fun <T> MutableCollection<in T>.removeAll(elements: Array<out T>): Boolean {\n return elements.isNotEmpty() && removeAll(elements.toHashSet())\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] collection.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Iterable<T>): Boolean {\n return retainAll(elements.convertToSetForSetOperationWith(this))\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] array.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Array<out T>): Boolean {\n if (elements.isNotEmpty())\n return retainAll(elements.toHashSet())\n else\n return retainNothing()\n}\n\n/**\n * Retains only elements of this [MutableCollection] that are contained in the given [elements] sequence.\n */\npublic fun <T> MutableCollection<in T>.retainAll(elements: Sequence<T>): Boolean {\n val set = elements.toHashSet()\n if (set.isNotEmpty())\n return retainAll(set)\n else\n return retainNothing()\n}\n\nprivate fun MutableCollection<*>.retainNothing(): Boolean {\n val result = isNotEmpty()\n clear()\n return result\n}\n\n\n/**\n * Removes all elements from this [MutableIterable] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when no elements were removed and collection was not modified.\n */\npublic fun <T> MutableIterable<T>.removeAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, true)\n\n/**\n * Retains only elements of this [MutableIterable] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when all elements were retained and collection was not modified.\n */\npublic fun <T> MutableIterable<T>.retainAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, false)\n\nprivate fun <T> MutableIterable<T>.filterInPlace(predicate: (T) -> Boolean, predicateResultToRemove: Boolean): Boolean {\n var result = false\n with(iterator()) {\n while (hasNext())\n if (predicate(next()) == predicateResultToRemove) {\n remove()\n result = true\n }\n }\n return result\n}\n\n\n/**\n * Removes the element at the specified [index] from this list.\n * In Kotlin one should use the [MutableList.removeAt] function instead.\n */\n@Deprecated(\"Use removeAt(index) instead.\", ReplaceWith(\"removeAt(index)\"), level = DeprecationLevel.ERROR)\n@kotlin.internal.InlineOnly\npublic inline fun <T> MutableList<T>.remove(index: Int): T = removeAt(index)\n\n/**\n * Removes the first element from this mutable list and returns that removed element, or throws [NoSuchElementException] if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeFirst(): T = if (isEmpty()) throw NoSuchElementException(\"List is empty.\") else removeAt(0)\n\n/**\n * Removes the first element from this mutable list and returns that removed element, or returns `null` if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeFirstOrNull(): T? = if (isEmpty()) null else removeAt(0)\n\n/**\n * Removes the last element from this mutable list and returns that removed element, or throws [NoSuchElementException] if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeLast(): T = if (isEmpty()) throw NoSuchElementException(\"List is empty.\") else removeAt(lastIndex)\n\n/**\n * Removes the last element from this mutable list and returns that removed element, or returns `null` if this list is empty.\n */\n@SinceKotlin(\"1.4\")\n@WasExperimental(ExperimentalStdlibApi::class)\npublic fun <T> MutableList<T>.removeLastOrNull(): T? = if (isEmpty()) null else removeAt(lastIndex)\n\n/**\n * Removes all elements from this [MutableList] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when no elements were removed and collection was not modified.\n */\npublic fun <T> MutableList<T>.removeAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, true)\n\n/**\n * Retains only elements of this [MutableList] that match the given [predicate].\n *\n * @return `true` if any element was removed from this collection, or `false` when all elements were retained and collection was not modified.\n */\npublic fun <T> MutableList<T>.retainAll(predicate: (T) -> Boolean): Boolean = filterInPlace(predicate, false)\n\nprivate fun <T> MutableList<T>.filterInPlace(predicate: (T) -> Boolean, predicateResultToRemove: Boolean): Boolean {\n if (this !is RandomAccess)\n return (this as MutableIterable<T>).filterInPlace(predicate, predicateResultToRemove)\n\n var writeIndex: Int = 0\n for (readIndex in 0..lastIndex) {\n val element = this[readIndex]\n if (predicate(element) == predicateResultToRemove)\n continue\n\n if (writeIndex != readIndex)\n this[writeIndex] = element\n\n writeIndex++\n }\n if (writeIndex < size) {\n for (removeIndex in lastIndex downTo writeIndex)\n removeAt(removeIndex)\n\n return true\n } else {\n return false\n }\n}\n",null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage root\n\nimport com.arkivanov.decompose.RouterState\nimport com.shabinder.common.root.SpotiFlyerRoot\nimport com.shabinder.common.root.SpotiFlyerRoot.Child\nimport extras.RenderableRootComponent\nimport extras.renderableChild\nimport home.HomeScreen\nimport list.ListScreen\nimport navbar.NavBar\nimport react.RBuilder\nimport react.RState\n\nclass RootR(props: Props<SpotiFlyerRoot>) : RenderableRootComponent<SpotiFlyerRoot, RootR.State>(\n props = props,\n initialState = State(routerState = props.model.routerState.value)\n) {\n private val component: Child\n get() = model.routerState.value.activeChild.component\n\n private val callBacks get() = model.callBacks\n\n override fun RBuilder.render() {\n NavBar {\n isBackVisible = (component is Child.List)\n popBackToHomeScreen = callBacks::popBackToHomeScreen\n }\n when(component){\n is Child.Main -> renderableChild(HomeScreen::class, (component as Child.Main).component)\n is Child.List -> renderableChild(ListScreen::class, (component as Child.List).component)\n }\n }\n\n init {\n model.routerState.bindToState { routerState = it }\n }\n class State(\n var routerState: RouterState<*, Child>\n ) : RState\n\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"MapsKt\")\n@file:OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n\npackage kotlin.collections\n\nimport kotlin.contracts.*\n\nprivate object EmptyMap : Map<Any?, Nothing>, Serializable {\n private const val serialVersionUID: Long = 8246714829545688274\n\n override fun equals(other: Any?): Boolean = other is Map<*, *> && other.isEmpty()\n override fun hashCode(): Int = 0\n override fun toString(): String = \"{}\"\n\n override val size: Int get() = 0\n override fun isEmpty(): Boolean = true\n\n override fun containsKey(key: Any?): Boolean = false\n override fun containsValue(value: Nothing): Boolean = false\n override fun get(key: Any?): Nothing? = null\n override val entries: Set<Map.Entry<Any?, Nothing>> get() = EmptySet\n override val keys: Set<Any?> get() = EmptySet\n override val values: Collection<Nothing> get() = EmptyList\n\n private fun readResolve(): Any = EmptyMap\n}\n\n/**\n * Returns an empty read-only map of specified type.\n *\n * The returned map is serializable (JVM).\n * @sample samples.collections.Maps.Instantiation.emptyReadOnlyMap\n */\npublic fun <K, V> emptyMap(): Map<K, V> = @Suppress(\"UNCHECKED_CAST\") (EmptyMap as Map<K, V>)\n\n/**\n * Returns a new read-only map with the specified contents, given as a list of pairs\n * where the first value is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * The returned map is serializable (JVM).\n *\n * @sample samples.collections.Maps.Instantiation.mapFromPairs\n */\npublic fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> =\n if (pairs.size > 0) pairs.toMap(LinkedHashMap(mapCapacity(pairs.size))) else emptyMap()\n\n/**\n * Returns an empty read-only map.\n *\n * The returned map is serializable (JVM).\n * @sample samples.collections.Maps.Instantiation.emptyReadOnlyMap\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> mapOf(): Map<K, V> = emptyMap()\n\n/**\n * Returns an empty new [MutableMap].\n *\n * The returned map preserves the entry iteration order.\n * @sample samples.collections.Maps.Instantiation.emptyMutableMap\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> mutableMapOf(): MutableMap<K, V> = LinkedHashMap()\n\n/**\n * Returns a new [MutableMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * @sample samples.collections.Maps.Instantiation.mutableMapFromPairs\n * @sample samples.collections.Maps.Instantiation.emptyMutableMap\n */\npublic fun <K, V> mutableMapOf(vararg pairs: Pair<K, V>): MutableMap<K, V> =\n LinkedHashMap<K, V>(mapCapacity(pairs.size)).apply { putAll(pairs) }\n\n/**\n * Returns an empty new [HashMap].\n *\n * @sample samples.collections.Maps.Instantiation.emptyHashMap\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> hashMapOf(): HashMap<K, V> = HashMap<K, V>()\n\n/**\n * Returns a new [HashMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * @sample samples.collections.Maps.Instantiation.hashMapFromPairs\n */\npublic fun <K, V> hashMapOf(vararg pairs: Pair<K, V>): HashMap<K, V> = HashMap<K, V>(mapCapacity(pairs.size)).apply { putAll(pairs) }\n\n/**\n * Returns an empty new [LinkedHashMap].\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> linkedMapOf(): LinkedHashMap<K, V> = LinkedHashMap<K, V>()\n\n/**\n * Returns a new [LinkedHashMap] with the specified contents, given as a list of pairs\n * where the first component is the key and the second is the value.\n *\n * If multiple pairs have the same key, the resulting map will contain the value from the last of those pairs.\n *\n * Entries of the map are iterated in the order they were specified.\n *\n * @sample samples.collections.Maps.Instantiation.linkedMapFromPairs\n */\npublic fun <K, V> linkedMapOf(vararg pairs: Pair<K, V>): LinkedHashMap<K, V> = pairs.toMap(LinkedHashMap(mapCapacity(pairs.size)))\n\n/**\n * Builds a new read-only [Map] by populating a [MutableMap] using the given [builderAction]\n * and returning a read-only map with the same key-value pairs.\n *\n * The map passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * Entries of the map are iterated in the order they were added by the [builderAction].\n *\n * @sample samples.collections.Builders.Maps.buildMapSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> buildMap(@BuilderInference builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildMapInternal(builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <K, V> buildMapInternal(builderAction: MutableMap<K, V>.() -> Unit): Map<K, V>\n\n/**\n * Builds a new read-only [Map] by populating a [MutableMap] using the given [builderAction]\n * and returning a read-only map with the same key-value pairs.\n *\n * The map passed as a receiver to the [builderAction] is valid only inside that function.\n * Using it outside of the function produces an unspecified behavior.\n *\n * [capacity] is used to hint the expected number of pairs added in the [builderAction].\n *\n * Entries of the map are iterated in the order they were added by the [builderAction].\n *\n * @throws IllegalArgumentException if the given [capacity] is negative.\n *\n * @sample samples.collections.Builders.Maps.buildMapSample\n */\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> buildMap(capacity: Int, @BuilderInference builderAction: MutableMap<K, V>.() -> Unit): Map<K, V> {\n contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }\n return buildMapInternal(capacity, builderAction)\n}\n\n@PublishedApi\n@SinceKotlin(\"1.3\")\n@ExperimentalStdlibApi\n@kotlin.internal.InlineOnly\ninternal expect inline fun <K, V> buildMapInternal(capacity: Int, builderAction: MutableMap<K, V>.() -> Unit): Map<K, V>\n\n/**\n * Calculate the initial capacity of a map.\n */\n@PublishedApi\ninternal expect fun mapCapacity(expectedSize: Int): Int\n\n/**\n * Returns `true` if this map is not empty.\n * @sample samples.collections.Maps.Usage.mapIsNotEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>.isNotEmpty(): Boolean = !isEmpty()\n\n/**\n * Returns `true` if this nullable map is either null or empty.\n * @sample samples.collections.Maps.Usage.mapIsNullOrEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<out K, V>?.isNullOrEmpty(): Boolean {\n contract {\n returns(false) implies (this@isNullOrEmpty != null)\n }\n\n return this == null || isEmpty()\n}\n\n/**\n * Returns the [Map] if its not `null`, or the empty [Map] otherwise.\n *\n * @sample samples.collections.Maps.Usage.mapOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<K, V>?.orEmpty(): Map<K, V> = this ?: emptyMap()\n\n/**\n * Returns this map if it's not empty\n * or the result of calling [defaultValue] function if the map is empty.\n *\n * @sample samples.collections.Maps.Usage.mapIfEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <M, R> M.ifEmpty(defaultValue: () -> R): R where M : Map<*, *>, M : R =\n if (isEmpty()) defaultValue() else this\n\n/**\n * Checks if the map contains the given key.\n *\n * This method allows to use the `x in map` syntax for checking whether an object is contained in the map.\n *\n * @sample samples.collections.Maps.Usage.containsKey\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <@kotlin.internal.OnlyInputTypes K, V> Map<out K, V>.contains(key: K): Boolean = containsKey(key)\n\n/**\n * Returns the value corresponding to the given [key], or `null` if such a key is not present in the map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <@kotlin.internal.OnlyInputTypes K, V> Map<out K, V>.get(key: K): V? =\n @Suppress(\"UNCHECKED_CAST\") (this as Map<K, V>).get(key)\n\n/**\n * Allows to use the index operator for storing values in a mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.set(key: K, value: V): Unit {\n put(key, value)\n}\n\n/**\n * Returns `true` if the map contains the specified [key].\n *\n * Allows to overcome type-safety restriction of `containsKey` that requires to pass a key of type `K`.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes K> Map<out K, *>.containsKey(key: K): Boolean =\n @Suppress(\"UNCHECKED_CAST\") (this as Map<K, *>).containsKey(key)\n\n/**\n * Returns `true` if the map maps one or more keys to the specified [value].\n *\n * Allows to overcome type-safety restriction of `containsValue` that requires to pass a value of type `V`.\n *\n * @sample samples.collections.Maps.Usage.containsValue\n */\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning, extension takes precedence in some cases\n@kotlin.internal.InlineOnly\npublic inline fun <K, @kotlin.internal.OnlyInputTypes V> Map<K, V>.containsValue(value: V): Boolean = this.containsValue(value)\n\n\n/**\n * Removes the specified key and its corresponding value from this map.\n *\n * @return the previous value associated with the key, or `null` if the key was not present in the map.\n\n * Allows to overcome type-safety restriction of `remove` that requires to pass a key of type `K`.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <@kotlin.internal.OnlyInputTypes K, V> MutableMap<out K, V>.remove(key: K): V? =\n @Suppress(\"UNCHECKED_CAST\") (this as MutableMap<K, V>).remove(key)\n\n/**\n * Returns the key component of the map entry.\n *\n * This method allows to use destructuring declarations when working with maps, for example:\n * ```\n * for ((key, value) in map) {\n * // do something with the key and the value\n * }\n * ```\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map.Entry<K, V>.component1(): K = key\n\n/**\n * Returns the value component of the map entry.\n *\n * This method allows to use destructuring declarations when working with maps, for example:\n * ```\n * for ((key, value) in map) {\n * // do something with the key and the value\n * }\n * ```\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map.Entry<K, V>.component2(): V = value\n\n/**\n * Converts entry to [Pair] with key being first component and value being second.\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map.Entry<K, V>.toPair(): Pair<K, V> = Pair(key, value)\n\n/**\n * Returns the value for the given key, or the result of the [defaultValue] function if there was no entry for the given key.\n *\n * @sample samples.collections.Maps.Usage.getOrElse\n */\n@kotlin.internal.InlineOnly\npublic inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V = get(key) ?: defaultValue()\n\n\ninternal inline fun <K, V> Map<K, V>.getOrElseNullable(key: K, defaultValue: () -> V): V {\n val value = get(key)\n if (value == null && !containsKey(key)) {\n return defaultValue()\n } else {\n @Suppress(\"UNCHECKED_CAST\")\n return value as V\n }\n}\n\n/**\n * Returns the value for the given [key] or throws an exception if there is no such key in the map.\n *\n * If the map was created by [withDefault], resorts to its `defaultValue` provider function\n * instead of throwing an exception.\n *\n * @throws NoSuchElementException when the map doesn't contain a value for the specified key and\n * no implicit default value was provided for that map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)\n\n/**\n * Returns the value for the given key. If the key is not found in the map, calls the [defaultValue] function,\n * puts its result into the map under the given key and returns it.\n *\n * Note that the operation is not guaranteed to be atomic if the map is being modified concurrently.\n *\n * @sample samples.collections.Maps.Usage.getOrPut\n */\npublic inline fun <K, V> MutableMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {\n val value = get(key)\n return if (value == null) {\n val answer = defaultValue()\n put(key, answer)\n answer\n } else {\n value\n }\n}\n\n/**\n * Returns an [Iterator] over the entries in the [Map].\n *\n * @sample samples.collections.Maps.Usage.forOverEntries\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> Map<out K, V>.iterator(): Iterator<Map.Entry<K, V>> = entries.iterator()\n\n/**\n * Returns a [MutableIterator] over the mutable entries in the [MutableMap].\n *\n */\n@kotlin.jvm.JvmName(\"mutableIterator\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.iterator(): MutableIterator<MutableMap.MutableEntry<K, V>> = entries.iterator()\n\n/**\n * Populates the given [destination] map with entries having the keys of this map and the values obtained\n * by applying the [transform] function to each entry in this [Map].\n */\npublic inline fun <K, V, R, M : MutableMap<in K, in R>> Map<out K, V>.mapValuesTo(destination: M, transform: (Map.Entry<K, V>) -> R): M {\n return entries.associateByTo(destination, { it.key }, transform)\n}\n\n/**\n * Populates the given [destination] map with entries having the keys obtained\n * by applying the [transform] function to each entry in this [Map] and the values of this map.\n *\n * In case if any two entries are mapped to the equal keys, the value of the latter one will overwrite\n * the value associated with the former one.\n */\npublic inline fun <K, V, R, M : MutableMap<in R, in V>> Map<out K, V>.mapKeysTo(destination: M, transform: (Map.Entry<K, V>) -> R): M {\n return entries.associateByTo(destination, transform, { it.value })\n}\n\n/**\n * Puts all the given [pairs] into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Array<out Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Puts all the elements of the given collection into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Iterable<Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Puts all the elements of the given sequence into this [MutableMap] with the first component in the pair being the key and the second the value.\n */\npublic fun <K, V> MutableMap<in K, in V>.putAll(pairs: Sequence<Pair<K, V>>): Unit {\n for ((key, value) in pairs) {\n put(key, value)\n }\n}\n\n/**\n * Returns a new map with entries having the keys of this map and the values obtained by applying the [transform]\n * function to each entry in this [Map].\n *\n * The returned map preserves the entry iteration order of the original map.\n *\n * @sample samples.collections.Maps.Transformations.mapValues\n */\npublic inline fun <K, V, R> Map<out K, V>.mapValues(transform: (Map.Entry<K, V>) -> R): Map<K, R> {\n return mapValuesTo(LinkedHashMap<K, R>(mapCapacity(size)), transform) // .optimizeReadOnlyMap()\n}\n\n/**\n * Returns a new Map with entries having the keys obtained by applying the [transform] function to each entry in this\n * [Map] and the values of this map.\n *\n * In case if any two entries are mapped to the equal keys, the value of the latter one will overwrite\n * the value associated with the former one.\n *\n * The returned map preserves the entry iteration order of the original map.\n *\n * @sample samples.collections.Maps.Transformations.mapKeys\n */\npublic inline fun <K, V, R> Map<out K, V>.mapKeys(transform: (Map.Entry<K, V>) -> R): Map<R, V> {\n return mapKeysTo(LinkedHashMap<R, V>(mapCapacity(size)), transform) // .optimizeReadOnlyMap()\n}\n\n/**\n * Returns a map containing all key-value pairs with keys matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterKeys\n */\npublic inline fun <K, V> Map<out K, V>.filterKeys(predicate: (K) -> Boolean): Map<K, V> {\n val result = LinkedHashMap<K, V>()\n for (entry in this) {\n if (predicate(entry.key)) {\n result.put(entry.key, entry.value)\n }\n }\n return result\n}\n\n/**\n * Returns a map containing all key-value pairs with values matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterValues\n */\npublic inline fun <K, V> Map<out K, V>.filterValues(predicate: (V) -> Boolean): Map<K, V> {\n val result = LinkedHashMap<K, V>()\n for (entry in this) {\n if (predicate(entry.value)) {\n result.put(entry.key, entry.value)\n }\n }\n return result\n}\n\n\n/**\n * Appends all entries matching the given [predicate] into the mutable map given as [destination] parameter.\n *\n * @return the destination map.\n * @sample samples.collections.Maps.Filtering.filterTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.filterTo(destination: M, predicate: (Map.Entry<K, V>) -> Boolean): M {\n for (element in this) {\n if (predicate(element)) {\n destination.put(element.key, element.value)\n }\n }\n return destination\n}\n\n/**\n * Returns a new map containing all key-value pairs matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filter\n */\npublic inline fun <K, V> Map<out K, V>.filter(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V> {\n return filterTo(LinkedHashMap<K, V>(), predicate)\n}\n\n/**\n * Appends all entries not matching the given [predicate] into the given [destination].\n *\n * @return the destination map.\n * @sample samples.collections.Maps.Filtering.filterNotTo\n */\npublic inline fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.filterNotTo(destination: M, predicate: (Map.Entry<K, V>) -> Boolean): M {\n for (element in this) {\n if (!predicate(element)) {\n destination.put(element.key, element.value)\n }\n }\n return destination\n}\n\n/**\n * Returns a new map containing all key-value pairs not matching the given [predicate].\n *\n * The returned map preserves the entry iteration order of the original map.\n * @sample samples.collections.Maps.Filtering.filterNot\n */\npublic inline fun <K, V> Map<out K, V>.filterNot(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V> {\n return filterNotTo(LinkedHashMap<K, V>(), predicate)\n}\n\n/**\n * Returns a new map containing all key-value pairs from the given collection of pairs.\n *\n * The returned map preserves the entry iteration order of the original collection.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Iterable<Pair<K, V>>.toMap(): Map<K, V> {\n if (this is Collection) {\n return when (size) {\n 0 -> emptyMap()\n 1 -> mapOf(if (this is List) this[0] else iterator().next())\n else -> toMap(LinkedHashMap<K, V>(mapCapacity(size)))\n }\n }\n return toMap(LinkedHashMap<K, V>()).optimizeReadOnlyMap()\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given collection of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Iterable<Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new map containing all key-value pairs from the given array of pairs.\n *\n * The returned map preserves the entry iteration order of the original array.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Array<out Pair<K, V>>.toMap(): Map<K, V> = when (size) {\n 0 -> emptyMap()\n 1 -> mapOf(this[0])\n else -> toMap(LinkedHashMap<K, V>(mapCapacity(size)))\n}\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given array of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Array<out Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new map containing all key-value pairs from the given sequence of pairs.\n *\n * The returned map preserves the entry iteration order of the original sequence.\n * If any of two pairs would have the same key the last one gets added to the map.\n */\npublic fun <K, V> Sequence<Pair<K, V>>.toMap(): Map<K, V> = toMap(LinkedHashMap<K, V>()).optimizeReadOnlyMap()\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given sequence of pairs.\n */\npublic fun <K, V, M : MutableMap<in K, in V>> Sequence<Pair<K, V>>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Returns a new read-only map containing all key-value pairs from the original map.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<out K, V>.toMap(): Map<K, V> = when (size) {\n 0 -> emptyMap()\n 1 -> toSingletonMap()\n else -> toMutableMap()\n}\n\n/**\n * Returns a new mutable map containing all key-value pairs from the original map.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V> Map<out K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this)\n\n/**\n * Populates and returns the [destination] mutable map with key-value pairs from the given map.\n */\n@SinceKotlin(\"1.1\")\npublic fun <K, V, M : MutableMap<in K, in V>> Map<out K, V>.toMap(destination: M): M =\n destination.apply { putAll(this@toMap) }\n\n/**\n * Creates a new read-only map by replacing or adding an entry to this map from a given key-value [pair].\n *\n * The returned map preserves the entry iteration order of the original map.\n * The [pair] is iterated in the end if it has a unique key.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V> =\n if (this.isEmpty()) mapOf(pair) else LinkedHashMap(this).apply { put(pair.first, pair.second) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given collection of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] collection.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Iterable<Pair<K, V>>): Map<K, V> =\n if (this.isEmpty()) pairs.toMap() else LinkedHashMap(this).apply { putAll(pairs) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given array of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] array.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Array<out Pair<K, V>>): Map<K, V> =\n if (this.isEmpty()) pairs.toMap() else LinkedHashMap(this).apply { putAll(pairs) }\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from a given sequence of key-value [pairs].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those [pairs] with unique keys are iterated in the end in the order of [pairs] sequence.\n */\npublic operator fun <K, V> Map<out K, V>.plus(pairs: Sequence<Pair<K, V>>): Map<K, V> =\n LinkedHashMap(this).apply { putAll(pairs) }.optimizeReadOnlyMap()\n\n/**\n * Creates a new read-only map by replacing or adding entries to this map from another [map].\n *\n * The returned map preserves the entry iteration order of the original map.\n * Those entries of another [map] that are missing in this map are iterated in the end in the order of that [map].\n */\npublic operator fun <K, V> Map<out K, V>.plus(map: Map<out K, V>): Map<K, V> =\n LinkedHashMap(this).apply { putAll(map) }\n\n\n/**\n * Appends or replaces the given [pair] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pair: Pair<K, V>) {\n put(pair.first, pair.second)\n}\n\n/**\n * Appends or replaces all pairs from the given collection of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Iterable<Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all pairs from the given array of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Array<out Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all pairs from the given sequence of [pairs] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(pairs: Sequence<Pair<K, V>>) {\n putAll(pairs)\n}\n\n/**\n * Appends or replaces all entries from the given [map] in this mutable map.\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<in K, in V>.plusAssign(map: Map<K, V>) {\n putAll(map)\n}\n\n/**\n * Returns a map containing all entries of the original map except the entry with the given [key].\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(key: K): Map<K, V> =\n this.toMutableMap().apply { minusAssign(key) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] collection.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Iterable<K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] array.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Array<out K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Returns a map containing all entries of the original map except those entries\n * the keys of which are contained in the given [keys] sequence.\n *\n * The returned map preserves the entry iteration order of the original map.\n */\n@SinceKotlin(\"1.1\")\npublic operator fun <K, V> Map<out K, V>.minus(keys: Sequence<K>): Map<K, V> =\n this.toMutableMap().apply { minusAssign(keys) }.optimizeReadOnlyMap()\n\n/**\n * Removes the entry with the given [key] from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(key: K) {\n remove(key)\n}\n\n/**\n * Removes all entries the keys of which are contained in the given [keys] collection from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Iterable<K>) {\n this.keys.removeAll(keys)\n}\n\n/**\n * Removes all entries the keys of which are contained in the given [keys] array from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Array<out K>) {\n this.keys.removeAll(keys)\n}\n\n/**\n * Removes all entries from the keys of which are contained in the given [keys] sequence from this mutable map.\n */\n@SinceKotlin(\"1.1\")\n@kotlin.internal.InlineOnly\npublic inline operator fun <K, V> MutableMap<K, V>.minusAssign(keys: Sequence<K>) {\n this.keys.removeAll(keys)\n}\n\n\n// do not expose for now @PublishedApi\ninternal fun <K, V> Map<K, V>.optimizeReadOnlyMap() = when (size) {\n 0 -> emptyMap()\n 1 -> toSingletonMapOrSelf()\n else -> this\n}\n","/*\n * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"StringsKt\")\n\npackage kotlin.text\n\nimport kotlin.contracts.contract\nimport kotlin.jvm.JvmName\n\n/**\n * Returns a copy of this string converted to upper case using the rules of the default locale.\n */\npublic expect fun String.toUpperCase(): String\n\n/**\n * Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.uppercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun String.uppercase(): String\n\n/**\n * Returns a copy of this string converted to lower case using the rules of the default locale.\n */\npublic expect fun String.toLowerCase(): String\n\n/**\n * Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.\n *\n * This function supports one-to-many and many-to-one character mapping,\n * thus the length of the returned string can be different from the length of the original string.\n *\n * @sample samples.text.Strings.lowercase\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\npublic expect fun String.lowercase(): String\n\n/**\n * Returns a copy of this string having its first letter titlecased using the rules of the default locale,\n * or the original string if it's empty or already starts with a title case letter.\n *\n * The title case of a character is usually the same as its upper case with several exceptions.\n * The particular list of characters with the special title case form depends on the underlying platform.\n *\n * @sample samples.text.Strings.capitalize\n */\npublic expect fun String.capitalize(): String\n\n/**\n * Returns a copy of this string having its first letter lowercased using the rules of the default locale,\n * or the original string if it's empty or already starts with a lower case letter.\n *\n * @sample samples.text.Strings.decapitalize\n */\npublic expect fun String.decapitalize(): String\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trim(predicate: (Char) -> Boolean): CharSequence {\n var startIndex = 0\n var endIndex = length - 1\n var startFound = false\n\n while (startIndex <= endIndex) {\n val index = if (!startFound) startIndex else endIndex\n val match = predicate(this[index])\n\n if (!startFound) {\n if (!match)\n startFound = true\n else\n startIndex += 1\n } else {\n if (!match)\n break\n else\n endIndex -= 1\n }\n }\n\n return subSequence(startIndex, endIndex + 1)\n}\n\n/**\n * Returns a string having leading and trailing characters matching the [predicate] removed.\n */\npublic inline fun String.trim(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trim(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trimStart(predicate: (Char) -> Boolean): CharSequence {\n for (index in this.indices)\n if (!predicate(this[index]))\n return subSequence(index, length)\n\n return \"\"\n}\n\n/**\n * Returns a string having leading characters matching the [predicate] removed.\n */\npublic inline fun String.trimStart(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trimStart(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having trailing characters matching the [predicate] removed.\n */\npublic inline fun CharSequence.trimEnd(predicate: (Char) -> Boolean): CharSequence {\n for (index in this.indices.reversed())\n if (!predicate(this[index]))\n return subSequence(0, index + 1)\n\n return \"\"\n}\n\n/**\n * Returns a string having trailing characters matching the [predicate] removed.\n */\npublic inline fun String.trimEnd(predicate: (Char) -> Boolean): String =\n (this as CharSequence).trimEnd(predicate).toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing characters from the [chars] array removed.\n */\npublic fun CharSequence.trim(vararg chars: Char): CharSequence = trim { it in chars }\n\n/**\n * Returns a string having leading and trailing characters from the [chars] array removed.\n */\npublic fun String.trim(vararg chars: Char): String = trim { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having leading characters from the [chars] array removed.\n */\npublic fun CharSequence.trimStart(vararg chars: Char): CharSequence = trimStart { it in chars }\n\n/**\n * Returns a string having leading characters from the [chars] array removed.\n */\npublic fun String.trimStart(vararg chars: Char): String = trimStart { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having trailing characters from the [chars] array removed.\n */\npublic fun CharSequence.trimEnd(vararg chars: Char): CharSequence = trimEnd { it in chars }\n\n/**\n * Returns a string having trailing characters from the [chars] array removed.\n */\npublic fun String.trimEnd(vararg chars: Char): String = trimEnd { it in chars }\n\n/**\n * Returns a sub sequence of this char sequence having leading and trailing whitespace removed.\n */\npublic fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace)\n\n/**\n * Returns a string having leading and trailing whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trim(): String = (this as CharSequence).trim().toString()\n\n/**\n * Returns a sub sequence of this char sequence having leading whitespace removed.\n */\npublic fun CharSequence.trimStart(): CharSequence = trimStart(Char::isWhitespace)\n\n/**\n * Returns a string having leading whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trimStart(): String = (this as CharSequence).trimStart().toString()\n\n/**\n * Returns a sub sequence of this char sequence having trailing whitespace removed.\n */\npublic fun CharSequence.trimEnd(): CharSequence = trimEnd(Char::isWhitespace)\n\n/**\n * Returns a string having trailing whitespace removed.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.trimEnd(): String = (this as CharSequence).trimEnd().toString()\n\n/**\n * Returns a char sequence with content of this char sequence padded at the beginning\n * to the specified [length] with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a char sequence of length at least [length] consisting of `this` char sequence prepended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padStart\n */\npublic fun CharSequence.padStart(length: Int, padChar: Char = ' '): CharSequence {\n if (length < 0)\n throw IllegalArgumentException(\"Desired length $length is less than zero.\")\n if (length <= this.length)\n return this.subSequence(0, this.length)\n\n val sb = StringBuilder(length)\n for (i in 1..(length - this.length))\n sb.append(padChar)\n sb.append(this)\n return sb\n}\n\n/**\n * Pads the string to the specified [length] at the beginning with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a string of length at least [length] consisting of `this` string prepended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padStart\n */\npublic fun String.padStart(length: Int, padChar: Char = ' '): String =\n (this as CharSequence).padStart(length, padChar).toString()\n\n/**\n * Returns a char sequence with content of this char sequence padded at the end\n * to the specified [length] with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a char sequence of length at least [length] consisting of `this` char sequence appended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padEnd\n */\npublic fun CharSequence.padEnd(length: Int, padChar: Char = ' '): CharSequence {\n if (length < 0)\n throw IllegalArgumentException(\"Desired length $length is less than zero.\")\n if (length <= this.length)\n return this.subSequence(0, this.length)\n\n val sb = StringBuilder(length)\n sb.append(this)\n for (i in 1..(length - this.length))\n sb.append(padChar)\n return sb\n}\n\n/**\n * Pads the string to the specified [length] at the end with the specified character or space.\n *\n * @param length the desired string length.\n * @param padChar the character to pad string with, if it has length less than the [length] specified. Space is used by default.\n * @return Returns a string of length at least [length] consisting of `this` string appended with [padChar] as many times\n * as are necessary to reach that length.\n * @sample samples.text.Strings.padEnd\n */\npublic fun String.padEnd(length: Int, padChar: Char = ' '): String =\n (this as CharSequence).padEnd(length, padChar).toString()\n\n/**\n * Returns `true` if this nullable char sequence is either `null` or empty.\n *\n * @sample samples.text.Strings.stringIsNullOrEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence?.isNullOrEmpty(): Boolean {\n contract {\n returns(false) implies (this@isNullOrEmpty != null)\n }\n\n return this == null || this.length == 0\n}\n\n/**\n * Returns `true` if this char sequence is empty (contains no characters).\n *\n * @sample samples.text.Strings.stringIsEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isEmpty(): Boolean = length == 0\n\n/**\n * Returns `true` if this char sequence is not empty.\n *\n * @sample samples.text.Strings.stringIsNotEmpty\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isNotEmpty(): Boolean = length > 0\n\n// implemented differently in JVM and JS\n//public fun String.isBlank(): Boolean = length() == 0 || all { it.isWhitespace() }\n\n\n/**\n * Returns `true` if this char sequence is not empty and contains some characters except of whitespace characters.\n *\n * @sample samples.text.Strings.stringIsNotBlank\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.isNotBlank(): Boolean = !isBlank()\n\n/**\n * Returns `true` if this nullable char sequence is either `null` or empty or consists solely of whitespace characters.\n *\n * @sample samples.text.Strings.stringIsNullOrBlank\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence?.isNullOrBlank(): Boolean {\n contract {\n returns(false) implies (this@isNullOrBlank != null)\n }\n\n return this == null || this.isBlank()\n}\n\n/**\n * Iterator for characters of the given char sequence.\n */\npublic operator fun CharSequence.iterator(): CharIterator = object : CharIterator() {\n private var index = 0\n\n public override fun nextChar(): Char = get(index++)\n\n public override fun hasNext(): Boolean = index < length\n}\n\n/** Returns the string if it is not `null`, or the empty string otherwise. */\n@kotlin.internal.InlineOnly\npublic inline fun String?.orEmpty(): String = this ?: \"\"\n\n/**\n * Returns this char sequence if it's not empty\n * or the result of calling [defaultValue] function if the char sequence is empty.\n *\n * @sample samples.text.Strings.stringIfEmpty\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : CharSequence, C : R =\n if (isEmpty()) defaultValue() else this\n\n/**\n * Returns this char sequence if it is not empty and doesn't consist solely of whitespace characters,\n * or the result of calling [defaultValue] function otherwise.\n *\n * @sample samples.text.Strings.stringIfBlank\n */\n@SinceKotlin(\"1.3\")\n@kotlin.internal.InlineOnly\npublic inline fun <C, R> C.ifBlank(defaultValue: () -> R): R where C : CharSequence, C : R =\n if (isBlank()) defaultValue() else this\n\n/**\n * Returns the range of valid character indices for this char sequence.\n */\npublic val CharSequence.indices: IntRange\n get() = 0..length - 1\n\n/**\n * Returns the index of the last character in the char sequence or -1 if it is empty.\n */\npublic val CharSequence.lastIndex: Int\n get() = this.length - 1\n\n/**\n * Returns `true` if this CharSequence has Unicode surrogate pair at the specified [index].\n */\npublic fun CharSequence.hasSurrogatePairAt(index: Int): Boolean {\n return index in 0..length - 2\n && this[index].isHighSurrogate()\n && this[index + 1].isLowSurrogate()\n}\n\n/**\n * Returns a substring specified by the given [range] of indices.\n */\npublic fun String.substring(range: IntRange): String = substring(range.start, range.endInclusive + 1)\n\n/**\n * Returns a subsequence of this char sequence specified by the given [range] of indices.\n */\npublic fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)\n\n/**\n * Returns a subsequence of this char sequence.\n *\n * This extension is chosen only for invocation with old-named parameters.\n * Replace parameter names with the same as those of [CharSequence.subSequence].\n */\n@kotlin.internal.InlineOnly\n@Suppress(\"EXTENSION_SHADOWED_BY_MEMBER\") // false warning\n@Deprecated(\"Use parameters named startIndex and endIndex.\", ReplaceWith(\"subSequence(startIndex = start, endIndex = end)\"))\npublic inline fun String.subSequence(start: Int, end: Int): CharSequence = subSequence(start, end)\n\n/**\n * Returns a substring of chars from a range of this char sequence starting at the [startIndex] and ending right before the [endIndex].\n *\n * @param startIndex the start index (inclusive).\n * @param endIndex the end index (exclusive). If not specified, the length of the char sequence is used.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString()\n\n/**\n * Returns a substring of chars at indices from the specified [range] of this char sequence.\n */\npublic fun CharSequence.substring(range: IntRange): String = subSequence(range.start, range.endInclusive + 1).toString()\n\n/**\n * Returns a substring before the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBefore(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring before the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBefore(delimiter: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring after the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfter(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + 1, length)\n}\n\n/**\n * Returns a substring after the first occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfter(delimiter: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + delimiter.length, length)\n}\n\n/**\n * Returns a substring before the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBeforeLast(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring before the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringBeforeLast(delimiter: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(0, index)\n}\n\n/**\n * Returns a substring after the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfterLast(delimiter: Char, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + 1, length)\n}\n\n/**\n * Returns a substring after the last occurrence of [delimiter].\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.substringAfterLast(delimiter: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else substring(index + delimiter.length, length)\n}\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given range\n * is replaced with the [replacement] char sequence.\n * @param startIndex the index of the first character to be replaced.\n * @param endIndex the index of the first character after the replacement to keep in the string.\n */\n@OptIn(ExperimentalStdlibApi::class)\npublic fun CharSequence.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): CharSequence {\n if (endIndex < startIndex)\n throw IndexOutOfBoundsException(\"End index ($endIndex) is less than start index ($startIndex).\")\n val sb = StringBuilder()\n sb.appendRange(this, 0, startIndex)\n sb.append(replacement)\n sb.appendRange(this, endIndex, length)\n return sb\n}\n\n/**\n * Replaces the part of the string at the given range with the [replacement] char sequence.\n * @param startIndex the index of the first character to be replaced.\n * @param endIndex the index of the first character after the replacement to keep in the string.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): String =\n (this as CharSequence).replaceRange(startIndex, endIndex, replacement).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given [range]\n * is replaced with the [replacement] char sequence.\n *\n * The end index of the [range] is included in the part to be replaced.\n */\npublic fun CharSequence.replaceRange(range: IntRange, replacement: CharSequence): CharSequence =\n replaceRange(range.start, range.endInclusive + 1, replacement)\n\n/**\n * Replace the part of string at the given [range] with the [replacement] string.\n *\n * The end index of the [range] is included in the part to be replaced.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceRange(range: IntRange, replacement: CharSequence): String =\n (this as CharSequence).replaceRange(range, replacement).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given range is removed.\n *\n * @param startIndex the index of the first character to be removed.\n * @param endIndex the index of the first character after the removed part to keep in the string.\n *\n * [endIndex] is not included in the removed part.\n */\n@OptIn(ExperimentalStdlibApi::class)\npublic fun CharSequence.removeRange(startIndex: Int, endIndex: Int): CharSequence {\n if (endIndex < startIndex)\n throw IndexOutOfBoundsException(\"End index ($endIndex) is less than start index ($startIndex).\")\n\n if (endIndex == startIndex)\n return this.subSequence(0, length)\n\n val sb = StringBuilder(length - (endIndex - startIndex))\n sb.appendRange(this, 0, startIndex)\n sb.appendRange(this, endIndex, length)\n return sb\n}\n\n/**\n * Removes the part of a string at a given range.\n * @param startIndex the index of the first character to be removed.\n * @param endIndex the index of the first character after the removed part to keep in the string.\n *\n * [endIndex] is not included in the removed part.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.removeRange(startIndex: Int, endIndex: Int): String =\n (this as CharSequence).removeRange(startIndex, endIndex).toString()\n\n/**\n * Returns a char sequence with content of this char sequence where its part at the given [range] is removed.\n *\n * The end index of the [range] is included in the removed part.\n */\npublic fun CharSequence.removeRange(range: IntRange): CharSequence = removeRange(range.start, range.endInclusive + 1)\n\n/**\n * Removes the part of a string at the given [range].\n *\n * The end index of the [range] is included in the removed part.\n */\n@kotlin.internal.InlineOnly\npublic inline fun String.removeRange(range: IntRange): String =\n (this as CharSequence).removeRange(range).toString()\n\n/**\n * If this char sequence starts with the given [prefix], returns a new char sequence\n * with the prefix removed. Otherwise, returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removePrefix(prefix: CharSequence): CharSequence {\n if (startsWith(prefix)) {\n return subSequence(prefix.length, length)\n }\n return subSequence(0, length)\n}\n\n/**\n * If this string starts with the given [prefix], returns a copy of this string\n * with the prefix removed. Otherwise, returns this string.\n */\npublic fun String.removePrefix(prefix: CharSequence): String {\n if (startsWith(prefix)) {\n return substring(prefix.length)\n }\n return this\n}\n\n/**\n * If this char sequence ends with the given [suffix], returns a new char sequence\n * with the suffix removed. Otherwise, returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSuffix(suffix: CharSequence): CharSequence {\n if (endsWith(suffix)) {\n return subSequence(0, length - suffix.length)\n }\n return subSequence(0, length)\n}\n\n/**\n * If this string ends with the given [suffix], returns a copy of this string\n * with the suffix removed. Otherwise, returns this string.\n */\npublic fun String.removeSuffix(suffix: CharSequence): String {\n if (endsWith(suffix)) {\n return substring(0, length - suffix.length)\n }\n return this\n}\n\n/**\n * When this char sequence starts with the given [prefix] and ends with the given [suffix],\n * returns a new char sequence having both the given [prefix] and [suffix] removed.\n * Otherwise returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSurrounding(prefix: CharSequence, suffix: CharSequence): CharSequence {\n if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {\n return subSequence(prefix.length, length - suffix.length)\n }\n return subSequence(0, length)\n}\n\n/**\n * Removes from a string both the given [prefix] and [suffix] if and only if\n * it starts with the [prefix] and ends with the [suffix].\n * Otherwise returns this string unchanged.\n */\npublic fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {\n if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {\n return substring(prefix.length, length - suffix.length)\n }\n return this\n}\n\n/**\n * When this char sequence starts with and ends with the given [delimiter],\n * returns a new char sequence having this [delimiter] removed both from the start and end.\n * Otherwise returns a new char sequence with the same characters.\n */\npublic fun CharSequence.removeSurrounding(delimiter: CharSequence): CharSequence = removeSurrounding(delimiter, delimiter)\n\n/**\n * Removes the given [delimiter] string from both the start and the end of this string\n * if and only if it starts with and ends with the [delimiter].\n * Otherwise returns this string unchanged.\n */\npublic fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)\n\n/**\n * Replace part of string before the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBefore(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string before the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBefore(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string after the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfter(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + 1, length, replacement)\n}\n\n/**\n * Replace part of string after the first occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfter(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = indexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + delimiter.length, length, replacement)\n}\n\n/**\n * Replace part of string after the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfterLast(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + delimiter.length, length, replacement)\n}\n\n/**\n * Replace part of string after the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceAfterLast(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(index + 1, length, replacement)\n}\n\n/**\n * Replace part of string before the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBeforeLast(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n/**\n * Replace part of string before the last occurrence of given delimiter with the [replacement] string.\n * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string.\n */\npublic fun String.replaceBeforeLast(delimiter: String, replacement: String, missingDelimiterValue: String = this): String {\n val index = lastIndexOf(delimiter)\n return if (index == -1) missingDelimiterValue else replaceRange(0, index, replacement)\n}\n\n\n// public fun String.replace(oldChar: Char, newChar: Char, ignoreCase: Boolean): String // JVM- and JS-specific\n// public fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean): String // JVM- and JS-specific\n\n/**\n * Returns a new string obtained by replacing each substring of this char sequence that matches the given regular expression\n * with the given [replacement].\n *\n * The [replacement] can consist of any combination of literal text and $-substitutions. To treat the replacement string\n * literally escape it with the [kotlin.text.Regex.Companion.escapeReplacement] method.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replace(regex: Regex, replacement: String): String = regex.replace(this, replacement)\n\n/**\n * Returns a new string obtained by replacing each substring of this char sequence that matches the given regular expression\n * with the result of the given function [transform] that takes [MatchResult] and returns a string to be used as a\n * replacement for that match.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence): String =\n regex.replace(this, transform)\n\n/**\n * Replaces the first occurrence of the given regular expression [regex] in this char sequence with specified [replacement] expression.\n *\n * @param replacement A replacement expression that can include substitutions. See [Regex.replaceFirst] for details.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.replaceFirst(regex: Regex, replacement: String): String = regex.replaceFirst(this, replacement)\n\n/**\n * Returns a copy of this string having its first character replaced with the result of the specified [transform],\n * or the original string if it's empty.\n *\n * @param transform function that takes the first character and returns the result of the transform applied to the character.\n *\n * @sample samples.text.Strings.replaceFirstChar\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@JvmName(\"replaceFirstCharWithChar\")\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceFirstChar(transform: (Char) -> Char): String {\n return if (isNotEmpty()) transform(this[0]) + substring(1) else this\n}\n\n/**\n * Returns a copy of this string having its first character replaced with the result of the specified [transform],\n * or the original string if it's empty.\n *\n * @param transform function that takes the first character and returns the result of the transform applied to the character.\n *\n * @sample samples.text.Strings.replaceFirstChar\n */\n@SinceKotlin(\"1.4\")\n@ExperimentalStdlibApi\n@OptIn(kotlin.experimental.ExperimentalTypeInference::class)\n@OverloadResolutionByLambdaReturnType\n@JvmName(\"replaceFirstCharWithCharSequence\")\n@kotlin.internal.InlineOnly\npublic inline fun String.replaceFirstChar(transform: (Char) -> CharSequence): String {\n return if (isNotEmpty()) transform(this[0]).toString() + substring(1) else this\n}\n\n\n/**\n * Returns `true` if this char sequence matches the given regular expression.\n */\n@kotlin.internal.InlineOnly\npublic inline infix fun CharSequence.matches(regex: Regex): Boolean = regex.matches(this)\n\n/**\n * Implementation of [regionMatches] for CharSequences.\n * Invoked when it's already known that arguments are not Strings, so that no additional type checks are performed.\n */\ninternal fun CharSequence.regionMatchesImpl(thisOffset: Int, other: CharSequence, otherOffset: Int, length: Int, ignoreCase: Boolean): Boolean {\n if ((otherOffset < 0) || (thisOffset < 0) || (thisOffset > this.length - length) || (otherOffset > other.length - length)) {\n return false\n }\n\n for (index in 0 until length) {\n if (!this[thisOffset + index].equals(other[otherOffset + index], ignoreCase))\n return false\n }\n return true\n}\n\n/**\n * Returns `true` if this char sequence starts with the specified character.\n */\npublic fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = false): Boolean =\n this.length > 0 && this[0].equals(char, ignoreCase)\n\n/**\n * Returns `true` if this char sequence ends with the specified character.\n */\npublic fun CharSequence.endsWith(char: Char, ignoreCase: Boolean = false): Boolean =\n this.length > 0 && this[lastIndex].equals(char, ignoreCase)\n\n/**\n * Returns `true` if this char sequence starts with the specified prefix.\n */\npublic fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && prefix is String)\n return this.startsWith(prefix)\n else\n return regionMatchesImpl(0, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if a substring of this char sequence starting at the specified offset [startIndex] starts with the specified prefix.\n */\npublic fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && prefix is String)\n return this.startsWith(prefix, startIndex)\n else\n return regionMatchesImpl(startIndex, prefix, 0, prefix.length, ignoreCase)\n}\n\n/**\n * Returns `true` if this char sequence ends with the specified suffix.\n */\npublic fun CharSequence.endsWith(suffix: CharSequence, ignoreCase: Boolean = false): Boolean {\n if (!ignoreCase && this is String && suffix is String)\n return this.endsWith(suffix)\n else\n return regionMatchesImpl(length - suffix.length, suffix, 0, suffix.length, ignoreCase)\n}\n\n\n// common prefix and suffix\n\n/**\n * Returns the longest string `prefix` such that this char sequence and [other] char sequence both start with this prefix,\n * taking care not to split surrogate pairs.\n * If this and [other] have no common prefix, returns the empty string.\n\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @sample samples.text.Strings.commonPrefixWith\n */\npublic fun CharSequence.commonPrefixWith(other: CharSequence, ignoreCase: Boolean = false): String {\n val shortestLength = minOf(this.length, other.length)\n\n var i = 0\n while (i < shortestLength && this[i].equals(other[i], ignoreCase = ignoreCase)) {\n i++\n }\n if (this.hasSurrogatePairAt(i - 1) || other.hasSurrogatePairAt(i - 1)) {\n i--\n }\n return subSequence(0, i).toString()\n}\n\n/**\n * Returns the longest string `suffix` such that this char sequence and [other] char sequence both end with this suffix,\n * taking care not to split surrogate pairs.\n * If this and [other] have no common suffix, returns the empty string.\n\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @sample samples.text.Strings.commonSuffixWith\n */\npublic fun CharSequence.commonSuffixWith(other: CharSequence, ignoreCase: Boolean = false): String {\n val thisLength = this.length\n val otherLength = other.length\n val shortestLength = minOf(thisLength, otherLength)\n\n var i = 0\n while (i < shortestLength && this[thisLength - i - 1].equals(other[otherLength - i - 1], ignoreCase = ignoreCase)) {\n i++\n }\n if (this.hasSurrogatePairAt(thisLength - i - 1) || other.hasSurrogatePairAt(otherLength - i - 1)) {\n i--\n }\n return subSequence(thisLength - i, thisLength).toString()\n}\n\n\n// indexOfAny()\n\n/**\n * Finds the index of the first occurrence of any of the specified [chars] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the first occurrence of matched character from [chars] or -1 if none of [chars] are found.\n *\n */\npublic fun CharSequence.indexOfAny(chars: CharArray, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n if (!ignoreCase && chars.size == 1 && this is String) {\n val char = chars.single()\n return nativeIndexOf(char, startIndex)\n }\n\n for (index in startIndex.coerceAtLeast(0)..lastIndex) {\n val charAtIndex = get(index)\n if (chars.any { it.equals(charAtIndex, ignoreCase) })\n return index\n }\n return -1\n}\n\n/**\n * Finds the index of the last occurrence of any of the specified [chars] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the last occurrence of matched character from [chars] or -1 if none of [chars] are found.\n *\n */\npublic fun CharSequence.lastIndexOfAny(chars: CharArray, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n if (!ignoreCase && chars.size == 1 && this is String) {\n val char = chars.single()\n return nativeLastIndexOf(char, startIndex)\n }\n\n\n for (index in startIndex.coerceAtMost(lastIndex) downTo 0) {\n val charAtIndex = get(index)\n if (chars.any { it.equals(charAtIndex, ignoreCase) })\n return index\n }\n\n return -1\n}\n\n\nprivate fun CharSequence.indexOf(other: CharSequence, startIndex: Int, endIndex: Int, ignoreCase: Boolean, last: Boolean = false): Int {\n val indices = if (!last)\n startIndex.coerceAtLeast(0)..endIndex.coerceAtMost(length)\n else\n startIndex.coerceAtMost(lastIndex) downTo endIndex.coerceAtLeast(0)\n\n if (this is String && other is String) { // smart cast\n for (index in indices) {\n if (other.regionMatches(0, this, index, other.length, ignoreCase))\n return index\n }\n } else {\n for (index in indices) {\n if (other.regionMatchesImpl(0, this, index, other.length, ignoreCase))\n return index\n }\n }\n return -1\n}\n\nprivate fun CharSequence.findAnyOf(strings: Collection<String>, startIndex: Int, ignoreCase: Boolean, last: Boolean): Pair<Int, String>? {\n if (!ignoreCase && strings.size == 1) {\n val string = strings.single()\n val index = if (!last) indexOf(string, startIndex) else lastIndexOf(string, startIndex)\n return if (index < 0) null else index to string\n }\n\n val indices = if (!last) startIndex.coerceAtLeast(0)..length else startIndex.coerceAtMost(lastIndex) downTo 0\n\n if (this is String) {\n for (index in indices) {\n val matchingString = strings.firstOrNull { it.regionMatches(0, this, index, it.length, ignoreCase) }\n if (matchingString != null)\n return index to matchingString\n }\n } else {\n for (index in indices) {\n val matchingString = strings.firstOrNull { it.regionMatchesImpl(0, this, index, it.length, ignoreCase) }\n if (matchingString != null)\n return index to matchingString\n }\n }\n\n return null\n}\n\n/**\n * Finds the first occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return A pair of an index of the first occurrence of matched string from [strings] and the string matched\n * or `null` if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.findAnyOf(strings: Collection<String>, startIndex: Int = 0, ignoreCase: Boolean = false): Pair<Int, String>? =\n findAnyOf(strings, startIndex, ignoreCase, last = false)\n\n/**\n * Finds the last occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return A pair of an index of the last occurrence of matched string from [strings] and the string matched or `null` if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the end toward the beginning of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.findLastAnyOf(strings: Collection<String>, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Pair<Int, String>? =\n findAnyOf(strings, startIndex, ignoreCase, last = true)\n\n/**\n * Finds the index of the first occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the first occurrence of matched string from [strings] or -1 if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.indexOfAny(strings: Collection<String>, startIndex: Int = 0, ignoreCase: Boolean = false): Int =\n findAnyOf(strings, startIndex, ignoreCase, last = false)?.first ?: -1\n\n/**\n * Finds the index of the last occurrence of any of the specified [strings] in this char sequence,\n * starting from the specified [startIndex] and optionally ignoring the case.\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the last occurrence of matched string from [strings] or -1 if none of [strings] are found.\n *\n * To avoid ambiguous results when strings in [strings] have characters in common, this method proceeds from\n * the end toward the beginning of this string, and finds at each position the first element in [strings]\n * that matches this string at that position.\n */\npublic fun CharSequence.lastIndexOfAny(strings: Collection<String>, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int =\n findAnyOf(strings, startIndex, ignoreCase, last = true)?.first ?: -1\n\n\n// indexOf\n\n/**\n * Returns the index within this string of the first occurrence of the specified character, starting from the specified [startIndex].\n *\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the first occurrence of [char] or -1 if none is found.\n */\npublic fun CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOfAny(charArrayOf(char), startIndex, ignoreCase)\n else\n nativeIndexOf(char, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the first occurrence of the specified [string],\n * starting from the specified [startIndex].\n *\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the first occurrence of [string] or `-1` if none is found.\n * @sample samples.text.Strings.indexOf\n */\npublic fun CharSequence.indexOf(string: String, startIndex: Int = 0, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOf(string, startIndex, length, ignoreCase)\n else\n nativeIndexOf(string, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the last occurrence of the specified character,\n * starting from the specified [startIndex].\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a character. By default `false`.\n * @return An index of the last occurrence of [char] or -1 if none is found.\n */\npublic fun CharSequence.lastIndexOf(char: Char, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n lastIndexOfAny(charArrayOf(char), startIndex, ignoreCase)\n else\n nativeLastIndexOf(char, startIndex)\n}\n\n/**\n * Returns the index within this char sequence of the last occurrence of the specified [string],\n * starting from the specified [startIndex].\n *\n * @param startIndex The index of character to start searching at. The search proceeds backward toward the beginning of the string.\n * @param ignoreCase `true` to ignore character case when matching a string. By default `false`.\n * @return An index of the last occurrence of [string] or -1 if none is found.\n */\npublic fun CharSequence.lastIndexOf(string: String, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int {\n return if (ignoreCase || this !is String)\n indexOf(string, startIndex, 0, ignoreCase, last = true)\n else\n nativeLastIndexOf(string, startIndex)\n}\n\n/**\n * Returns `true` if this char sequence contains the specified [other] sequence of characters as a substring.\n *\n * @param ignoreCase `true` to ignore character case when comparing strings. By default `false`.\n */\n@Suppress(\"INAPPLICABLE_OPERATOR_MODIFIER\")\npublic operator fun CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false): Boolean =\n if (other is String)\n indexOf(other, ignoreCase = ignoreCase) >= 0\n else\n indexOf(other, 0, length, ignoreCase) >= 0\n\n\n\n/**\n * Returns `true` if this char sequence contains the specified character [char].\n *\n * @param ignoreCase `true` to ignore character case when comparing characters. By default `false`.\n */\n@Suppress(\"INAPPLICABLE_OPERATOR_MODIFIER\")\npublic operator fun CharSequence.contains(char: Char, ignoreCase: Boolean = false): Boolean =\n indexOf(char, ignoreCase = ignoreCase) >= 0\n\n/**\n * Returns `true` if this char sequence contains at least one match of the specified regular expression [regex].\n */\n@kotlin.internal.InlineOnly\npublic inline operator fun CharSequence.contains(regex: Regex): Boolean = regex.containsMatchIn(this)\n\n\n// rangesDelimitedBy\n\n\nprivate class DelimitedRangesSequence(\n private val input: CharSequence,\n private val startIndex: Int,\n private val limit: Int,\n private val getNextMatch: CharSequence.(currentIndex: Int) -> Pair<Int, Int>?\n) : Sequence<IntRange> {\n\n override fun iterator(): Iterator<IntRange> = object : Iterator<IntRange> {\n var nextState: Int = -1 // -1 for unknown, 0 for done, 1 for continue\n var currentStartIndex: Int = startIndex.coerceIn(0, input.length)\n var nextSearchIndex: Int = currentStartIndex\n var nextItem: IntRange? = null\n var counter: Int = 0\n\n private fun calcNext() {\n if (nextSearchIndex < 0) {\n nextState = 0\n nextItem = null\n } else {\n if (limit > 0 && ++counter >= limit || nextSearchIndex > input.length) {\n nextItem = currentStartIndex..input.lastIndex\n nextSearchIndex = -1\n } else {\n val match = input.getNextMatch(nextSearchIndex)\n if (match == null) {\n nextItem = currentStartIndex..input.lastIndex\n nextSearchIndex = -1\n } else {\n val (index, length) = match\n nextItem = currentStartIndex until index\n currentStartIndex = index + length\n nextSearchIndex = currentStartIndex + if (length == 0) 1 else 0\n }\n }\n nextState = 1\n }\n }\n\n override fun next(): IntRange {\n if (nextState == -1)\n calcNext()\n if (nextState == 0)\n throw NoSuchElementException()\n val result = nextItem as IntRange\n // Clean next to avoid keeping reference on yielded instance\n nextItem = null\n nextState = -1\n return result\n }\n\n override fun hasNext(): Boolean {\n if (nextState == -1)\n calcNext()\n return nextState == 1\n }\n }\n}\n\n/**\n * Returns a sequence of index ranges of substrings in this char sequence around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param startIndex The index to start searching delimiters from.\n * No range having its start value less than [startIndex] is returned.\n * [startIndex] is coerced to be non-negative and not greater than length of this string.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n */\nprivate fun CharSequence.rangesDelimitedBy(delimiters: CharArray, startIndex: Int = 0, ignoreCase: Boolean = false, limit: Int = 0): Sequence<IntRange> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" })\n\n return DelimitedRangesSequence(this, startIndex, limit, { currentIndex ->\n indexOfAny(delimiters, currentIndex, ignoreCase = ignoreCase).let { if (it < 0) null else it to 1 }\n })\n}\n\n\n/**\n * Returns a sequence of index ranges of substrings in this char sequence around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param startIndex The index to start searching delimiters from.\n * No range having its start value less than [startIndex] is returned.\n * [startIndex] is coerced to be non-negative and not greater than length of this string.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [delimiters]\n * that matches this string at that position.\n */\nprivate fun CharSequence.rangesDelimitedBy(delimiters: Array<out String>, startIndex: Int = 0, ignoreCase: Boolean = false, limit: Int = 0): Sequence<IntRange> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" } )\n val delimitersList = delimiters.asList()\n\n return DelimitedRangesSequence(this, startIndex, limit, { currentIndex -> findAnyOf(delimitersList, currentIndex, ignoreCase = ignoreCase, last = false)?.let { it.first to it.second.length } })\n\n}\n\n\n// split\n\n/**\n * Splits this char sequence to a sequence of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and finds at each position the first element in [delimiters]\n * that matches this string at that position.\n */\npublic fun CharSequence.splitToSequence(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): Sequence<String> =\n rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).map { substring(it) }\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more strings to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return. Zero by default means no limit is set.\n *\n * To avoid ambiguous results when strings in [delimiters] have characters in common, this method proceeds from\n * the beginning to the end of this string, and matches at each position the first element in [delimiters]\n * that is equal to a delimiter in this instance at that position.\n */\npublic fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String> {\n if (delimiters.size == 1) {\n val delimiter = delimiters[0]\n if (!delimiter.isEmpty()) {\n return split(delimiter, ignoreCase, limit)\n }\n }\n\n return rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).asIterable().map { substring(it) }\n}\n\n/**\n * Splits this char sequence to a sequence of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\npublic fun CharSequence.splitToSequence(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): Sequence<String> =\n rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).map { substring(it) }\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiters].\n *\n * @param delimiters One or more characters to be used as delimiters.\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\npublic fun CharSequence.split(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): List<String> {\n if (delimiters.size == 1) {\n return split(delimiters[0].toString(), ignoreCase, limit)\n }\n\n return rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).asIterable().map { substring(it) }\n}\n\n/**\n * Splits this char sequence to a list of strings around occurrences of the specified [delimiter].\n * This is specialized version of split which receives single non-empty delimiter and offers better performance\n *\n * @param delimiter String used as delimiter\n * @param ignoreCase `true` to ignore character case when matching a delimiter. By default `false`.\n * @param limit The maximum number of substrings to return.\n */\nprivate fun CharSequence.split(delimiter: String, ignoreCase: Boolean, limit: Int): List<String> {\n require(limit >= 0, { \"Limit must be non-negative, but was $limit.\" })\n\n var currentOffset = 0\n var nextIndex = indexOf(delimiter, currentOffset, ignoreCase)\n if (nextIndex == -1 || limit == 1) {\n return listOf(this.toString())\n }\n\n val isLimited = limit > 0\n val result = ArrayList<String>(if (isLimited) limit.coerceAtMost(10) else 10)\n do {\n result.add(substring(currentOffset, nextIndex))\n currentOffset = nextIndex + delimiter.length\n // Do not search for next occurrence if we're reaching limit\n if (isLimited && result.size == limit - 1) break\n nextIndex = indexOf(delimiter, currentOffset, ignoreCase)\n } while (nextIndex != -1)\n\n result.add(substring(currentOffset, length))\n return result\n}\n\n/**\n * Splits this char sequence around matches of the given regular expression.\n *\n * @param limit Non-negative value specifying the maximum number of substrings to return.\n * Zero by default means no limit is set.\n */\n@kotlin.internal.InlineOnly\npublic inline fun CharSequence.split(regex: Regex, limit: Int = 0): List<String> = regex.split(this, limit)\n\n/**\n * Splits this char sequence to a sequence of lines delimited by any of the following character sequences: CRLF, LF or CR.\n *\n * The lines returned do not include terminating line separators.\n */\npublic fun CharSequence.lineSequence(): Sequence<String> = splitToSequence(\"\\r\\n\", \"\\n\", \"\\r\")\n\n/**\n * Splits this char sequence to a list of lines delimited by any of the following character sequences: CRLF, LF or CR.\n *\n * The lines returned do not include terminating line separators.\n */\npublic fun CharSequence.lines(): List<String> = lineSequence().toList()\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage list\n\nimport kotlinx.css.Display\nimport kotlinx.css.JustifyContent\nimport kotlinx.css.display\nimport kotlinx.css.justifyContent\nimport kotlinx.css.marginBottom\nimport kotlinx.css.px\nimport kotlinx.css.width\nimport react.RBuilder\nimport react.RProps\nimport react.ReactElement\nimport react.child\nimport react.functionalComponent\nimport styled.css\nimport styled.styledDiv\nimport styled.styledSpan\n\n@Suppress(\"FunctionName\")\nfun RBuilder.CircularProgressBar(handler: CircularProgressBarProps.() -> Unit): ReactElement {\n return child(circularProgressBar){\n attrs {\n handler()\n }\n }\n}\n\nexternal interface CircularProgressBarProps : RProps {\n var progress:Int\n}\n\nprivate val circularProgressBar = functionalComponent<CircularProgressBarProps>(\"Circular-Progress-Bar\") { props->\n styledDiv {\n styledSpan { +\"${props.progress}%\" }\n styledDiv{\n css {\n classes = mutableListOf(\"left-half-clipper\")\n }\n styledDiv{ css { classes = mutableListOf(\"first50-bar\") } }\n styledDiv{ css { classes = mutableListOf(\"value-bar\") } }\n }\n css{\n display = Display.flex\n justifyContent = JustifyContent.center\n classes = mutableListOf(\"progress-circle\",\"p${props.progress}\").apply { if(props.progress>50) add(\"over50\") }\n width = 50.px\n marginBottom = 65.px\n }\n }\n}","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,\"setState\")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}\nfunction K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\\/+/g;function N(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction O(a,b,c,e,d){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=\"\"===e?\".\"+N(h,0):e,Array.isArray(d)?(c=\"\",null!=a&&(c=a.replace(M,\"$&/\")+\"/\"),O(d,b,c,\"\",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?\"\":(\"\"+d.key).replace(M,\"$&/\")+\"/\")+a)),b.push(d)),1;h=0;e=\"\"===e?\".\":e+\":\";if(Array.isArray(a))for(var g=\n0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if(\"object\"===k)throw b=\"\"+a,Error(z(31,\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,\"\",\"\",function(a){return b.call(c,a,d++)});return e}\nfunction Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};\nexports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,\nkey:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;\nexports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version=\"17.0.2\";\n","package com.arkivanov.mvikotlin.main.store\n\nimport com.arkivanov.mvikotlin.core.annotations.MainThread\nimport com.arkivanov.mvikotlin.core.store.Bootstrapper\nimport com.arkivanov.mvikotlin.core.store.Executor\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.core.utils.assertOnMainThread\nimport com.arkivanov.mvikotlin.rx.Disposable\nimport com.arkivanov.mvikotlin.rx.Observer\nimport com.arkivanov.mvikotlin.rx.internal.BehaviorSubject\nimport com.arkivanov.mvikotlin.rx.internal.PublishSubject\nimport com.arkivanov.mvikotlin.rx.observer\n\ninternal class DefaultStore<in Intent : Any, in Action : Any, in Result : Any, out State : Any, Label : Any> @MainThread constructor(\n initialState: State,\n private val bootstrapper: Bootstrapper<Action>?,\n executorFactory: () -> Executor<Intent, Action, State, Result, Label>,\n private val reducer: Reducer<State, Result>\n) : Store<Intent, State, Label> {\n\n init {\n assertOnMainThread()\n }\n\n private val intentSubject = PublishSubject<Intent>()\n private val stateSubject = BehaviorSubject(initialState)\n override val state: State get() = stateSubject.value\n override val isDisposed: Boolean get() = !stateSubject.isActive\n private val labelSubject = PublishSubject<Label>()\n private val executor = executorFactory()\n\n init {\n intentSubject.subscribe(observer(onNext = ::onIntent))\n\n executor.init(\n object : Executor.Callbacks<State, Result, Label> {\n override val state: State get() = stateSubject.value\n\n override fun onResult(result: Result) {\n assertOnMainThread()\n\n doIfNotDisposed {\n changeState { oldState ->\n reducer.run { oldState.reduce(result) }\n }\n }\n }\n\n override fun onLabel(label: Label) {\n assertOnMainThread()\n\n labelSubject.onNext(label)\n }\n }\n )\n\n bootstrapper?.init { action ->\n assertOnMainThread()\n\n doIfNotDisposed {\n executor.handleAction(action)\n }\n }\n\n bootstrapper?.invoke()\n }\n\n private inline fun changeState(func: (State) -> State) {\n stateSubject.onNext(func(stateSubject.value))\n }\n\n override fun states(observer: Observer<State>): Disposable {\n assertOnMainThread()\n\n return stateSubject.subscribe(observer)\n }\n\n override fun labels(observer: Observer<Label>): Disposable {\n assertOnMainThread()\n\n return labelSubject.subscribe(observer)\n }\n\n override fun accept(intent: Intent) {\n assertOnMainThread()\n\n intentSubject.onNext(intent)\n }\n\n private fun onIntent(intent: Intent) {\n doIfNotDisposed {\n executor.handleIntent(intent)\n }\n }\n\n override fun dispose() {\n assertOnMainThread()\n\n doIfNotDisposed {\n bootstrapper?.dispose()\n executor.dispose()\n intentSubject.onComplete()\n stateSubject.onComplete()\n labelSubject.onComplete()\n }\n }\n\n private inline fun doIfNotDisposed(block: () -> Unit) {\n if (!isDisposed) {\n block()\n }\n }\n}\n","package com.arkivanov.mvikotlin.main.store\n\nimport com.arkivanov.mvikotlin.core.store.Bootstrapper\nimport com.arkivanov.mvikotlin.core.store.Executor\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\n\n/**\n * An implementation of the [StoreFactory] that creates default implementations of the [Store]\n */\nobject DefaultStoreFactory : StoreFactory {\n\n override fun <Intent : Any, Action : Any, Result : Any, State : Any, Label : Any> create(\n name: String?,\n initialState: State,\n bootstrapper: Bootstrapper<Action>?,\n executorFactory: () -> Executor<Intent, Action, State, Result, Label>,\n reducer: Reducer<State, Result>\n ): Store<Intent, State, Label> =\n DefaultStore(\n initialState = initialState,\n bootstrapper = bootstrapper,\n executorFactory = executorFactory,\n reducer = reducer\n )\n}\n","package com.arkivanov.mvikotlin.logging.logger\n\nimport com.arkivanov.mvikotlin.core.store.StoreEventType\n\n/**\n * A default implementation of the [LogFormatter]\n *\n * @param valueLengthLimit a length limit for [Store][com.arkivanov.mvikotlin.core.store.Store] event values,\n * 0 to disable value logging\n */\nclass DefaultLogFormatter(\n private val valueLengthLimit: Int = DEFAULT_VALUE_LENGTH_LIMIT\n) : LogFormatter {\n\n override fun format(storeName: String, eventType: StoreEventType, value: Any?): String? {\n val valueClassName: String? = value?.let { it::class.simpleName }\n val valueText: String? = if (valueLengthLimit > 0) value?.toString()?.take(valueLengthLimit) else null\n\n return StringBuilder()\n .appendDefaultLogText(\n storeName = storeName,\n eventType = eventType,\n valueClassName = valueClassName,\n valueText = valueText\n )\n .toString()\n }\n\n private fun StringBuilder.appendDefaultLogText(\n storeName: String,\n eventType: StoreEventType,\n valueClassName: String?,\n valueText: String?\n ): StringBuilder {\n append(storeName)\n append(\" (\")\n append(eventType)\n\n if (valueClassName != null) {\n append(\", \")\n append(valueClassName)\n }\n\n append(')')\n\n if (valueText != null) {\n append(\": \")\n append(valueText)\n }\n\n return this\n }\n\n companion object {\n const val DEFAULT_VALUE_LENGTH_LIMIT = 256\n }\n}\n","package com.arkivanov.mvikotlin.logging.logger\n\nimport com.arkivanov.mvikotlin.utils.internal.logV\n\n/**\n * A default implementation of the [Logger]\n */\nobject DefaultLogger : Logger {\n\n override fun log(text: String) {\n logV(text)\n }\n}\n","package com.arkivanov.mvikotlin.logging.logger\n\ninternal class LoggerWrapper(\n private val logger: Logger,\n private val logFormatter: LogFormatter\n) : Logger by logger, LogFormatter by logFormatter\n","package com.arkivanov.mvikotlin.logging.logger\n\nimport com.arkivanov.mvikotlin.core.store.StoreEventType\n\ninternal fun LoggerWrapper.log(storeName: String, eventType: StoreEventType, value: Any?) {\n format(storeName, eventType, value)\n ?.also(::log)\n}\n","package com.arkivanov.mvikotlin.logging.store\n\nimport com.arkivanov.mvikotlin.core.store.Executor\nimport com.arkivanov.mvikotlin.core.store.StoreEventType\nimport com.arkivanov.mvikotlin.logging.logger.LoggerWrapper\nimport com.arkivanov.mvikotlin.logging.logger.log\n\ninternal class LoggingExecutor<in Intent : Any, in Action : Any, State : Any, Result : Any, Label : Any>(\n private val delegate: Executor<Intent, Action, State, Result, Label>,\n private val logger: LoggerWrapper,\n private val storeName: String\n) : Executor<Intent, Action, State, Result, Label> by delegate {\n\n override fun init(callbacks: Executor.Callbacks<State, Result, Label>) {\n delegate.init(\n object : Executor.Callbacks<State, Result, Label> {\n override val state: State get() = callbacks.state\n\n override fun onResult(result: Result) {\n logger.log(storeName = storeName, eventType = StoreEventType.RESULT, value = result)\n callbacks.onResult(result)\n }\n\n override fun onLabel(label: Label) {\n logger.log(storeName = storeName, eventType = StoreEventType.LABEL, value = label)\n callbacks.onLabel(label)\n }\n }\n )\n }\n\n override fun handleAction(action: Action) {\n logger.log(storeName = storeName, eventType = StoreEventType.ACTION, value = action)\n delegate.handleAction(action)\n }\n\n override fun handleIntent(intent: Intent) {\n logger.log(storeName = storeName, eventType = StoreEventType.INTENT, value = intent)\n delegate.handleIntent(intent)\n }\n}\n","package com.arkivanov.mvikotlin.logging.store\n\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.StoreEventType\nimport com.arkivanov.mvikotlin.logging.logger.LoggerWrapper\nimport com.arkivanov.mvikotlin.logging.logger.log\n\ninternal class LoggingReducer<State : Any, in Result : Any>(\n private val delegate: Reducer<State, Result>,\n private val logger: LoggerWrapper,\n private val storeName: String\n) : Reducer<State, Result> {\n\n override fun State.reduce(result: Result): State {\n val newState = with(delegate) { reduce(result) }\n logger.log(storeName = storeName, eventType = StoreEventType.STATE, value = newState)\n\n return newState\n }\n}\n","package com.arkivanov.mvikotlin.logging.store\n\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.logging.logger.LoggerWrapper\n\ninternal class LoggingStore<in Intent : Any, out State : Any, out Label : Any>(\n private val delegate: Store<Intent, State, Label>,\n private val logger: LoggerWrapper,\n private val name: String\n) : Store<Intent, State, Label> by delegate {\n\n override fun dispose() {\n delegate.dispose()\n logger.log(\"$name: disposed\")\n }\n}\n","package com.arkivanov.mvikotlin.logging.store\n\nimport com.arkivanov.mvikotlin.core.store.Bootstrapper\nimport com.arkivanov.mvikotlin.core.store.Executor\nimport com.arkivanov.mvikotlin.core.store.Reducer\nimport com.arkivanov.mvikotlin.core.store.Store\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.arkivanov.mvikotlin.logging.logger.DefaultLogFormatter\nimport com.arkivanov.mvikotlin.logging.logger.DefaultLogger\nimport com.arkivanov.mvikotlin.logging.logger.LogFormatter\nimport com.arkivanov.mvikotlin.logging.logger.Logger\nimport com.arkivanov.mvikotlin.logging.logger.LoggerWrapper\n\n/**\n * An implementation of the [StoreFactory] that wraps another [StoreFactory] and provides logging\n *\n * @param delegate a [StoreFactory] that will be wrapped by this factory\n * @param logger a [Logger], by default the [DefaultLogger] is used\n * @param logFormatter a [LogFormatter], by default the [DefaultLogFormatter] with default arguments is used\n */\nclass LoggingStoreFactory(\n private val delegate: StoreFactory,\n logger: Logger = DefaultLogger,\n logFormatter: LogFormatter = DefaultLogFormatter()\n) : StoreFactory {\n\n constructor(delegate: StoreFactory) : this(delegate, DefaultLogger, DefaultLogFormatter())\n\n private val loggerWrapper = LoggerWrapper(logger, logFormatter)\n\n override fun <Intent : Any, Action : Any, Result : Any, State : Any, Label : Any> create(\n name: String?,\n initialState: State,\n bootstrapper: Bootstrapper<Action>?,\n executorFactory: () -> Executor<Intent, Action, State, Result, Label>,\n reducer: Reducer<State, Result>\n ): Store<Intent, State, Label> {\n if (name == null) {\n return delegate.create(\n initialState = initialState,\n bootstrapper = bootstrapper,\n executorFactory = executorFactory,\n reducer = reducer\n )\n }\n\n loggerWrapper.log(\"$name: created\")\n\n val delegateStore =\n delegate.create(\n name = name,\n initialState = initialState,\n bootstrapper = bootstrapper,\n executorFactory = { executorFactory().wrap(name) },\n reducer = reducer.wrap(name)\n )\n\n return LoggingStore(\n delegate = delegateStore,\n logger = loggerWrapper,\n name = name\n )\n }\n\n private fun <Intent : Any, Action : Any, State : Any, Result : Any, Label : Any> Executor<Intent, Action, State, Result, Label>.wrap(\n storeName: String\n ): Executor<Intent, Action, State, Result, Label> =\n LoggingExecutor(\n delegate = this,\n logger = loggerWrapper,\n storeName = storeName\n )\n\n private fun <State : Any, Result : Any> Reducer<State, Result>.wrap(storeName: String): Reducer<State, Result> =\n LoggingReducer(\n delegate = this,\n logger = loggerWrapper,\n storeName = storeName\n )\n}\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio\n\nimport io.ktor.http.cio.internals.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.bits.*\nimport io.ktor.utils.io.core.*\nimport io.ktor.utils.io.pool.*\nimport kotlinx.coroutines.*\nimport kotlin.coroutines.*\nimport kotlin.native.concurrent.*\n\nprivate const val MAX_CHUNK_SIZE_LENGTH = 128\nprivate const val CHUNK_BUFFER_POOL_SIZE = 2048\n\nprivate const val DEFAULT_BYTE_BUFFER_SIZE = 4088\n\n@ThreadLocal\nprivate val ChunkSizeBufferPool: ObjectPool<StringBuilder> =\n object : DefaultPool<StringBuilder>(CHUNK_BUFFER_POOL_SIZE) {\n override fun produceInstance(): StringBuilder = StringBuilder(MAX_CHUNK_SIZE_LENGTH)\n override fun clearInstance(instance: StringBuilder) = instance.apply { clear() }\n }\n\n/**\n * Decoder job type\n */\npublic typealias DecoderJob = WriterJob\n\n/**\n * Start a chunked stream decoder coroutine\n */\n@Deprecated(\n \"Specify content length if known or pass -1L\",\n ReplaceWith(\"decodeChunked(input, -1L)\")\n)\npublic fun CoroutineScope.decodeChunked(input: ByteReadChannel): DecoderJob =\n decodeChunked(input, -1L)\n\n/**\n * Start a chunked stream decoder coroutine\n */\npublic fun CoroutineScope.decodeChunked(input: ByteReadChannel, contentLength: Long): DecoderJob =\n writer(coroutineContext) {\n decodeChunked(input, channel, contentLength)\n }\n\n/**\n * Decode chunked transfer encoding from the [input] channel and write the result in [out].\n *\n * @throws EOFException if stream has ended unexpectedly.\n * @throws ParserException if the format is invalid.\n */\npublic suspend fun decodeChunked(input: ByteReadChannel, out: ByteWriteChannel) {\n return decodeChunked(input, out, -1L)\n}\n\n/**\n * Chunked stream decoding loop\n */\n@Deprecated(\n \"The contentLength is ignored for chunked transfer encoding\",\n ReplaceWith(\"decodeChunked(input, out)\")\n)\npublic suspend fun decodeChunked(input: ByteReadChannel, out: ByteWriteChannel, contentLength: Long) {\n val chunkSizeBuffer = ChunkSizeBufferPool.borrow()\n var totalBytesCopied = 0L\n\n try {\n while (true) {\n chunkSizeBuffer.clear()\n if (!input.readUTF8LineTo(chunkSizeBuffer, MAX_CHUNK_SIZE_LENGTH)) {\n throw EOFException(\"Chunked stream has ended unexpectedly: no chunk size\")\n } else if (chunkSizeBuffer.isEmpty()) {\n throw EOFException(\"Invalid chunk size: empty\")\n }\n\n val chunkSize =\n if (chunkSizeBuffer.length == 1 && chunkSizeBuffer[0] == '0') 0\n else chunkSizeBuffer.parseHexLong()\n\n if (chunkSize > 0) {\n input.copyTo(out, chunkSize)\n out.flush()\n totalBytesCopied += chunkSize\n }\n\n chunkSizeBuffer.clear()\n if (!input.readUTF8LineTo(chunkSizeBuffer, 2)) {\n throw EOFException(\"Invalid chunk: content block of size $chunkSize ended unexpectedly\")\n }\n if (chunkSizeBuffer.isNotEmpty()) {\n throw EOFException(\"Invalid chunk: content block should end with CR+LF\")\n }\n\n if (chunkSize == 0L) break\n }\n } catch (t: Throwable) {\n out.close(t)\n throw t\n } finally {\n ChunkSizeBufferPool.recycle(chunkSizeBuffer)\n out.close()\n }\n}\n\n/**\n * Encoder job type\n */\npublic typealias EncoderJob = ReaderJob\n\n/**\n * Start chunked stream encoding coroutine\n */\npublic suspend fun encodeChunked(\n output: ByteWriteChannel,\n coroutineContext: CoroutineContext\n): EncoderJob = GlobalScope.reader(coroutineContext, autoFlush = false) {\n encodeChunked(output, channel)\n}\n\n/**\n * Chunked stream encoding loop\n */\npublic suspend fun encodeChunked(output: ByteWriteChannel, input: ByteReadChannel) {\n try {\n while (!input.isClosedForRead) {\n input.read { source, startIndex, endIndex ->\n if (endIndex == startIndex) return@read 0\n output.writeChunk(source, startIndex.toInt(), endIndex.toInt())\n }\n }\n\n input.rethrowCloseCause()\n output.writeFully(LastChunkBytes)\n } catch (cause: Throwable) {\n output.close(cause)\n input.cancel(cause)\n } finally {\n output.flush()\n }\n}\n\nprivate fun ByteReadChannel.rethrowCloseCause() {\n val cause = when (this) {\n is ByteChannel -> closedCause\n else -> null\n }\n if (cause != null) throw cause\n}\n\n@SharedImmutable\nprivate const val CrLfShort: Short = 0x0d0a\n\n@ThreadLocal\nprivate val CrLf = \"\\r\\n\".toByteArray()\n\n@ThreadLocal\nprivate val LastChunkBytes = \"0\\r\\n\\r\\n\".toByteArray()\n\nprivate suspend fun ByteWriteChannel.writeChunk(memory: Memory, startIndex: Int, endIndex: Int): Int {\n val size = endIndex - startIndex\n writeIntHex(size)\n writeShort(CrLfShort)\n\n writeFully(memory, startIndex, endIndex)\n writeFully(CrLf)\n flush()\n\n return size\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.internals\n\nimport io.ktor.http.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.core.*\nimport kotlin.native.concurrent.*\n\ninternal const val HTAB: Char = '\\u0009'\n\ninternal fun CharSequence.hashCodeLowerCase(start: Int = 0, end: Int = length): Int {\n var hashCode = 0\n for (pos in start until end) {\n val v = get(pos).toInt().toLowerCase()\n hashCode = 31 * hashCode + v\n }\n\n return hashCode\n}\n\ninternal fun CharSequence.equalsLowerCase(start: Int = 0, end: Int = length, other: CharSequence): Boolean {\n if (end - start != other.length) return false\n\n for (pos in start until end) {\n if (get(pos).toInt().toLowerCase() != other[pos - start].toInt().toLowerCase()) return false\n }\n\n return true\n}\n\n@Suppress(\"NOTHING_TO_INLINE\")\nprivate inline fun Int.toLowerCase() =\n if (this in 'A'.toInt()..'Z'.toInt()) 'a'.toInt() + (this - 'A'.toInt()) else this\n\n@SharedImmutable\ninternal val DefaultHttpMethods =\n AsciiCharTree.build(HttpMethod.DefaultMethods, { it.value.length }, { m, idx -> m.value[idx] })\n\n@SharedImmutable\nprivate val HexTable = (0..0xff).map { v ->\n when {\n v in 0x30..0x39 -> v - 0x30L\n v >= 'a'.toLong() && v <= 'f'.toLong() -> v - 'a'.toLong() + 10\n v >= 'A'.toLong() && v <= 'F'.toLong() -> v - 'A'.toLong() + 10\n else -> -1L\n }\n}.toLongArray()\n\n@SharedImmutable\ninternal val HexLetterTable: ByteArray = (0..0xf).map {\n if (it < 0xa) (0x30 + it).toByte() else ('a' + it - 0x0a).toInt().toByte()\n}.toByteArray()\n\ninternal fun CharSequence.parseHexLong(): Long {\n var result = 0L\n val table = HexTable\n for (i in 0 until length) {\n val v = this[i].toInt() and 0xffff\n val digit = if (v < 0xff) table[v] else -1L\n if (digit == -1L) hexNumberFormatException(this, i)\n result = (result shl 4) or digit\n }\n\n return result\n}\n\ninternal fun CharSequence.parseDecLong(): Long {\n val length = length\n if (length > 19) numberFormatException(this)\n if (length == 19) return parseDecLongWithCheck()\n\n var result = 0L\n for (i in 0 until length) {\n val digit = this[i].toLong() - 0x30L\n if (digit < 0 || digit > 9) numberFormatException(this, i)\n\n result = (result shl 3) + (result shl 1) + digit\n }\n\n return result\n}\n\nprivate fun CharSequence.parseDecLongWithCheck(): Long {\n var result = 0L\n for (i in 0 until length) {\n val digit = this[i].toLong() - 0x30L\n if (digit < 0 || digit > 9) numberFormatException(this, i)\n\n result = (result shl 3) + (result shl 1) + digit\n if (result < 0) numberFormatException(this)\n }\n\n return result\n}\n\ninternal fun Buffer.writeIntHex(value: Int) {\n require(value > 0) { \"Does only work for positive numbers\" } // zero is not included!\n var current = value\n val table = HexLetterTable\n var digits = 0\n\n while (digits++ < 8) {\n val v = current ushr 28\n current = current shl 4\n\n if (v != 0) {\n writeByte(table[v])\n break\n }\n }\n\n while (digits++ < 8) {\n val v = current ushr 28\n current = current shl 4\n writeByte(table[v])\n }\n}\n\ninternal suspend fun ByteWriteChannel.writeIntHex(value: Int) {\n require(value > 0) { \"Does only work for positive numbers\" } // zero is not included!\n var current = value\n val table = HexLetterTable\n var digits = 0\n\n while (digits++ < 8) {\n val v = current ushr 28\n current = current shl 4\n\n if (v != 0) {\n writeByte(table[v])\n break\n }\n }\n\n while (digits++ < 8) {\n val v = current ushr 28\n current = current shl 4\n writeByte(table[v])\n }\n}\n\nprivate fun hexNumberFormatException(s: CharSequence, idx: Int): Nothing {\n throw NumberFormatException(\"Invalid HEX number: $s, wrong digit: ${s[idx]}\")\n}\n\nprivate fun numberFormatException(cs: CharSequence, idx: Int) {\n throw NumberFormatException(\"Invalid number: $cs, wrong digit: ${cs[idx]} at position $idx\")\n}\n\nprivate fun numberFormatException(cs: CharSequence) {\n throw NumberFormatException(\"Invalid number $cs: too large for Long type\")\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio\n\nimport io.ktor.http.cio.internals.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.pool.*\nimport kotlin.native.concurrent.*\n\nprivate const val EXPECTED_HEADERS_QTY = 64\n\n/*\n * index array structure\n * [0] = name hash\n * [1] = value hash\n * [2] name start index\n * [3] name end (excl) index\n * [4] value start index\n * [5] value end (excl) index\n * [6] next entry index (multiplied) with the same name hash\n * [7] reserved\n */\nprivate const val HEADER_SIZE = 8\nprivate const val HEADER_ARRAY_POOL_SIZE = 1000\n\n@ThreadLocal\nprivate val EMPTY_INT_ARRAY = IntArray(0)\n\n/**\n * A headers map data structure used in CIO\n */\n@Suppress(\"KDocMissingDocumentation\")\n@InternalAPI\npublic class HttpHeadersMap internal constructor(private val builder: CharArrayBuilder) {\n public var size: Int = 0\n private set\n\n private var indexes = IntArrayPool.borrow()\n\n public fun put(\n nameHash: Int,\n valueHash: Int,\n nameStartIndex: Int,\n nameEndIndex: Int,\n valueStartIndex: Int,\n valueEndIndex: Int\n ) {\n val base = size * HEADER_SIZE\n val array = indexes\n\n if (base >= indexes.size) TODO(\"Implement headers overflow\")\n\n array[base + 0] = nameHash\n array[base + 1] = valueHash\n array[base + 2] = nameStartIndex\n array[base + 3] = nameEndIndex\n array[base + 4] = valueStartIndex\n array[base + 5] = valueEndIndex\n array[base + 6] = -1 // TODO\n array[base + 7] = -1\n\n size++\n }\n\n public fun find(name: String, fromIndex: Int = 0): Int {\n val nameHash = name.hashCodeLowerCase()\n for (i in fromIndex until size) {\n val offset = i * HEADER_SIZE\n if (indexes[offset] == nameHash) {\n return i\n }\n }\n\n return -1\n }\n\n public operator fun get(name: String): CharSequence? {\n val nameHash = name.hashCodeLowerCase()\n for (i in 0 until size) {\n val offset = i * HEADER_SIZE\n if (indexes[offset] == nameHash) {\n return builder.subSequence(indexes[offset + 4], indexes[offset + 5])\n }\n }\n\n return null\n }\n\n public fun getAll(name: String): Sequence<CharSequence> {\n val nameHash = name.hashCodeLowerCase()\n return generateSequence(0) { if (it + 1 >= size) null else it + 1 }\n .map { it * HEADER_SIZE }\n .filter { indexes[it] == nameHash }\n .map { builder.subSequence(indexes[it + 4], indexes[it + 5]) }\n }\n\n public fun nameAt(idx: Int): CharSequence {\n require(idx >= 0)\n require(idx < size)\n\n val offset = idx * HEADER_SIZE\n val array = indexes\n\n val nameStart = array[offset + 2]\n val nameEnd = array[offset + 3]\n\n return builder.subSequence(nameStart, nameEnd)\n }\n\n public fun valueAt(idx: Int): CharSequence {\n require(idx >= 0)\n require(idx < size)\n\n val offset = idx * HEADER_SIZE\n val array = indexes\n\n val nameStart = array[offset + 4]\n val nameEnd = array[offset + 5]\n\n return builder.subSequence(nameStart, nameEnd)\n }\n\n public fun release() {\n size = 0\n val indexes = indexes\n this.indexes = EMPTY_INT_ARRAY\n\n if (indexes !== EMPTY_INT_ARRAY) IntArrayPool.recycle(indexes)\n }\n\n override fun toString(): String {\n return buildString { dumpTo(\"\", this) }\n }\n}\n\n/**\n * Dump header values to [out], useful for debugging\n */\n@InternalAPI\npublic fun HttpHeadersMap.dumpTo(indent: String, out: Appendable) {\n for (i in 0 until size) {\n out.append(indent)\n out.append(nameAt(i))\n out.append(\" => \")\n out.append(valueAt(i))\n out.append(\"\\n\")\n }\n}\n\n@ThreadLocal\nprivate val IntArrayPool: DefaultPool<IntArray> = object : DefaultPool<IntArray>(HEADER_ARRAY_POOL_SIZE) {\n override fun produceInstance(): IntArray = IntArray(EXPECTED_HEADERS_QTY * HEADER_SIZE)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio\n\nimport io.ktor.http.*\nimport io.ktor.http.cio.internals.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Represents a base HTTP message type for request and response\n * @property headers request/response headers\n */\npublic abstract class HttpMessage internal constructor(\n public val headers: HttpHeadersMap,\n private val builder: CharArrayBuilder\n) : Closeable {\n\n /**\n * Release all memory resources hold by this message\n */\n public fun release() {\n builder.release()\n headers.release()\n }\n\n /**\n * Release all memory resources hold by this message\n */\n override fun close() {\n release()\n }\n}\n\n/**\n * Represents an HTTP request\n * @property method\n * @property uri\n * @property version\n */\npublic class Request internal constructor(\n public val method: HttpMethod,\n public val uri: CharSequence,\n public val version: CharSequence,\n headers: HttpHeadersMap,\n builder: CharArrayBuilder\n) : HttpMessage(headers, builder)\n\n/**\n * Represents an HTTP response\n * @property version\n * @property status\n * @property statusText\n */\npublic class Response internal constructor(\n public val version: CharSequence,\n public val status: Int,\n public val statusText: CharSequence,\n headers: HttpHeadersMap,\n builder: CharArrayBuilder\n) : HttpMessage(headers, builder)\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.internals\n\ninternal class AsciiCharTree<T : Any>(val root: Node<T>) {\n public class Node<T>(val ch: Char, val exact: List<T>, val children: List<Node<T>>) {\n val array = Array(0x100) { chi -> children.singleOrNull { it.ch.toInt() == chi } }\n }\n\n public fun search(\n sequence: CharSequence,\n fromIdx: Int = 0,\n end: Int = sequence.length,\n lowerCase: Boolean = false,\n stopPredicate: (Char, Int) -> Boolean\n ): List<T> {\n if (sequence.isEmpty()) throw IllegalArgumentException(\"Couldn't search in char tree for empty string\")\n var node = root\n\n for (index in fromIdx until end) {\n val current = sequence[index]\n val currentCode = current.toInt()\n\n if (stopPredicate(current, currentCode)) break\n\n val nextNode = node.array[currentCode]\n ?: (if (lowerCase) node.array[current.toLowerCase().toInt()] else null)\n ?: return emptyList()\n\n node = nextNode\n }\n\n return node.exact\n }\n\n public companion object {\n public fun <T : CharSequence> build(from: List<T>): AsciiCharTree<T> {\n return build(from, { it.length }, { s, idx -> s[idx] })\n }\n\n public fun <T : Any> build(from: List<T>, length: (T) -> Int, charAt: (T, Int) -> Char): AsciiCharTree<T> {\n val maxLen = from.maxBy(length)?.let(length)\n ?: throw NoSuchElementException(\"Unable to build char tree from an empty list\")\n\n if (from.any { length(it) == 0 }) throw IllegalArgumentException(\"There should be no empty entries\")\n\n val root = ArrayList<Node<T>>()\n build(root, from, maxLen, 0, length, charAt)\n root.trimToSize()\n return AsciiCharTree(Node('\\u0000', emptyList(), root))\n }\n\n private fun <T : Any> build(\n resultList: MutableList<Node<T>>,\n from: List<T>,\n maxLength: Int,\n idx: Int,\n length: (T) -> Int,\n charAt: (T, Int) -> Char\n ) {\n from.groupBy { charAt(it, idx) }.forEach { (ch, list) ->\n val nextIdx = idx + 1\n val children = ArrayList<Node<T>>()\n build(children, list.filter { length(it) > nextIdx }, maxLength, nextIdx, length, charAt)\n children.trimToSize()\n resultList.add(Node(ch, list.filter { length(it) == nextIdx }, children))\n }\n }\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio\n\nimport io.ktor.http.*\nimport io.ktor.util.*\n\n/**\n * An adapter from CIO low-level headers map to ktor [Headers] interface\n */\n@InternalAPI\npublic class CIOHeaders(private val headers: HttpHeadersMap) : Headers {\n\n private val names: Set<String> by lazy(LazyThreadSafetyMode.NONE) {\n LinkedHashSet<String>(headers.size).apply {\n for (i in 0 until headers.size) {\n add(headers.nameAt(i).toString())\n }\n }\n }\n\n override val caseInsensitiveName: Boolean get() = true\n\n override fun names(): Set<String> = names\n override fun get(name: String): String? = headers[name]?.toString()\n\n override fun getAll(name: String): List<String>? =\n headers.getAll(name).map { it.toString() }.toList().takeIf { it.isNotEmpty() }\n\n override fun isEmpty(): Boolean = headers.size == 0\n override fun entries(): Set<Map.Entry<String, List<String>>> {\n return (0 until headers.size).map { idx -> Entry(idx) }.toSet()\n }\n\n private inner class Entry(private val idx: Int) : Map.Entry<String, List<String>> {\n override val key: String get() = headers.nameAt(idx).toString()\n override val value: List<String> get() = listOf(headers.valueAt(idx).toString())\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\nimport io.ktor.util.*\nimport kotlin.jvm.*\n\n/**\n * Websocket close reason\n * @property code - close reason code as per RFC 6455, recommended to be one of [CloseReason.Codes]\n * @property message - a close reason message, could be empty\n */\npublic data class CloseReason(val code: Short, val message: String) {\n public constructor(code: Codes, message: String) : this(code.code, message)\n\n /**\n * A enum value for this [code] or `null` if the [code] is not listed in [Codes]\n */\n val knownReason: Codes?\n get() = Codes.byCode(code)\n\n override fun toString(): String {\n return \"CloseReason(reason=${knownReason ?: code}, message=$message)\"\n }\n\n /**\n * Standard close reason codes\n *\n * see https://tools.ietf.org/html/rfc6455#section-7.4 for list of codes\n */\n @Suppress(\"KDocMissingDocumentation\")\n public enum class Codes(public val code: Short) {\n NORMAL(1000),\n GOING_AWAY(1001),\n PROTOCOL_ERROR(1002),\n CANNOT_ACCEPT(1003),\n\n @InternalAPI\n @Deprecated(\"This code MUST NOT be set as a status code in a Close control frame by an endpoint\")\n CLOSED_ABNORMALLY(1006),\n NOT_CONSISTENT(1007),\n VIOLATED_POLICY(1008),\n TOO_BIG(1009),\n NO_EXTENSION(1010),\n INTERNAL_ERROR(1011),\n SERVICE_RESTART(1012),\n TRY_AGAIN_LATER(1013);\n\n public companion object {\n private val byCodeMap = values().associateBy { it.code }\n\n @Deprecated(\n \"Use INTERNAL_ERROR instead.\",\n ReplaceWith(\n \"INTERNAL_ERROR\",\n \"io.ktor.http.cio.websocket.CloseReason.Codes.INTERNAL_ERROR\"\n )\n )\n @JvmField\n @Suppress(\"UNUSED\")\n public val UNEXPECTED_CONDITION: Codes = INTERNAL_ERROR\n\n /**\n * Get enum value by close reason code\n * @return enum instance or null if [code] is not in standard\n */\n public fun byCode(code: Short): Codes? = byCodeMap[code]\n }\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.internals\n\ninternal fun nextToken(text: CharSequence, range: MutableRange): CharSequence {\n val spaceOrEnd = findSpaceOrEnd(text, range)\n val s = text.subSequence(range.start, spaceOrEnd)\n range.start = spaceOrEnd\n return s\n}\n\ninternal fun skipSpacesAndHorizontalTabs(\n text: CharArrayBuilder,\n start: Int,\n end: Int\n): Int {\n var index = start\n while (index < end) {\n val ch = text[index]\n if (!ch.isWhitespace() && ch != HTAB) break\n index++\n }\n return index\n}\n\ninternal fun skipSpaces(text: CharSequence, range: MutableRange) {\n var idx = range.start\n val end = range.end\n\n if (idx >= end || !text[idx].isWhitespace()) return\n idx++\n\n while (idx < end) {\n if (!text[idx].isWhitespace()) break\n idx++\n }\n\n range.start = idx\n}\n\ninternal fun findSpaceOrEnd(text: CharSequence, range: MutableRange): Int {\n var idx = range.start\n val end = range.end\n\n if (idx >= end || text[idx].isWhitespace()) return idx\n idx++\n\n while (idx < end) {\n if (text[idx].isWhitespace()) return idx\n idx++\n }\n\n return idx\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.internals\n\nimport io.ktor.utils.io.pool.*\nimport kotlin.native.concurrent.*\n\nprivate const val CHAR_ARRAY_POOL_SIZE = 4096\n\n/**\n * Number of characters that a array from the pool can store\n */\ninternal const val CHAR_BUFFER_ARRAY_LENGTH: Int = 4096 / 2\n\n@ThreadLocal\ninternal val CharArrayPool: ObjectPool<CharArray> = object : DefaultPool<CharArray>(CHAR_ARRAY_POOL_SIZE) {\n override fun produceInstance(): CharArray = CharArray(CHAR_BUFFER_ARRAY_LENGTH)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\n/**\n * A frame received or ready to be sent. It is not reusable and not thread-safe\n * @property fin is it final fragment, should be always `true` for control frames and if no fragmentation is used\n * @property frameType enum value\n * @property data - a frame content or fragment content\n * @property disposableHandle could be invoked when the frame is processed\n */\npublic expect sealed class Frame private constructor(\n fin: Boolean,\n frameType: FrameType,\n data: ByteArray,\n disposableHandle: DisposableHandle = NonDisposableHandle,\n rsv1: Boolean = false,\n rsv2: Boolean = false,\n rsv3: Boolean = false\n) {\n public val fin: Boolean\n\n /**\n * First extension bit.\n */\n public val rsv1: Boolean\n\n /**\n * Second extension bit.\n */\n public val rsv2: Boolean\n\n /**\n * Third extension bit.\n */\n public val rsv3: Boolean\n\n public val frameType: FrameType\n\n public val data: ByteArray\n\n public val disposableHandle: DisposableHandle\n\n /**\n * Represents an application level binary frame.\n * In a RAW web socket session a big text frame could be fragmented\n * (separated into several text frames so they have [fin] = false except the last one).\n * Note that usually there is no need to handle fragments unless you have a RAW web socket session.\n */\n public class Binary public constructor(\n fin: Boolean,\n data: ByteArray,\n rsv1: Boolean = false,\n rsv2: Boolean = false,\n rsv3: Boolean = false\n ) : Frame {\n public constructor(fin: Boolean, data: ByteArray)\n public constructor(fin: Boolean, packet: ByteReadPacket)\n }\n\n /**\n * Represents an application level text frame.\n * In a RAW web socket session a big text frame could be fragmented\n * (separated into several text frames so they have [fin] = false except the last one).\n * Please note that a boundary between fragments could be in the middle of multi-byte (unicode) character\n * so don't apply String constructor to every fragment but use decoder loop instead of concatenate fragments first.\n * Note that usually there is no need to handle fragments unless you have a RAW web socket session.\n */\n public class Text public constructor(\n fin: Boolean,\n data: ByteArray,\n rsv1: Boolean = false,\n rsv2: Boolean = false,\n rsv3: Boolean = false,\n ) : Frame {\n public constructor(fin: Boolean, data: ByteArray)\n public constructor(text: String)\n public constructor(fin: Boolean, packet: ByteReadPacket)\n }\n\n /**\n * Represents a low-level level close frame. It could be sent to indicate web socket session end.\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public class Close(data: ByteArray) : Frame {\n public constructor(reason: CloseReason)\n public constructor(packet: ByteReadPacket)\n public constructor()\n }\n\n /**\n * Represents a low-level ping frame. Could be sent to test connection (peer should reply with [Pong]).\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public class Ping(data: ByteArray) : Frame {\n public constructor(packet: ByteReadPacket)\n }\n\n /**\n * Represents a low-level pong frame. Should be sent in reply to a [Ping] frame.\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public class Pong(\n data: ByteArray,\n disposableHandle: DisposableHandle = NonDisposableHandle\n ) : Frame {\n public constructor(packet: ByteReadPacket)\n }\n\n /**\n * Creates a frame copy\n */\n public fun copy(): Frame\n\n public companion object {\n /**\n * Create a particular [Frame] instance by frame type\n */\n public fun byType(fin: Boolean, frameType: FrameType, data: ByteArray): Frame\n\n /**\n * Create a particular [Frame] instance by frame type\n */\n public fun byType(\n fin: Boolean,\n frameType: FrameType,\n data: ByteArray,\n rsv1: Boolean,\n rsv2: Boolean,\n rsv3: Boolean\n ): Frame\n }\n}\n\n/**\n * Read text content from text frame. Shouldn't be used for fragmented frames: such frames need to be reassembled first\n */\npublic fun Frame.Text.readText(): String {\n require(fin) { \"Text could be only extracted from non-fragmented frame\" }\n return Charsets.UTF_8.newDecoder().decode(buildPacket { writeFully(data) })\n}\n\n/**\n * Read binary content from a frame. For fragmented frames only returns this fragment.\n */\npublic fun Frame.readBytes(): ByteArray {\n return data.copyOf()\n}\n\n/**\n * Read close reason from close frame or null if no close reason provided\n */\n@Suppress(\"CONFLICTING_OVERLOADS\")\npublic fun Frame.Close.readReason(): CloseReason? {\n if (data.size < 2) {\n return null\n }\n\n val packet = buildPacket { writeFully(data) }\n\n val code = packet.readShort()\n val message = packet.readText()\n\n return CloseReason(code, message)\n}\n\ninternal object NonDisposableHandle : DisposableHandle {\n override fun dispose() {}\n override fun toString(): String = \"NonDisposableHandle\"\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\n/**\n * Frame types enum\n * @property controlFrame if this is control frame type\n * @property opcode - frame type id that is used to transport it\n */\npublic enum class FrameType(public val controlFrame: Boolean, public val opcode: Int) {\n /**\n * Regular application level text frame\n */\n TEXT(false, 1),\n\n /**\n * Regular application level binary frame\n */\n BINARY(false, 2),\n\n /**\n * Low level close frame type\n */\n CLOSE(true, 8),\n\n /**\n * Low level ping frame type\n */\n PING(true, 9),\n\n /**\n * Low level pong frame type\n */\n PONG(true, 0xa);\n\n public companion object {\n private val maxOpcode = values().maxBy { it.opcode }!!.opcode\n\n private val byOpcodeArray = Array(maxOpcode + 1) { op -> values().singleOrNull { it.opcode == op } }\n\n /**\n * Find [FrameType] instance by numeric [opcode]\n * @return a [FrameType] instance or `null` of the [opcode] value is not valid\n */\n public operator fun get(opcode: Int): FrameType? = if (opcode in 0..maxOpcode) byOpcodeArray[opcode] else null\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\nimport io.ktor.util.*\nimport kotlinx.coroutines.*\n\n/**\n * Default websocket session with ping-pong and timeout processing and built-in [closeReason] population\n */\npublic actual interface DefaultWebSocketSession : WebSocketSession {\n /**\n * A close reason for this session. It could be `null` if a session is terminated with no close reason\n * (for example due to connection failure).\n */\n public actual val closeReason: Deferred<CloseReason?>\n\n /**\n * Start WebSocket conversation.\n *\n * @param negotiatedExtensions specify negotiated extensions list to use in current session.\n */\n @InternalAPI\n @OptIn(ExperimentalWebSocketExtensionApi::class)\n public actual fun start(negotiatedExtensions: List<WebSocketExtension<*>>)\n}\n\n/**\n * Create [DefaultWebSocketSession] from session.\n */\npublic actual fun DefaultWebSocketSession(\n session: WebSocketSession,\n pingInterval: Long,\n timeoutMillis: Long\n): DefaultWebSocketSession = error(\"There is no CIO js websocket implementation. Consider using platform default.\")\n","// ktlint-disable filename\n/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\n\n/**\n * A frame received or ready to be sent. It is not reusable and not thread-safe\n * @property fin is it final fragment, should be always `true` for control frames and if no fragmentation is used\n * @property frameType enum value\n * @property data - a frame content or fragment content\n * @property disposableHandle could be invoked when the frame is processed\n */\npublic actual sealed class Frame actual constructor(\n public actual val fin: Boolean,\n public actual val frameType: FrameType,\n public actual val data: ByteArray,\n public actual val disposableHandle: DisposableHandle,\n public actual open val rsv1: Boolean,\n public actual open val rsv2: Boolean,\n public actual open val rsv3: Boolean\n) {\n /**\n * Represents an application level binary frame.\n * In a RAW web socket session a big text frame could be fragmented\n * (separated into several text frames so they have [fin] = false except the last one).\n * Note that usually there is no need to handle fragments unless you have a RAW web socket session.\n */\n public actual class Binary actual constructor(\n fin: Boolean,\n data: ByteArray,\n rsv1: Boolean,\n rsv2: Boolean,\n rsv3: Boolean\n ) : Frame(fin, FrameType.BINARY, data, NonDisposableHandle, rsv1, rsv2, rsv3) {\n public actual constructor(fin: Boolean, data: ByteArray) : this(fin, data, false, false, false)\n public actual constructor(fin: Boolean, packet: ByteReadPacket) : this(fin, packet.readBytes())\n }\n\n /**\n * Represents an application level text frame.\n * In a RAW web socket session a big text frame could be fragmented\n * (separated into several text frames so they have [fin] = false except the last one).\n * Please note that a boundary between fragments could be in the middle of multi-byte (unicode) character\n * so don't apply String constructor to every fragment but use decoder loop instead of concatenate fragments first.\n * Note that usually there is no need to handle fragments unless you have a RAW web socket session.\n */\n public actual class Text actual constructor(\n fin: Boolean,\n data: ByteArray,\n rsv1: Boolean,\n rsv2: Boolean,\n rsv3: Boolean\n ) : Frame(fin, FrameType.TEXT, data, NonDisposableHandle, rsv1, rsv2, rsv3) {\n public actual constructor(fin: Boolean, data: ByteArray) : this(fin, data, false, false, false)\n public actual constructor(text: String) : this(true, text.toByteArray())\n public actual constructor(fin: Boolean, packet: ByteReadPacket) : this(fin, packet.readBytes())\n }\n\n /**\n * Represents a low-level level close frame. It could be sent to indicate web socket session end.\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public actual class Close actual constructor(\n data: ByteArray\n ) : Frame(true, FrameType.CLOSE, data, NonDisposableHandle, false, false, false) {\n public actual constructor(reason: CloseReason) : this(\n buildPacket {\n writeShort(reason.code)\n writeText(reason.message)\n }\n )\n\n public actual constructor(packet: ByteReadPacket) : this(packet.readBytes())\n public actual constructor() : this(Empty)\n }\n\n /**\n * Represents a low-level ping frame. Could be sent to test connection (peer should reply with [Pong]).\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public actual class Ping actual constructor(\n data: ByteArray\n ) : Frame(true, FrameType.PING, data, NonDisposableHandle, false, false, false) {\n public actual constructor(packet: ByteReadPacket) : this(packet.readBytes())\n }\n\n /**\n * Represents a low-level pong frame. Should be sent in reply to a [Ping] frame.\n * Usually there is no need to send/handle it unless you have a RAW web socket session.\n */\n public actual class Pong actual constructor(\n data: ByteArray,\n disposableHandle: DisposableHandle\n ) : Frame(true, FrameType.PONG, data, disposableHandle, false, false, false) {\n public actual constructor(packet: ByteReadPacket) : this(packet.readBytes(), NonDisposableHandle)\n }\n\n override fun toString(): String = \"Frame $frameType (fin=$fin, buffer len = ${data.size})\"\n\n /**\n * Creates a frame copy.\n */\n public actual fun copy(): Frame = byType(fin, frameType, data.copyOf(), rsv1, rsv2, rsv3)\n\n public actual companion object {\n private val Empty: ByteArray = ByteArray(0)\n\n /**\n * Create a particular [Frame] instance by frame type.\n */\n public actual fun byType(\n fin: Boolean,\n frameType: FrameType,\n data: ByteArray\n ): Frame = when (frameType) {\n FrameType.BINARY -> Binary(fin, data)\n FrameType.TEXT -> Text(fin, data)\n FrameType.CLOSE -> Close(data)\n FrameType.PING -> Ping(data)\n FrameType.PONG -> Pong(data, NonDisposableHandle)\n }\n\n /**\n * Create a particular [Frame] instance by frame type.\n */\n public actual fun byType(\n fin: Boolean,\n frameType: FrameType,\n data: ByteArray,\n rsv1: Boolean,\n rsv2: Boolean,\n rsv3: Boolean\n ): Frame = when (frameType) {\n FrameType.BINARY -> Binary(fin, data, rsv1, rsv2, rsv3)\n FrameType.TEXT -> Text(fin, data, rsv1, rsv2, rsv3)\n FrameType.CLOSE -> Close(data)\n FrameType.PING -> Ping(data)\n FrameType.PONG -> Pong(data, NonDisposableHandle)\n }\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\n@file:kotlin.jvm.JvmMultifileClass\n@file:kotlin.jvm.JvmName(\"UtilsKt\")\n\npackage io.ktor.http.cio.websocket\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline infix fun Byte.xor(other: Byte) = toInt().xor(other.toInt()).toByte()\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninternal inline fun Boolean.flagAt(at: Int) = if (this) 1 shl at else 0\n","// ktlint-disable filename\n/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.http.cio.websocket\n\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.*\n\n/**\n * Represents a web socket session between two peers\n */\npublic actual interface WebSocketSession : CoroutineScope {\n /**\n * Incoming frames channel\n */\n public actual val incoming: ReceiveChannel<Frame>\n\n /**\n * Outgoing frames channel. It could have limited capacity so sending too much frames may lead to suspension at\n * corresponding send invocations. It also may suspend if a peer doesn't read frames for some reason.\n */\n public actual val outgoing: SendChannel<Frame>\n\n /**\n * Negotiated WebSocket extensions.\n */\n @ExperimentalWebSocketExtensionApi\n public actual val extensions: List<WebSocketExtension<*>>\n\n /**\n * Enqueue frame, may suspend if outgoing queue is full. May throw an exception if outgoing channel is already\n * closed so it is impossible to transfer any message. Frames that were sent after close frame could be silently\n * ignored. Please note that close frame could be sent automatically in reply to a peer close frame unless it is\n * raw websocket session.\n */\n @Suppress(\"ACTUAL_WITHOUT_EXPECT\")\n public suspend fun send(frame: Frame) {\n outgoing.send(frame)\n }\n\n /**\n * Flush all outstanding messages and suspend until all earlier sent messages will be written. Could be called\n * at any time even after close. May return immediately if the connection is already terminated.\n * However it may also fail with an exception (or cancellation) at any point due to session failure.\n * Please note that [flush] doesn't guarantee that frames were actually delivered.\n */\n public actual suspend fun flush()\n\n /**\n * Initiate connection termination immediately. Termination may complete asynchronously.\n */\n @Deprecated(\n \"Use cancel() instead.\",\n ReplaceWith(\"cancel()\", \"kotlinx.coroutines.cancel\")\n )\n public actual fun terminate()\n\n /**\n * Specifies frame size limit. Connection will be closed if violated\n */\n public actual var maxFrameSize: Long\n}\n","'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n","/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.json.serializer\n\nimport io.ktor.client.call.*\nimport io.ktor.client.features.json.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.serialization.*\nimport kotlinx.serialization.builtins.*\nimport kotlinx.serialization.json.*\nimport kotlinx.serialization.modules.*\n\n/**\n * A [JsonSerializer] implemented for kotlinx [Serializable] classes.\n */\npublic class KotlinxSerializer(\n private val json: Json = DefaultJson\n) : JsonSerializer {\n\n override fun write(data: Any, contentType: ContentType): OutgoingContent {\n @Suppress(\"UNCHECKED_CAST\")\n return TextContent(writeContent(data), contentType)\n }\n\n internal fun writeContent(data: Any): String =\n json.encodeToString(buildSerializer(data, json.serializersModule), data)\n\n @OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)\n override fun read(type: TypeInfo, body: Input): Any {\n val text = body.readText()\n val deserializationStrategy = json.serializersModule.getContextual(type.type)\n val mapper = deserializationStrategy ?: (type.kotlinType?.let { serializer(it) } ?: type.type.serializer())\n return json.decodeFromString(mapper, text)!!\n }\n\n public companion object {\n /**\n * Default [Json] configuration for [KotlinxSerializer].\n */\n @Deprecated(\n level = DeprecationLevel.ERROR,\n message = \"DefaultJsonConfiguration is deprecated. Consider using DefaultJson instead.\",\n replaceWith = ReplaceWith(\"DefaultJson\")\n )\n @Suppress(\"unused\")\n public val DefaultJsonConfiguration: Json = Json {\n isLenient = false\n ignoreUnknownKeys = false\n allowSpecialFloatingPointValues = true\n useArrayPolymorphism = false\n }\n\n /**\n * Default [Json] configuration for [KotlinxSerializer].\n */\n public val DefaultJson: Json = Json {\n isLenient = false\n ignoreUnknownKeys = false\n allowSpecialFloatingPointValues = true\n useArrayPolymorphism = false\n }\n }\n}\n\n@Suppress(\"UNCHECKED_CAST\")\nprivate fun buildSerializer(value: Any, module: SerializersModule): KSerializer<Any> = when (value) {\n is JsonElement -> JsonElement.serializer()\n is List<*> -> ListSerializer(value.elementSerializer(module))\n is Array<*> -> value.firstOrNull()?.let { buildSerializer(it, module) } ?: ListSerializer(String.serializer())\n is Set<*> -> SetSerializer(value.elementSerializer(module))\n is Map<*, *> -> {\n val keySerializer = value.keys.elementSerializer(module)\n val valueSerializer = value.values.elementSerializer(module)\n MapSerializer(keySerializer, valueSerializer)\n }\n else -> {\n @OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)\n module.getContextual(value::class) ?: value::class.serializer()\n }\n} as KSerializer<Any>\n\n@OptIn(ExperimentalSerializationApi::class)\nprivate fun Collection<*>.elementSerializer(module: SerializersModule): KSerializer<*> {\n val serializers: List<KSerializer<*>> =\n filterNotNull().map { buildSerializer(it, module) }.distinctBy { it.descriptor.serialName }\n\n if (serializers.size > 1) {\n error(\n \"Serializing collections of different element types is not yet supported. \" +\n \"Selected serializers: ${serializers.map { it.descriptor.serialName }}\"\n )\n }\n\n val selected = serializers.singleOrNull() ?: String.serializer()\n\n if (selected.descriptor.isNullable) {\n return selected\n }\n\n @Suppress(\"UNCHECKED_CAST\")\n selected as KSerializer<Any>\n\n if (any { it == null }) {\n return selected.nullable\n }\n\n return selected\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\nimport io.ktor.client.features.json.*\nimport io.ktor.client.features.json.serializer.*\nimport io.ktor.util.*\n\n@InternalAPI\n@Suppress(\"unused\")\npublic val initializer: SerializerInitializer = SerializerInitializer\n\n@InternalAPI\npublic object SerializerInitializer {\n init {\n serializersStore += KotlinxSerializer()\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\n/**\n * [Logging] log level.\n */\npublic enum class LogLevel(\n public val info: Boolean,\n public val headers: Boolean,\n public val body: Boolean\n) {\n ALL(true, true, true),\n HEADERS(true, true, false),\n BODY(true, false, true),\n INFO(true, false, false),\n NONE(false, false, false)\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\n\ninternal class LoggedContent(\n private val originalContent: OutgoingContent,\n private val channel: ByteReadChannel\n) : OutgoingContent.ReadChannelContent() {\n\n override val contentType: ContentType? = originalContent.contentType\n override val contentLength: Long? = originalContent.contentLength\n override val status: HttpStatusCode? = originalContent.status\n override val headers: Headers = originalContent.headers\n\n override fun <T : Any> getProperty(key: AttributeKey<T>): T? = originalContent.getProperty(key)\n\n override fun <T : Any> setProperty(key: AttributeKey<T>, value: T?) =\n originalContent.setProperty(key, value)\n\n override fun readFrom(): ByteReadChannel = channel\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\n/**\n * [HttpClient] Logger.\n */\npublic interface Logger {\n /**\n * Add [message] to log.\n */\n public fun log(message: String)\n\n public companion object\n}\n\n/**\n * Default logger to use.\n */\npublic expect val Logger.Companion.DEFAULT: Logger\n\n/**\n * [Logger] using [println].\n */\npublic val Logger.Companion.SIMPLE: Logger get() = SimpleLogger()\n\n/**\n * Empty [Logger] for test purpose.\n */\npublic val Logger.Companion.EMPTY: Logger\n get() = object : Logger {\n override fun log(message: String) {}\n }\n\nprivate class SimpleLogger : Logger {\n override fun log(message: String) {\n println(\"HttpClient: $message\")\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.features.*\nimport io.ktor.client.features.observer.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.sync.*\n\n/**\n * [HttpClient] logging feature.\n */\npublic class Logging(\n public val logger: Logger,\n public var level: LogLevel,\n public var filters: List<(HttpRequestBuilder) -> Boolean> = emptyList()\n) {\n\n public constructor(logger: Logger, level: LogLevel) : this(logger, level, emptyList())\n\n private val mutex = Mutex()\n\n /**\n * [Logging] feature configuration\n */\n public class Config {\n /**\n * filters\n */\n internal var filters = mutableListOf<(HttpRequestBuilder) -> Boolean>()\n\n /**\n * [Logger] instance to use\n */\n public var logger: Logger = Logger.DEFAULT\n\n /**\n * log [LogLevel]\n */\n public var level: LogLevel = LogLevel.HEADERS\n\n /**\n * Log messages for calls matching a [predicate]\n */\n public fun filter(predicate: (HttpRequestBuilder) -> Boolean) {\n filters.add(predicate)\n }\n }\n\n private suspend fun beginLogging() {\n mutex.lock()\n }\n\n private fun doneLogging() {\n mutex.unlock()\n }\n\n private suspend fun logRequest(request: HttpRequestBuilder): OutgoingContent? {\n if (level.info) {\n logger.log(\"REQUEST: ${Url(request.url)}\")\n logger.log(\"METHOD: ${request.method}\")\n }\n\n val content = request.body as OutgoingContent\n\n if (level.headers) {\n logger.log(\"COMMON HEADERS\")\n logHeaders(request.headers.entries())\n\n logger.log(\"CONTENT HEADERS\")\n content.contentLength?.let { logger.logHeader(HttpHeaders.ContentLength, it.toString()) }\n content.contentType?.let { logger.logHeader(HttpHeaders.ContentType, it.toString()) }\n logHeaders(content.headers.entries())\n }\n\n return if (level.body) {\n logRequestBody(content)\n } else null\n }\n\n private fun logResponse(response: HttpResponse) {\n if (level.info) {\n logger.log(\"RESPONSE: ${response.status}\")\n logger.log(\"METHOD: ${response.call.request.method}\")\n logger.log(\"FROM: ${response.call.request.url}\")\n }\n\n if (level.headers) {\n logger.log(\"COMMON HEADERS\")\n logHeaders(response.headers.entries())\n }\n }\n\n private suspend fun logResponseBody(contentType: ContentType?, content: ByteReadChannel): Unit = with(logger) {\n log(\"BODY Content-Type: $contentType\")\n log(\"BODY START\")\n val message = content.tryReadText(contentType?.charset() ?: Charsets.UTF_8) ?: \"[response body omitted]\"\n log(message)\n log(\"BODY END\")\n }\n\n private fun logRequestException(context: HttpRequestBuilder, cause: Throwable) {\n if (level.info) {\n logger.log(\"REQUEST ${Url(context.url)} failed with exception: $cause\")\n }\n }\n\n private fun logResponseException(context: HttpClientCall, cause: Throwable) {\n if (level.info) {\n logger.log(\"RESPONSE ${context.request.url} failed with exception: $cause\")\n }\n }\n\n private fun logHeaders(headers: Set<Map.Entry<String, List<String>>>) {\n val sortedHeaders = headers.toList().sortedBy { it.key }\n\n sortedHeaders.forEach { (key, values) ->\n logger.logHeader(key, values.joinToString(\"; \"))\n }\n }\n\n private fun Logger.logHeader(key: String, value: String) {\n log(\"-> $key: $value\")\n }\n\n private suspend fun logRequestBody(content: OutgoingContent): OutgoingContent? {\n logger.log(\"BODY Content-Type: ${content.contentType}\")\n\n val charset = content.contentType?.charset() ?: Charsets.UTF_8\n\n val channel = ByteChannel()\n GlobalScope.launch(Dispatchers.Unconfined) {\n val text = channel.tryReadText(charset) ?: \"[request body omitted]\"\n logger.log(\"BODY START\")\n logger.log(text)\n logger.log(\"BODY END\")\n }\n\n return content.observe(channel)\n }\n\n public companion object : HttpClientFeature<Config, Logging> {\n override val key: AttributeKey<Logging> = AttributeKey(\"ClientLogging\")\n\n override fun prepare(block: Config.() -> Unit): Logging {\n val config = Config().apply(block)\n return Logging(config.logger, config.level, config.filters)\n }\n\n override fun install(feature: Logging, scope: HttpClient) {\n scope.sendPipeline.intercept(HttpSendPipeline.Monitoring) {\n val response = if (feature.filters.isEmpty() || feature.filters.any { it(context) }) {\n try {\n feature.beginLogging()\n feature.logRequest(context)\n } catch (_: Throwable) {\n null\n } finally {\n feature.doneLogging()\n }\n } else null\n\n try {\n proceedWith(response ?: subject)\n } catch (cause: Throwable) {\n feature.logRequestException(context, cause)\n throw cause\n } finally {\n }\n }\n\n scope.receivePipeline.intercept(HttpReceivePipeline.State) {\n try {\n feature.beginLogging()\n feature.logResponse(context.response)\n proceedWith(subject)\n } catch (cause: Throwable) {\n feature.logResponseException(context, cause)\n throw cause\n } finally {\n if (!feature.level.body) {\n feature.doneLogging()\n }\n }\n }\n\n scope.responsePipeline.intercept(HttpResponsePipeline.Receive) {\n try {\n proceed()\n } catch (cause: Throwable) {\n feature.logResponseException(context, cause)\n throw cause\n }\n }\n\n if (!feature.level.body) {\n return\n }\n\n val observer: ResponseHandler = {\n try {\n feature.logResponseBody(it.contentType(), it.content)\n } catch (_: Throwable) {\n } finally {\n feature.doneLogging()\n }\n }\n\n ResponseObserver.install(ResponseObserver(observer), scope)\n }\n }\n}\n\n/**\n * Configure and install [Logging] in [HttpClient].\n */\npublic fun HttpClientConfig<*>.Logging(block: Logging.Config.() -> Unit = {}) {\n install(Logging, block)\n}\n\ninternal suspend inline fun ByteReadChannel.tryReadText(charset: Charset): String? = try {\n readRemaining().readText(charset = charset)\n} catch (cause: Throwable) {\n null\n}\n","/*\n * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\nimport io.ktor.http.content.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.*\nimport kotlinx.coroutines.*\n\ninternal suspend fun OutgoingContent.observe(log: ByteWriteChannel): OutgoingContent = when (this) {\n is OutgoingContent.ByteArrayContent -> {\n log.writeFully(bytes())\n log.close()\n this\n }\n is OutgoingContent.ReadChannelContent -> {\n val responseChannel = ByteChannel()\n val content = readFrom()\n\n content.copyToBoth(log, responseChannel)\n LoggedContent(this, responseChannel)\n }\n is OutgoingContent.WriteChannelContent -> {\n val responseChannel = ByteChannel()\n val content = toReadChannel()\n content.copyToBoth(log, responseChannel)\n LoggedContent(this, responseChannel)\n }\n else -> {\n log.close()\n this\n }\n}\n\nprivate fun OutgoingContent.WriteChannelContent.toReadChannel():\n ByteReadChannel = GlobalScope.writer(Dispatchers.Unconfined) { writeTo(channel) }.channel\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.logging\n\npublic actual val Logger.Companion.DEFAULT: Logger get() = SIMPLE\n",null,null,null,null,null,null,null,null,null,null,null,null,null,"//! @version @js-joda/core - 3.1.0\n//! @copyright (c) 2015-present, Philipp Thürwächter, Pattrick Hüper & js-joda contributors\n//! @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n//! @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nfunction createErrorType(name, init, superErrorClass) {\n if (superErrorClass === void 0) {\n superErrorClass = Error;\n }\n\n function JsJodaException(message) {\n if (!Error.captureStackTrace) {\n this.stack = new Error().stack;\n } else {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.message = message;\n init && init.apply(this, arguments);\n\n this.toString = function () {\n return this.name + \": \" + this.message;\n };\n }\n\n JsJodaException.prototype = Object.create(superErrorClass.prototype);\n JsJodaException.prototype.name = name;\n JsJodaException.prototype.constructor = JsJodaException;\n return JsJodaException;\n}\n\nvar DateTimeException = createErrorType('DateTimeException', messageWithCause);\nvar DateTimeParseException = createErrorType('DateTimeParseException', messageForDateTimeParseException);\nvar UnsupportedTemporalTypeException = createErrorType('UnsupportedTemporalTypeException', null, DateTimeException);\nvar ArithmeticException = createErrorType('ArithmeticException');\nvar IllegalArgumentException = createErrorType('IllegalArgumentException');\nvar IllegalStateException = createErrorType('IllegalStateException');\nvar NullPointerException = createErrorType('NullPointerException');\n\nfunction messageWithCause(message, cause) {\n if (cause === void 0) {\n cause = null;\n }\n\n var msg = message || this.name;\n\n if (cause !== null && cause instanceof Error) {\n msg += '\\n-------\\nCaused by: ' + cause.stack + '\\n-------\\n';\n }\n\n this.message = msg;\n}\n\nfunction messageForDateTimeParseException(message, text, index, cause) {\n if (text === void 0) {\n text = '';\n }\n\n if (index === void 0) {\n index = 0;\n }\n\n if (cause === void 0) {\n cause = null;\n }\n\n var msg = message || this.name;\n msg += ': ' + text + ', at index: ' + index;\n\n if (cause !== null && cause instanceof Error) {\n msg += '\\n-------\\nCaused by: ' + cause.stack + '\\n-------\\n';\n }\n\n this.message = msg;\n\n this.parsedString = function () {\n return text;\n };\n\n this.errorIndex = function () {\n return index;\n };\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nfunction assert(assertion, msg, error) {\n if (!assertion) {\n if (error) {\n throw new error(msg);\n } else {\n throw new Error(msg);\n }\n }\n}\nfunction requireNonNull(value, parameterName) {\n if (value == null) {\n throw new NullPointerException(parameterName + ' must not be null');\n }\n\n return value;\n}\nfunction requireInstance(value, _class, parameterName) {\n if (!(value instanceof _class)) {\n throw new IllegalArgumentException(parameterName + ' must be an instance of ' + (_class.name ? _class.name : _class) + (value && value.constructor && value.constructor.name ? ', but is ' + value.constructor.name : ''));\n }\n\n return value;\n}\nfunction abstractMethodFail(methodName) {\n throw new TypeError('abstract method \"' + methodName + '\" is not implemented');\n}\n\nvar assert$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n assert: assert,\n requireNonNull: requireNonNull,\n requireInstance: requireInstance,\n abstractMethodFail: abstractMethodFail\n});\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar MIN_SAFE_INTEGER = -9007199254740991;\nvar MathUtil = function () {\n function MathUtil() {}\n\n MathUtil.intDiv = function intDiv(x, y) {\n var r = x / y;\n r = MathUtil.roundDown(r);\n return MathUtil.safeZero(r);\n };\n\n MathUtil.intMod = function intMod(x, y) {\n var r = x - MathUtil.intDiv(x, y) * y;\n r = MathUtil.roundDown(r);\n return MathUtil.safeZero(r);\n };\n\n MathUtil.roundDown = function roundDown(r) {\n if (r < 0) {\n return Math.ceil(r);\n } else {\n return Math.floor(r);\n }\n };\n\n MathUtil.floorDiv = function floorDiv(x, y) {\n var r = Math.floor(x / y);\n return MathUtil.safeZero(r);\n };\n\n MathUtil.floorMod = function floorMod(x, y) {\n var r = x - MathUtil.floorDiv(x, y) * y;\n return MathUtil.safeZero(r);\n };\n\n MathUtil.safeAdd = function safeAdd(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n\n if (x === 0) {\n return MathUtil.safeZero(y);\n }\n\n if (y === 0) {\n return MathUtil.safeZero(x);\n }\n\n var r = MathUtil.safeToInt(x + y);\n\n if (r === x || r === y) {\n throw new ArithmeticException('Invalid addition beyond MAX_SAFE_INTEGER!');\n }\n\n return r;\n };\n\n MathUtil.safeSubtract = function safeSubtract(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n\n if (x === 0 && y === 0) {\n return 0;\n } else if (x === 0) {\n return MathUtil.safeZero(-1 * y);\n } else if (y === 0) {\n return MathUtil.safeZero(x);\n }\n\n return MathUtil.safeToInt(x - y);\n };\n\n MathUtil.safeMultiply = function safeMultiply(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n\n if (x === 1) {\n return MathUtil.safeZero(y);\n }\n\n if (y === 1) {\n return MathUtil.safeZero(x);\n }\n\n if (x === 0 || y === 0) {\n return 0;\n }\n\n var r = MathUtil.safeToInt(x * y);\n\n if (r / y !== x || x === MIN_SAFE_INTEGER && y === -1 || y === MIN_SAFE_INTEGER && x === -1) {\n throw new ArithmeticException('Multiplication overflows: ' + x + ' * ' + y);\n }\n\n return r;\n };\n\n MathUtil.parseInt = function (_parseInt) {\n function parseInt(_x) {\n return _parseInt.apply(this, arguments);\n }\n\n parseInt.toString = function () {\n return _parseInt.toString();\n };\n\n return parseInt;\n }(function (value) {\n var r = parseInt(value);\n return MathUtil.safeToInt(r);\n });\n\n MathUtil.safeToInt = function safeToInt(value) {\n MathUtil.verifyInt(value);\n return MathUtil.safeZero(value);\n };\n\n MathUtil.verifyInt = function verifyInt(value) {\n if (value == null) {\n throw new ArithmeticException(\"Invalid value: '\" + value + \"', using null or undefined as argument\");\n }\n\n if (isNaN(value)) {\n throw new ArithmeticException('Invalid int value, using NaN as argument');\n }\n\n if (value % 1 !== 0) {\n throw new ArithmeticException(\"Invalid value: '\" + value + \"' is a float\");\n }\n\n if (value > MAX_SAFE_INTEGER || value < MIN_SAFE_INTEGER) {\n throw new ArithmeticException('Calculation overflows an int: ' + value);\n }\n };\n\n MathUtil.safeZero = function safeZero(value) {\n return value === 0 ? 0 : +value;\n };\n\n MathUtil.compareNumbers = function compareNumbers(a, b) {\n if (a < b) {\n return -1;\n }\n\n if (a > b) {\n return 1;\n }\n\n return 0;\n };\n\n MathUtil.smi = function smi(int) {\n return int >>> 1 & 0x40000000 | int & 0xBFFFFFFF;\n };\n\n MathUtil.hash = function hash(number) {\n if (number !== number || number === Infinity) {\n return 0;\n }\n\n var result = number;\n\n while (number > 0xFFFFFFFF) {\n number /= 0xFFFFFFFF;\n result ^= number;\n }\n\n return MathUtil.smi(result);\n };\n\n MathUtil.hashCode = function hashCode() {\n var result = 17;\n\n for (var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++) {\n numbers[_key] = arguments[_key];\n }\n\n for (var _i = 0, _numbers = numbers; _i < _numbers.length; _i++) {\n var n = _numbers[_i];\n result = (result << 5) - result + MathUtil.hash(n);\n }\n\n return MathUtil.hash(result);\n };\n\n return MathUtil;\n}();\nMathUtil.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nMathUtil.MIN_SAFE_INTEGER = MIN_SAFE_INTEGER;\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar Enum = function () {\n function Enum(name) {\n this._name = name;\n }\n\n var _proto = Enum.prototype;\n\n _proto.equals = function equals(other) {\n return this === other;\n };\n\n _proto.toString = function toString() {\n return this._name;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return Enum;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar TemporalAmount = function () {\n function TemporalAmount() {}\n\n var _proto = TemporalAmount.prototype;\n\n _proto.get = function get(unit) {\n abstractMethodFail('get');\n };\n\n _proto.units = function units() {\n abstractMethodFail('units');\n };\n\n _proto.addTo = function addTo(temporal) {\n abstractMethodFail('addTo');\n };\n\n _proto.subtractFrom = function subtractFrom(temporal) {\n abstractMethodFail('subtractFrom');\n };\n\n return TemporalAmount;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar TemporalUnit = function () {\n function TemporalUnit() {}\n\n var _proto = TemporalUnit.prototype;\n\n _proto.duration = function duration() {\n abstractMethodFail('duration');\n };\n\n _proto.isDurationEstimated = function isDurationEstimated() {\n abstractMethodFail('isDurationEstimated');\n };\n\n _proto.isDateBased = function isDateBased() {\n abstractMethodFail('isDateBased');\n };\n\n _proto.isTimeBased = function isTimeBased() {\n abstractMethodFail('isTimeBased');\n };\n\n _proto.isSupportedBy = function isSupportedBy(temporal) {\n abstractMethodFail('isSupportedBy');\n };\n\n _proto.addTo = function addTo(dateTime, periodToAdd) {\n abstractMethodFail('addTo');\n };\n\n _proto.between = function between(temporal1, temporal2) {\n abstractMethodFail('between');\n };\n\n return TemporalUnit;\n}();\n\nvar Duration = function (_TemporalAmount) {\n _inheritsLoose(Duration, _TemporalAmount);\n\n function Duration(seconds, nanos) {\n var _this;\n\n _this = _TemporalAmount.call(this) || this;\n _this._seconds = MathUtil.safeToInt(seconds);\n _this._nanos = MathUtil.safeToInt(nanos);\n return _this;\n }\n\n Duration.ofDays = function ofDays(days) {\n return Duration._create(MathUtil.safeMultiply(days, LocalTime.SECONDS_PER_DAY), 0);\n };\n\n Duration.ofHours = function ofHours(hours) {\n return Duration._create(MathUtil.safeMultiply(hours, LocalTime.SECONDS_PER_HOUR), 0);\n };\n\n Duration.ofMinutes = function ofMinutes(minutes) {\n return Duration._create(MathUtil.safeMultiply(minutes, LocalTime.SECONDS_PER_MINUTE), 0);\n };\n\n Duration.ofSeconds = function ofSeconds(seconds, nanoAdjustment) {\n if (nanoAdjustment === void 0) {\n nanoAdjustment = 0;\n }\n\n var secs = MathUtil.safeAdd(seconds, MathUtil.floorDiv(nanoAdjustment, LocalTime.NANOS_PER_SECOND));\n var nos = MathUtil.floorMod(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n return Duration._create(secs, nos);\n };\n\n Duration.ofMillis = function ofMillis(millis) {\n var secs = MathUtil.intDiv(millis, 1000);\n var mos = MathUtil.intMod(millis, 1000);\n\n if (mos < 0) {\n mos += 1000;\n secs--;\n }\n\n return Duration._create(secs, mos * 1000000);\n };\n\n Duration.ofNanos = function ofNanos(nanos) {\n var secs = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_SECOND);\n var nos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_SECOND);\n\n if (nos < 0) {\n nos += LocalTime.NANOS_PER_SECOND;\n secs--;\n }\n\n return this._create(secs, nos);\n };\n\n Duration.of = function of(amount, unit) {\n return Duration.ZERO.plus(amount, unit);\n };\n\n Duration.from = function from(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount);\n var duration = Duration.ZERO;\n amount.units().forEach(function (unit) {\n duration = duration.plus(amount.get(unit), unit);\n });\n return duration;\n };\n\n Duration.between = function between(startInclusive, endExclusive) {\n requireNonNull(startInclusive, 'startInclusive');\n requireNonNull(endExclusive, 'endExclusive');\n var secs = startInclusive.until(endExclusive, ChronoUnit.SECONDS);\n var nanos = 0;\n\n if (startInclusive.isSupported(ChronoField.NANO_OF_SECOND) && endExclusive.isSupported(ChronoField.NANO_OF_SECOND)) {\n try {\n var startNos = startInclusive.getLong(ChronoField.NANO_OF_SECOND);\n nanos = endExclusive.getLong(ChronoField.NANO_OF_SECOND) - startNos;\n\n if (secs > 0 && nanos < 0) {\n nanos += LocalTime.NANOS_PER_SECOND;\n } else if (secs < 0 && nanos > 0) {\n nanos -= LocalTime.NANOS_PER_SECOND;\n } else if (secs === 0 && nanos !== 0) {\n var adjustedEnd = endExclusive.with(ChronoField.NANO_OF_SECOND, startNos);\n secs = startInclusive.until(adjustedEnd, ChronoUnit.SECONDS);\n }\n } catch (e) {}\n }\n\n return this.ofSeconds(secs, nanos);\n };\n\n Duration.parse = function parse(text) {\n requireNonNull(text, 'text');\n var PATTERN = new RegExp('([-+]?)P(?:([-+]?[0-9]+)D)?(T(?:([-+]?[0-9]+)H)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)(?:[.,]([0-9]{0,9}))?S)?)?', 'i');\n var matches = PATTERN.exec(text);\n\n if (matches !== null) {\n if ('T' === matches[3] === false) {\n var negate = '-' === matches[1];\n var dayMatch = matches[2];\n var hourMatch = matches[4];\n var minuteMatch = matches[5];\n var secondMatch = matches[6];\n var fractionMatch = matches[7];\n\n if (dayMatch != null || hourMatch != null || minuteMatch != null || secondMatch != null) {\n var daysAsSecs = Duration._parseNumber(text, dayMatch, LocalTime.SECONDS_PER_DAY, 'days');\n\n var hoursAsSecs = Duration._parseNumber(text, hourMatch, LocalTime.SECONDS_PER_HOUR, 'hours');\n\n var minsAsSecs = Duration._parseNumber(text, minuteMatch, LocalTime.SECONDS_PER_MINUTE, 'minutes');\n\n var seconds = Duration._parseNumber(text, secondMatch, 1, 'seconds');\n\n var negativeSecs = secondMatch != null && secondMatch.charAt(0) === '-';\n\n var nanos = Duration._parseFraction(text, fractionMatch, negativeSecs ? -1 : 1);\n\n try {\n return Duration._create(negate, daysAsSecs, hoursAsSecs, minsAsSecs, seconds, nanos);\n } catch (ex) {\n throw new DateTimeParseException('Text cannot be parsed to a Duration: overflow', text, 0, ex);\n }\n }\n }\n }\n\n throw new DateTimeParseException('Text cannot be parsed to a Duration', text, 0);\n };\n\n Duration._parseNumber = function _parseNumber(text, parsed, multiplier, errorText) {\n if (parsed == null) {\n return 0;\n }\n\n try {\n if (parsed[0] === '+') {\n parsed = parsed.substring(1);\n }\n\n return MathUtil.safeMultiply(parseFloat(parsed), multiplier);\n } catch (ex) {\n throw new DateTimeParseException('Text cannot be parsed to a Duration: ' + errorText, text, 0, ex);\n }\n };\n\n Duration._parseFraction = function _parseFraction(text, parsed, negate) {\n if (parsed == null || parsed.length === 0) {\n return 0;\n }\n\n parsed = (parsed + '000000000').substring(0, 9);\n return parseFloat(parsed) * negate;\n };\n\n Duration._create = function _create() {\n if (arguments.length <= 2) {\n return Duration._createSecondsNanos(arguments[0], arguments[1]);\n } else {\n return Duration._createNegateDaysHoursMinutesSecondsNanos(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n };\n\n Duration._createNegateDaysHoursMinutesSecondsNanos = function _createNegateDaysHoursMinutesSecondsNanos(negate, daysAsSecs, hoursAsSecs, minsAsSecs, secs, nanos) {\n var seconds = MathUtil.safeAdd(daysAsSecs, MathUtil.safeAdd(hoursAsSecs, MathUtil.safeAdd(minsAsSecs, secs)));\n\n if (negate) {\n return Duration.ofSeconds(seconds, nanos).negated();\n }\n\n return Duration.ofSeconds(seconds, nanos);\n };\n\n Duration._createSecondsNanos = function _createSecondsNanos(seconds, nanoAdjustment) {\n if (seconds === void 0) {\n seconds = 0;\n }\n\n if (nanoAdjustment === void 0) {\n nanoAdjustment = 0;\n }\n\n if (seconds === 0 && nanoAdjustment === 0) {\n return Duration.ZERO;\n }\n\n return new Duration(seconds, nanoAdjustment);\n };\n\n var _proto = Duration.prototype;\n\n _proto.get = function get(unit) {\n if (unit === ChronoUnit.SECONDS) {\n return this._seconds;\n } else if (unit === ChronoUnit.NANOS) {\n return this._nanos;\n } else {\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n };\n\n _proto.units = function units() {\n return [ChronoUnit.SECONDS, ChronoUnit.NANOS];\n };\n\n _proto.isZero = function isZero() {\n return this._seconds === 0 && this._nanos === 0;\n };\n\n _proto.isNegative = function isNegative() {\n return this._seconds < 0;\n };\n\n _proto.seconds = function seconds() {\n return this._seconds;\n };\n\n _proto.nano = function nano() {\n return this._nanos;\n };\n\n _proto.withSeconds = function withSeconds(seconds) {\n return Duration._create(seconds, this._nanos);\n };\n\n _proto.withNanos = function withNanos(nanoOfSecond) {\n ChronoField.NANO_OF_SECOND.checkValidIntValue(nanoOfSecond);\n return Duration._create(this._seconds, nanoOfSecond);\n };\n\n _proto.plusDuration = function plusDuration(duration) {\n requireNonNull(duration, 'duration');\n return this.plus(duration.seconds(), duration.nano());\n };\n\n _proto.plus = function plus(durationOrNumber, unitOrNumber) {\n if (arguments.length === 1) {\n return this.plusDuration(durationOrNumber);\n } else if (arguments.length === 2 && unitOrNumber instanceof TemporalUnit) {\n return this.plusAmountUnit(durationOrNumber, unitOrNumber);\n } else {\n return this.plusSecondsNanos(durationOrNumber, unitOrNumber);\n }\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(amountToAdd, 'amountToAdd');\n requireNonNull(unit, 'unit');\n\n if (unit === ChronoUnit.DAYS) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY), 0);\n }\n\n if (unit.isDurationEstimated()) {\n throw new UnsupportedTemporalTypeException('Unit must not have an estimated duration');\n }\n\n if (amountToAdd === 0) {\n return this;\n }\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS:\n return this.plusNanos(amountToAdd);\n\n case ChronoUnit.MICROS:\n return this.plusSecondsNanos(MathUtil.intDiv(amountToAdd, 1000000 * 1000) * 1000, MathUtil.intMod(amountToAdd, 1000000 * 1000) * 1000);\n\n case ChronoUnit.MILLIS:\n return this.plusMillis(amountToAdd);\n\n case ChronoUnit.SECONDS:\n return this.plusSeconds(amountToAdd);\n }\n\n return this.plusSecondsNanos(MathUtil.safeMultiply(unit.duration().seconds(), amountToAdd), 0);\n }\n\n var duration = unit.duration().multipliedBy(amountToAdd);\n return this.plusSecondsNanos(duration.seconds(), duration.nano());\n };\n\n _proto.plusDays = function plusDays(daysToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(daysToAdd, LocalTime.SECONDS_PER_DAY), 0);\n };\n\n _proto.plusHours = function plusHours(hoursToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(hoursToAdd, LocalTime.SECONDS_PER_HOUR), 0);\n };\n\n _proto.plusMinutes = function plusMinutes(minutesToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(minutesToAdd, LocalTime.SECONDS_PER_MINUTE), 0);\n };\n\n _proto.plusSeconds = function plusSeconds(secondsToAdd) {\n return this.plusSecondsNanos(secondsToAdd, 0);\n };\n\n _proto.plusMillis = function plusMillis(millisToAdd) {\n return this.plusSecondsNanos(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * 1000000);\n };\n\n _proto.plusNanos = function plusNanos(nanosToAdd) {\n return this.plusSecondsNanos(0, nanosToAdd);\n };\n\n _proto.plusSecondsNanos = function plusSecondsNanos(secondsToAdd, nanosToAdd) {\n requireNonNull(secondsToAdd, 'secondsToAdd');\n requireNonNull(nanosToAdd, 'nanosToAdd');\n\n if (secondsToAdd === 0 && nanosToAdd === 0) {\n return this;\n }\n\n var epochSec = MathUtil.safeAdd(this._seconds, secondsToAdd);\n epochSec = MathUtil.safeAdd(epochSec, MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND));\n nanosToAdd = MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n var nanoAdjustment = MathUtil.safeAdd(this._nanos, nanosToAdd);\n return Duration.ofSeconds(epochSec, nanoAdjustment);\n };\n\n _proto.minus = function minus(durationOrNumber, unit) {\n if (arguments.length === 1) {\n return this.minusDuration(durationOrNumber);\n } else {\n return this.minusAmountUnit(durationOrNumber, unit);\n }\n };\n\n _proto.minusDuration = function minusDuration(duration) {\n requireNonNull(duration, 'duration');\n var secsToSubtract = duration.seconds();\n var nanosToSubtract = duration.nano();\n\n if (secsToSubtract === MIN_SAFE_INTEGER) {\n return this.plus(MAX_SAFE_INTEGER, -nanosToSubtract);\n }\n\n return this.plus(-secsToSubtract, -nanosToSubtract);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(amountToSubtract, 'amountToSubtract');\n requireNonNull(unit, 'unit');\n return amountToSubtract === MIN_SAFE_INTEGER ? this.plusAmountUnit(MAX_SAFE_INTEGER, unit) : this.plusAmountUnit(-amountToSubtract, unit);\n };\n\n _proto.minusDays = function minusDays(daysToSubtract) {\n return daysToSubtract === MIN_SAFE_INTEGER ? this.plusDays(MAX_SAFE_INTEGER) : this.plusDays(-daysToSubtract);\n };\n\n _proto.minusHours = function minusHours(hoursToSubtract) {\n return hoursToSubtract === MIN_SAFE_INTEGER ? this.plusHours(MAX_SAFE_INTEGER) : this.plusHours(-hoursToSubtract);\n };\n\n _proto.minusMinutes = function minusMinutes(minutesToSubtract) {\n return minutesToSubtract === MIN_SAFE_INTEGER ? this.plusMinutes(MAX_SAFE_INTEGER) : this.plusMinutes(-minutesToSubtract);\n };\n\n _proto.minusSeconds = function minusSeconds(secondsToSubtract) {\n return secondsToSubtract === MIN_SAFE_INTEGER ? this.plusSeconds(MAX_SAFE_INTEGER) : this.plusSeconds(-secondsToSubtract);\n };\n\n _proto.minusMillis = function minusMillis(millisToSubtract) {\n return millisToSubtract === MIN_SAFE_INTEGER ? this.plusMillis(MAX_SAFE_INTEGER) : this.plusMillis(-millisToSubtract);\n };\n\n _proto.minusNanos = function minusNanos(nanosToSubtract) {\n return nanosToSubtract === MIN_SAFE_INTEGER ? this.plusNanos(MAX_SAFE_INTEGER) : this.plusNanos(-nanosToSubtract);\n };\n\n _proto.multipliedBy = function multipliedBy(multiplicand) {\n if (multiplicand === 0) {\n return Duration.ZERO;\n }\n\n if (multiplicand === 1) {\n return this;\n }\n\n var secs = MathUtil.safeMultiply(this._seconds, multiplicand);\n var nos = MathUtil.safeMultiply(this._nanos, multiplicand);\n secs = secs + MathUtil.intDiv(nos, LocalTime.NANOS_PER_SECOND);\n nos = MathUtil.intMod(nos, LocalTime.NANOS_PER_SECOND);\n return Duration.ofSeconds(secs, nos);\n };\n\n _proto.dividedBy = function dividedBy(divisor) {\n if (divisor === 0) {\n throw new ArithmeticException('Cannot divide by zero');\n }\n\n if (divisor === 1) {\n return this;\n }\n\n var secs = MathUtil.intDiv(this._seconds, divisor);\n var secsMod = MathUtil.roundDown((this._seconds / divisor - secs) * LocalTime.NANOS_PER_SECOND);\n var nos = MathUtil.intDiv(this._nanos, divisor);\n nos = secsMod + nos;\n return Duration.ofSeconds(secs, nos);\n };\n\n _proto.negated = function negated() {\n return this.multipliedBy(-1);\n };\n\n _proto.abs = function abs() {\n return this.isNegative() ? this.negated() : this;\n };\n\n _proto.addTo = function addTo(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (this._seconds !== 0) {\n temporal = temporal.plus(this._seconds, ChronoUnit.SECONDS);\n }\n\n if (this._nanos !== 0) {\n temporal = temporal.plus(this._nanos, ChronoUnit.NANOS);\n }\n\n return temporal;\n };\n\n _proto.subtractFrom = function subtractFrom(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (this._seconds !== 0) {\n temporal = temporal.minus(this._seconds, ChronoUnit.SECONDS);\n }\n\n if (this._nanos !== 0) {\n temporal = temporal.minus(this._nanos, ChronoUnit.NANOS);\n }\n\n return temporal;\n };\n\n _proto.toDays = function toDays() {\n return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_DAY);\n };\n\n _proto.toHours = function toHours() {\n return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_HOUR);\n };\n\n _proto.toMinutes = function toMinutes() {\n return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_MINUTE);\n };\n\n _proto.toMillis = function toMillis() {\n var millis = Math.round(MathUtil.safeMultiply(this._seconds, 1000));\n millis = MathUtil.safeAdd(millis, MathUtil.intDiv(this._nanos, 1000000));\n return millis;\n };\n\n _proto.toNanos = function toNanos() {\n var totalNanos = MathUtil.safeMultiply(this._seconds, LocalTime.NANOS_PER_SECOND);\n totalNanos = MathUtil.safeAdd(totalNanos, this._nanos);\n return totalNanos;\n };\n\n _proto.compareTo = function compareTo(otherDuration) {\n requireNonNull(otherDuration, 'otherDuration');\n requireInstance(otherDuration, Duration, 'otherDuration');\n var cmp = MathUtil.compareNumbers(this._seconds, otherDuration.seconds());\n\n if (cmp !== 0) {\n return cmp;\n }\n\n return this._nanos - otherDuration.nano();\n };\n\n _proto.equals = function equals(otherDuration) {\n if (this === otherDuration) {\n return true;\n }\n\n if (otherDuration instanceof Duration) {\n return this.seconds() === otherDuration.seconds() && this.nano() === otherDuration.nano();\n }\n\n return false;\n };\n\n _proto.toString = function toString() {\n if (this === Duration.ZERO) {\n return 'PT0S';\n }\n\n var hours = MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_HOUR);\n var minutes = MathUtil.intDiv(MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_HOUR), LocalTime.SECONDS_PER_MINUTE);\n var secs = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_MINUTE);\n var rval = 'PT';\n\n if (hours !== 0) {\n rval += hours + 'H';\n }\n\n if (minutes !== 0) {\n rval += minutes + 'M';\n }\n\n if (secs === 0 && this._nanos === 0 && rval.length > 2) {\n return rval;\n }\n\n if (secs < 0 && this._nanos > 0) {\n if (secs === -1) {\n rval += '-0';\n } else {\n rval += secs + 1;\n }\n } else {\n rval += secs;\n }\n\n if (this._nanos > 0) {\n rval += '.';\n var nanoString;\n\n if (secs < 0) {\n nanoString = '' + (2 * LocalTime.NANOS_PER_SECOND - this._nanos);\n } else {\n nanoString = '' + (LocalTime.NANOS_PER_SECOND + this._nanos);\n }\n\n nanoString = nanoString.slice(1, nanoString.length);\n rval += nanoString;\n\n while (rval.charAt(rval.length - 1) === '0') {\n rval = rval.slice(0, rval.length - 1);\n }\n }\n\n rval += 'S';\n return rval;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return Duration;\n}(TemporalAmount);\nfunction _init() {\n Duration.ZERO = new Duration(0, 0);\n}\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)\n */\nvar YearConstants = function YearConstants() {};\nfunction _init$1() {\n YearConstants.MIN_VALUE = -999999;\n YearConstants.MAX_VALUE = 999999;\n}\n\nvar ChronoUnit = function (_TemporalUnit) {\n _inheritsLoose(ChronoUnit, _TemporalUnit);\n\n function ChronoUnit(name, estimatedDuration) {\n var _this;\n\n _this = _TemporalUnit.call(this) || this;\n _this._name = name;\n _this._duration = estimatedDuration;\n return _this;\n }\n\n var _proto = ChronoUnit.prototype;\n\n _proto.duration = function duration() {\n return this._duration;\n };\n\n _proto.isDurationEstimated = function isDurationEstimated() {\n return this.isDateBased() || this === ChronoUnit.FOREVER;\n };\n\n _proto.isDateBased = function isDateBased() {\n return this.compareTo(ChronoUnit.DAYS) >= 0 && this !== ChronoUnit.FOREVER;\n };\n\n _proto.isTimeBased = function isTimeBased() {\n return this.compareTo(ChronoUnit.DAYS) < 0;\n };\n\n _proto.isSupportedBy = function isSupportedBy(temporal) {\n if (this === ChronoUnit.FOREVER) {\n return false;\n }\n\n try {\n temporal.plus(1, this);\n return true;\n } catch (e) {\n try {\n temporal.plus(-1, this);\n return true;\n } catch (e2) {\n return false;\n }\n }\n };\n\n _proto.addTo = function addTo(temporal, amount) {\n return temporal.plus(amount, this);\n };\n\n _proto.between = function between(temporal1, temporal2) {\n return temporal1.until(temporal2, this);\n };\n\n _proto.toString = function toString() {\n return this._name;\n };\n\n _proto.compareTo = function compareTo(other) {\n return this.duration().compareTo(other.duration());\n };\n\n return ChronoUnit;\n}(TemporalUnit);\nfunction _init$2() {\n ChronoUnit.NANOS = new ChronoUnit('Nanos', Duration.ofNanos(1));\n ChronoUnit.MICROS = new ChronoUnit('Micros', Duration.ofNanos(1000));\n ChronoUnit.MILLIS = new ChronoUnit('Millis', Duration.ofNanos(1000000));\n ChronoUnit.SECONDS = new ChronoUnit('Seconds', Duration.ofSeconds(1));\n ChronoUnit.MINUTES = new ChronoUnit('Minutes', Duration.ofSeconds(60));\n ChronoUnit.HOURS = new ChronoUnit('Hours', Duration.ofSeconds(3600));\n ChronoUnit.HALF_DAYS = new ChronoUnit('HalfDays', Duration.ofSeconds(43200));\n ChronoUnit.DAYS = new ChronoUnit('Days', Duration.ofSeconds(86400));\n ChronoUnit.WEEKS = new ChronoUnit('Weeks', Duration.ofSeconds(7 * 86400));\n ChronoUnit.MONTHS = new ChronoUnit('Months', Duration.ofSeconds(31556952 / 12));\n ChronoUnit.YEARS = new ChronoUnit('Years', Duration.ofSeconds(31556952));\n ChronoUnit.DECADES = new ChronoUnit('Decades', Duration.ofSeconds(31556952 * 10));\n ChronoUnit.CENTURIES = new ChronoUnit('Centuries', Duration.ofSeconds(31556952 * 100));\n ChronoUnit.MILLENNIA = new ChronoUnit('Millennia', Duration.ofSeconds(31556952 * 1000));\n ChronoUnit.ERAS = new ChronoUnit('Eras', Duration.ofSeconds(31556952 * (YearConstants.MAX_VALUE + 1)));\n ChronoUnit.FOREVER = new ChronoUnit('Forever', Duration.ofSeconds(MathUtil.MAX_SAFE_INTEGER, 999999999));\n}\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nvar TemporalField = function () {\n function TemporalField() {}\n\n var _proto = TemporalField.prototype;\n\n _proto.isDateBased = function isDateBased() {\n abstractMethodFail('isDateBased');\n };\n\n _proto.isTimeBased = function isTimeBased() {\n abstractMethodFail('isTimeBased');\n };\n\n _proto.baseUnit = function baseUnit() {\n abstractMethodFail('baseUnit');\n };\n\n _proto.rangeUnit = function rangeUnit() {\n abstractMethodFail('rangeUnit');\n };\n\n _proto.range = function range() {\n abstractMethodFail('range');\n };\n\n _proto.rangeRefinedBy = function rangeRefinedBy(temporal) {\n abstractMethodFail('rangeRefinedBy');\n };\n\n _proto.getFrom = function getFrom(temporal) {\n abstractMethodFail('getFrom');\n };\n\n _proto.adjustInto = function adjustInto(temporal, newValue) {\n abstractMethodFail('adjustInto');\n };\n\n _proto.isSupportedBy = function isSupportedBy(temporal) {\n abstractMethodFail('isSupportedBy');\n };\n\n _proto.displayName = function displayName() {\n abstractMethodFail('displayName');\n };\n\n _proto.equals = function equals(other) {\n abstractMethodFail('equals');\n };\n\n _proto.name = function name() {\n abstractMethodFail('name');\n };\n\n return TemporalField;\n}();\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ValueRange = function () {\n function ValueRange(minSmallest, minLargest, maxSmallest, maxLargest) {\n assert(!(minSmallest > minLargest), 'Smallest minimum value \\'' + minSmallest + '\\' must be less than largest minimum value \\'' + minLargest + '\\'', IllegalArgumentException);\n assert(!(maxSmallest > maxLargest), 'Smallest maximum value \\'' + maxSmallest + '\\' must be less than largest maximum value \\'' + maxLargest + '\\'', IllegalArgumentException);\n assert(!(minLargest > maxLargest), 'Minimum value \\'' + minLargest + '\\' must be less than maximum value \\'' + maxLargest + '\\'', IllegalArgumentException);\n this._minSmallest = minSmallest;\n this._minLargest = minLargest;\n this._maxLargest = maxLargest;\n this._maxSmallest = maxSmallest;\n }\n\n var _proto = ValueRange.prototype;\n\n _proto.isFixed = function isFixed() {\n return this._minSmallest === this._minLargest && this._maxSmallest === this._maxLargest;\n };\n\n _proto.minimum = function minimum() {\n return this._minSmallest;\n };\n\n _proto.largestMinimum = function largestMinimum() {\n return this._minLargest;\n };\n\n _proto.maximum = function maximum() {\n return this._maxLargest;\n };\n\n _proto.smallestMaximum = function smallestMaximum() {\n return this._maxSmallest;\n };\n\n _proto.isValidValue = function isValidValue(value) {\n return this.minimum() <= value && value <= this.maximum();\n };\n\n _proto.checkValidValue = function checkValidValue(value, field) {\n var msg;\n\n if (!this.isValidValue(value)) {\n if (field != null) {\n msg = 'Invalid value for ' + field + ' (valid values ' + this.toString() + '): ' + value;\n } else {\n msg = 'Invalid value (valid values ' + this.toString() + '): ' + value;\n }\n\n return assert(false, msg, DateTimeException);\n }\n\n return value;\n };\n\n _proto.checkValidIntValue = function checkValidIntValue(value, field) {\n if (this.isValidIntValue(value) === false) {\n throw new DateTimeException('Invalid int value for ' + field + ': ' + value);\n }\n\n return value;\n };\n\n _proto.isValidIntValue = function isValidIntValue(value) {\n return this.isIntValue() && this.isValidValue(value);\n };\n\n _proto.isIntValue = function isIntValue() {\n return this.minimum() >= MathUtil.MIN_SAFE_INTEGER && this.maximum() <= MathUtil.MAX_SAFE_INTEGER;\n };\n\n _proto.equals = function equals(other) {\n if (other === this) {\n return true;\n }\n\n if (other instanceof ValueRange) {\n return this._minSmallest === other._minSmallest && this._minLargest === other._minLargest && this._maxSmallest === other._maxSmallest && this._maxLargest === other._maxLargest;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return MathUtil.hashCode(this._minSmallest, this._minLargest, this._maxSmallest, this._maxLargest);\n };\n\n _proto.toString = function toString() {\n var str = this.minimum() + (this.minimum() !== this.largestMinimum() ? '/' + this.largestMinimum() : '');\n str += ' - ';\n str += this.smallestMaximum() + (this.smallestMaximum() !== this.maximum() ? '/' + this.maximum() : '');\n return str;\n };\n\n ValueRange.of = function of() {\n if (arguments.length === 2) {\n return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[1]);\n } else if (arguments.length === 3) {\n return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[2]);\n } else if (arguments.length === 4) {\n return new ValueRange(arguments[0], arguments[1], arguments[2], arguments[3]);\n } else {\n return assert(false, 'Invalid number of arguments ' + arguments.length, IllegalArgumentException);\n }\n };\n\n return ValueRange;\n}();\n\nvar ChronoField = function (_TemporalField) {\n _inheritsLoose(ChronoField, _TemporalField);\n\n ChronoField.byName = function byName(fieldName) {\n for (var prop in ChronoField) {\n if (ChronoField[prop]) {\n if (ChronoField[prop] instanceof ChronoField && ChronoField[prop].name() === fieldName) {\n return ChronoField[prop];\n }\n }\n }\n };\n\n function ChronoField(name, baseUnit, rangeUnit, range) {\n var _this;\n\n _this = _TemporalField.call(this) || this;\n _this._name = name;\n _this._baseUnit = baseUnit;\n _this._rangeUnit = rangeUnit;\n _this._range = range;\n return _this;\n }\n\n var _proto = ChronoField.prototype;\n\n _proto.name = function name() {\n return this._name;\n };\n\n _proto.baseUnit = function baseUnit() {\n return this._baseUnit;\n };\n\n _proto.rangeUnit = function rangeUnit() {\n return this._rangeUnit;\n };\n\n _proto.range = function range() {\n return this._range;\n };\n\n _proto.displayName = function displayName() {\n return this.toString();\n };\n\n _proto.checkValidValue = function checkValidValue(value) {\n return this.range().checkValidValue(value, this);\n };\n\n _proto.checkValidIntValue = function checkValidIntValue(value) {\n return this.range().checkValidIntValue(value, this);\n };\n\n _proto.isDateBased = function isDateBased() {\n var dateBased = this === ChronoField.DAY_OF_WEEK || this === ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH || this === ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR || this === ChronoField.DAY_OF_MONTH || this === ChronoField.DAY_OF_YEAR || this === ChronoField.EPOCH_DAY || this === ChronoField.ALIGNED_WEEK_OF_MONTH || this === ChronoField.ALIGNED_WEEK_OF_YEAR || this === ChronoField.MONTH_OF_YEAR || this === ChronoField.YEAR_OF_ERA || this === ChronoField.YEAR || this === ChronoField.ERA;\n return dateBased;\n };\n\n _proto.isTimeBased = function isTimeBased() {\n var timeBased = this === ChronoField.NANO_OF_SECOND || this === ChronoField.NANO_OF_DAY || this === ChronoField.MICRO_OF_SECOND || this === ChronoField.MICRO_OF_DAY || this === ChronoField.MILLI_OF_SECOND || this === ChronoField.MILLI_OF_DAY || this === ChronoField.SECOND_OF_MINUTE || this === ChronoField.SECOND_OF_DAY || this === ChronoField.MINUTE_OF_HOUR || this === ChronoField.MINUTE_OF_DAY || this === ChronoField.HOUR_OF_AMPM || this === ChronoField.CLOCK_HOUR_OF_AMPM || this === ChronoField.HOUR_OF_DAY || this === ChronoField.CLOCK_HOUR_OF_DAY || this === ChronoField.AMPM_OF_DAY;\n return timeBased;\n };\n\n _proto.rangeRefinedBy = function rangeRefinedBy(temporal) {\n return temporal.range(this);\n };\n\n _proto.getFrom = function getFrom(temporal) {\n return temporal.getLong(this);\n };\n\n _proto.toString = function toString() {\n return this.name();\n };\n\n _proto.equals = function equals(other) {\n return this === other;\n };\n\n _proto.adjustInto = function adjustInto(temporal, newValue) {\n return temporal.with(this, newValue);\n };\n\n _proto.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(this);\n };\n\n return ChronoField;\n}(TemporalField);\nfunction _init$3() {\n ChronoField.NANO_OF_SECOND = new ChronoField('NanoOfSecond', ChronoUnit.NANOS, ChronoUnit.SECONDS, ValueRange.of(0, 999999999));\n ChronoField.NANO_OF_DAY = new ChronoField('NanoOfDay', ChronoUnit.NANOS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000000 - 1));\n ChronoField.MICRO_OF_SECOND = new ChronoField('MicroOfSecond', ChronoUnit.MICROS, ChronoUnit.SECONDS, ValueRange.of(0, 999999));\n ChronoField.MICRO_OF_DAY = new ChronoField('MicroOfDay', ChronoUnit.MICROS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000 - 1));\n ChronoField.MILLI_OF_SECOND = new ChronoField('MilliOfSecond', ChronoUnit.MILLIS, ChronoUnit.SECONDS, ValueRange.of(0, 999));\n ChronoField.MILLI_OF_DAY = new ChronoField('MilliOfDay', ChronoUnit.MILLIS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000 - 1));\n ChronoField.SECOND_OF_MINUTE = new ChronoField('SecondOfMinute', ChronoUnit.SECONDS, ChronoUnit.MINUTES, ValueRange.of(0, 59));\n ChronoField.SECOND_OF_DAY = new ChronoField('SecondOfDay', ChronoUnit.SECONDS, ChronoUnit.DAYS, ValueRange.of(0, 86400 - 1));\n ChronoField.MINUTE_OF_HOUR = new ChronoField('MinuteOfHour', ChronoUnit.MINUTES, ChronoUnit.HOURS, ValueRange.of(0, 59));\n ChronoField.MINUTE_OF_DAY = new ChronoField('MinuteOfDay', ChronoUnit.MINUTES, ChronoUnit.DAYS, ValueRange.of(0, 24 * 60 - 1));\n ChronoField.HOUR_OF_AMPM = new ChronoField('HourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(0, 11));\n ChronoField.CLOCK_HOUR_OF_AMPM = new ChronoField('ClockHourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(1, 12));\n ChronoField.HOUR_OF_DAY = new ChronoField('HourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(0, 23));\n ChronoField.CLOCK_HOUR_OF_DAY = new ChronoField('ClockHourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(1, 24));\n ChronoField.AMPM_OF_DAY = new ChronoField('AmPmOfDay', ChronoUnit.HALF_DAYS, ChronoUnit.DAYS, ValueRange.of(0, 1));\n ChronoField.DAY_OF_WEEK = new ChronoField('DayOfWeek', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH = new ChronoField('AlignedDayOfWeekInMonth', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR = new ChronoField('AlignedDayOfWeekInYear', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n ChronoField.DAY_OF_MONTH = new ChronoField('DayOfMonth', ChronoUnit.DAYS, ChronoUnit.MONTHS, ValueRange.of(1, 28, 31), 'day');\n ChronoField.DAY_OF_YEAR = new ChronoField('DayOfYear', ChronoUnit.DAYS, ChronoUnit.YEARS, ValueRange.of(1, 365, 366));\n ChronoField.EPOCH_DAY = new ChronoField('EpochDay', ChronoUnit.DAYS, ChronoUnit.FOREVER, ValueRange.of(Math.floor(YearConstants.MIN_VALUE * 365.25), Math.floor(YearConstants.MAX_VALUE * 365.25)));\n ChronoField.ALIGNED_WEEK_OF_MONTH = new ChronoField('AlignedWeekOfMonth', ChronoUnit.WEEKS, ChronoUnit.MONTHS, ValueRange.of(1, 4, 5));\n ChronoField.ALIGNED_WEEK_OF_YEAR = new ChronoField('AlignedWeekOfYear', ChronoUnit.WEEKS, ChronoUnit.YEARS, ValueRange.of(1, 53));\n ChronoField.MONTH_OF_YEAR = new ChronoField('MonthOfYear', ChronoUnit.MONTHS, ChronoUnit.YEARS, ValueRange.of(1, 12), 'month');\n ChronoField.PROLEPTIC_MONTH = new ChronoField('ProlepticMonth', ChronoUnit.MONTHS, ChronoUnit.FOREVER, ValueRange.of(YearConstants.MIN_VALUE * 12, YearConstants.MAX_VALUE * 12 + 11));\n ChronoField.YEAR_OF_ERA = new ChronoField('YearOfEra', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(1, YearConstants.MAX_VALUE, YearConstants.MAX_VALUE + 1));\n ChronoField.YEAR = new ChronoField('Year', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(YearConstants.MIN_VALUE, YearConstants.MAX_VALUE), 'year');\n ChronoField.ERA = new ChronoField('Era', ChronoUnit.ERAS, ChronoUnit.FOREVER, ValueRange.of(0, 1));\n ChronoField.INSTANT_SECONDS = new ChronoField('InstantSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(MIN_SAFE_INTEGER, MAX_SAFE_INTEGER));\n ChronoField.OFFSET_SECONDS = new ChronoField('OffsetSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(-18 * 3600, 18 * 3600));\n}\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar TemporalQueries = function () {\n function TemporalQueries() {}\n\n TemporalQueries.zoneId = function zoneId() {\n return TemporalQueries.ZONE_ID;\n };\n\n TemporalQueries.chronology = function chronology() {\n return TemporalQueries.CHRONO;\n };\n\n TemporalQueries.precision = function precision() {\n return TemporalQueries.PRECISION;\n };\n\n TemporalQueries.zone = function zone() {\n return TemporalQueries.ZONE;\n };\n\n TemporalQueries.offset = function offset() {\n return TemporalQueries.OFFSET;\n };\n\n TemporalQueries.localDate = function localDate() {\n return TemporalQueries.LOCAL_DATE;\n };\n\n TemporalQueries.localTime = function localTime() {\n return TemporalQueries.LOCAL_TIME;\n };\n\n return TemporalQueries;\n}();\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar TemporalAccessor = function () {\n function TemporalAccessor() {}\n\n var _proto = TemporalAccessor.prototype;\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.zoneId() || _query === TemporalQueries.chronology() || _query === TemporalQueries.precision()) {\n return null;\n }\n\n return _query.queryFrom(this);\n };\n\n _proto.get = function get(field) {\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n if (this.isSupported(field)) {\n return field.range();\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n return TemporalAccessor;\n}();\n\nvar TemporalQuery = function (_Enum) {\n _inheritsLoose(TemporalQuery, _Enum);\n\n function TemporalQuery() {\n return _Enum.apply(this, arguments) || this;\n }\n\n var _proto = TemporalQuery.prototype;\n\n _proto.queryFrom = function queryFrom(temporal) {\n abstractMethodFail('queryFrom');\n };\n\n return TemporalQuery;\n}(Enum);\nfunction createTemporalQuery(name, queryFromFunction) {\n var ExtendedTemporalQuery = function (_TemporalQuery) {\n _inheritsLoose(ExtendedTemporalQuery, _TemporalQuery);\n\n function ExtendedTemporalQuery() {\n return _TemporalQuery.apply(this, arguments) || this;\n }\n\n return ExtendedTemporalQuery;\n }(TemporalQuery);\n\n ExtendedTemporalQuery.prototype.queryFrom = queryFromFunction;\n return new ExtendedTemporalQuery(name);\n}\n\nvar DayOfWeek = function (_TemporalAccessor) {\n _inheritsLoose(DayOfWeek, _TemporalAccessor);\n\n function DayOfWeek(ordinal, name) {\n var _this;\n\n _this = _TemporalAccessor.call(this) || this;\n _this._ordinal = ordinal;\n _this._name = name;\n return _this;\n }\n\n var _proto = DayOfWeek.prototype;\n\n _proto.ordinal = function ordinal() {\n return this._ordinal;\n };\n\n _proto.name = function name() {\n return this._name;\n };\n\n DayOfWeek.values = function values() {\n return ENUMS.slice();\n };\n\n DayOfWeek.valueOf = function valueOf(name) {\n var ordinal = 0;\n\n for (ordinal; ordinal < ENUMS.length; ordinal++) {\n if (ENUMS[ordinal].name() === name) {\n break;\n }\n }\n\n return DayOfWeek.of(ordinal + 1);\n };\n\n DayOfWeek.of = function of(dayOfWeek) {\n if (dayOfWeek < 1 || dayOfWeek > 7) {\n throw new DateTimeException('Invalid value for DayOfWeek: ' + dayOfWeek);\n }\n\n return ENUMS[dayOfWeek - 1];\n };\n\n DayOfWeek.from = function from(temporal) {\n assert(temporal != null, 'temporal', NullPointerException);\n\n if (temporal instanceof DayOfWeek) {\n return temporal;\n }\n\n try {\n return DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));\n } catch (ex) {\n if (ex instanceof DateTimeException) {\n throw new DateTimeException('Unable to obtain DayOfWeek from TemporalAccessor: ' + temporal + ', type ' + (temporal.constructor != null ? temporal.constructor.name : ''), ex);\n } else {\n throw ex;\n }\n }\n };\n\n _proto.value = function value() {\n return this._ordinal + 1;\n };\n\n _proto.displayName = function displayName(style, locale) {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented yet!');\n };\n\n _proto.isSupported = function isSupported(field) {\n if (field instanceof ChronoField) {\n return field === ChronoField.DAY_OF_WEEK;\n }\n\n return field != null && field.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return field.range();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.get = function get(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return this.value();\n }\n\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return this.value();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.plus = function plus(days) {\n var amount = MathUtil.floorMod(days, 7);\n return ENUMS[MathUtil.floorMod(this._ordinal + (amount + 7), 7)];\n };\n\n _proto.minus = function minus(days) {\n return this.plus(-1 * MathUtil.floorMod(days, 7));\n };\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.precision()) {\n return ChronoUnit.DAYS;\n } else if (_query === TemporalQueries.localDate() || _query === TemporalQueries.localTime() || _query === TemporalQueries.chronology() || _query === TemporalQueries.zone() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n assert(_query != null, 'query', NullPointerException);\n return _query.queryFrom(this);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n return temporal.with(ChronoField.DAY_OF_WEEK, this.value());\n };\n\n _proto.equals = function equals(other) {\n return this === other;\n };\n\n _proto.toString = function toString() {\n return this._name;\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, DayOfWeek, 'other');\n return this._ordinal - other._ordinal;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return DayOfWeek;\n}(TemporalAccessor);\nvar ENUMS;\nfunction _init$4() {\n DayOfWeek.MONDAY = new DayOfWeek(0, 'MONDAY');\n DayOfWeek.TUESDAY = new DayOfWeek(1, 'TUESDAY');\n DayOfWeek.WEDNESDAY = new DayOfWeek(2, 'WEDNESDAY');\n DayOfWeek.THURSDAY = new DayOfWeek(3, 'THURSDAY');\n DayOfWeek.FRIDAY = new DayOfWeek(4, 'FRIDAY');\n DayOfWeek.SATURDAY = new DayOfWeek(5, 'SATURDAY');\n DayOfWeek.SUNDAY = new DayOfWeek(6, 'SUNDAY');\n DayOfWeek.FROM = createTemporalQuery('DayOfWeek.FROM', function (temporal) {\n return DayOfWeek.from(temporal);\n });\n ENUMS = [DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY, DayOfWeek.THURSDAY, DayOfWeek.FRIDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY];\n}\n\nvar Month = function (_TemporalAccessor) {\n _inheritsLoose(Month, _TemporalAccessor);\n\n function Month(value, name) {\n var _this;\n\n _this = _TemporalAccessor.call(this) || this;\n _this._value = MathUtil.safeToInt(value);\n _this._name = name;\n return _this;\n }\n\n var _proto = Month.prototype;\n\n _proto.value = function value() {\n return this._value;\n };\n\n _proto.ordinal = function ordinal() {\n return this._value - 1;\n };\n\n _proto.name = function name() {\n return this._name;\n };\n\n _proto.displayName = function displayName(style, locale) {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented yet!');\n };\n\n _proto.isSupported = function isSupported(field) {\n if (null === field) {\n return false;\n }\n\n if (field instanceof ChronoField) {\n return field === ChronoField.MONTH_OF_YEAR;\n }\n\n return field != null && field.isSupportedBy(this);\n };\n\n _proto.get = function get(field) {\n if (field === ChronoField.MONTH_OF_YEAR) {\n return this.value();\n }\n\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field === ChronoField.MONTH_OF_YEAR) {\n return this.value();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.plus = function plus(months) {\n var amount = MathUtil.intMod(months, 12) + 12;\n var newMonthVal = MathUtil.intMod(this.value() + amount, 12);\n newMonthVal = newMonthVal === 0 ? 12 : newMonthVal;\n return Month.of(newMonthVal);\n };\n\n _proto.minus = function minus(months) {\n return this.plus(-1 * MathUtil.intMod(months, 12));\n };\n\n _proto.length = function length(leapYear) {\n switch (this) {\n case Month.FEBRUARY:\n return leapYear ? 29 : 28;\n\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n\n default:\n return 31;\n }\n };\n\n _proto.minLength = function minLength() {\n switch (this) {\n case Month.FEBRUARY:\n return 28;\n\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n\n default:\n return 31;\n }\n };\n\n _proto.maxLength = function maxLength() {\n switch (this) {\n case Month.FEBRUARY:\n return 29;\n\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n\n default:\n return 31;\n }\n };\n\n _proto.firstDayOfYear = function firstDayOfYear(leapYear) {\n var leap = leapYear ? 1 : 0;\n\n switch (this) {\n case Month.JANUARY:\n return 1;\n\n case Month.FEBRUARY:\n return 32;\n\n case Month.MARCH:\n return 60 + leap;\n\n case Month.APRIL:\n return 91 + leap;\n\n case Month.MAY:\n return 121 + leap;\n\n case Month.JUNE:\n return 152 + leap;\n\n case Month.JULY:\n return 182 + leap;\n\n case Month.AUGUST:\n return 213 + leap;\n\n case Month.SEPTEMBER:\n return 244 + leap;\n\n case Month.OCTOBER:\n return 274 + leap;\n\n case Month.NOVEMBER:\n return 305 + leap;\n\n case Month.DECEMBER:\n default:\n return 335 + leap;\n }\n };\n\n _proto.firstMonthOfQuarter = function firstMonthOfQuarter() {\n switch (this) {\n case Month.JANUARY:\n case Month.FEBRUARY:\n case Month.MARCH:\n return Month.JANUARY;\n\n case Month.APRIL:\n case Month.MAY:\n case Month.JUNE:\n return Month.APRIL;\n\n case Month.JULY:\n case Month.AUGUST:\n case Month.SEPTEMBER:\n return Month.JULY;\n\n case Month.OCTOBER:\n case Month.NOVEMBER:\n case Month.DECEMBER:\n default:\n return Month.OCTOBER;\n }\n };\n\n _proto.query = function query(_query) {\n assert(_query != null, 'query() parameter must not be null', DateTimeException);\n\n if (_query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.MONTHS;\n }\n\n return _TemporalAccessor.prototype.query.call(this, _query);\n };\n\n _proto.toString = function toString() {\n switch (this) {\n case Month.JANUARY:\n return 'JANUARY';\n\n case Month.FEBRUARY:\n return 'FEBRUARY';\n\n case Month.MARCH:\n return 'MARCH';\n\n case Month.APRIL:\n return 'APRIL';\n\n case Month.MAY:\n return 'MAY';\n\n case Month.JUNE:\n return 'JUNE';\n\n case Month.JULY:\n return 'JULY';\n\n case Month.AUGUST:\n return 'AUGUST';\n\n case Month.SEPTEMBER:\n return 'SEPTEMBER';\n\n case Month.OCTOBER:\n return 'OCTOBER';\n\n case Month.NOVEMBER:\n return 'NOVEMBER';\n\n case Month.DECEMBER:\n return 'DECEMBER';\n\n default:\n return 'unknown Month, value: ' + this.value();\n }\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.MONTH_OF_YEAR, this.value());\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, Month, 'other');\n return this._value - other._value;\n };\n\n _proto.equals = function equals(other) {\n return this === other;\n };\n\n Month.valueOf = function valueOf(name) {\n var ordinal = 0;\n\n for (ordinal; ordinal < MONTHS.length; ordinal++) {\n if (MONTHS[ordinal].name() === name) {\n break;\n }\n }\n\n return Month.of(ordinal + 1);\n };\n\n Month.values = function values() {\n return MONTHS.slice();\n };\n\n Month.of = function of(month) {\n if (month < 1 || month > 12) {\n assert(false, 'Invalid value for MonthOfYear: ' + month, DateTimeException);\n }\n\n return MONTHS[month - 1];\n };\n\n Month.from = function from(temporal) {\n if (temporal instanceof Month) {\n return temporal;\n }\n\n try {\n return Month.of(temporal.get(ChronoField.MONTH_OF_YEAR));\n } catch (ex) {\n throw new DateTimeException('Unable to obtain Month from TemporalAccessor: ' + temporal + ' of type ' + (temporal && temporal.constructor != null ? temporal.constructor.name : ''), ex);\n }\n };\n\n return Month;\n}(TemporalAccessor);\nvar MONTHS;\nfunction _init$5() {\n Month.JANUARY = new Month(1, 'JANUARY');\n Month.FEBRUARY = new Month(2, 'FEBRUARY');\n Month.MARCH = new Month(3, 'MARCH');\n Month.APRIL = new Month(4, 'APRIL');\n Month.MAY = new Month(5, 'MAY');\n Month.JUNE = new Month(6, 'JUNE');\n Month.JULY = new Month(7, 'JULY');\n Month.AUGUST = new Month(8, 'AUGUST');\n Month.SEPTEMBER = new Month(9, 'SEPTEMBER');\n Month.OCTOBER = new Month(10, 'OCTOBER');\n Month.NOVEMBER = new Month(11, 'NOVEMBER');\n Month.DECEMBER = new Month(12, 'DECEMBER');\n MONTHS = [Month.JANUARY, Month.FEBRUARY, Month.MARCH, Month.APRIL, Month.MAY, Month.JUNE, Month.JULY, Month.AUGUST, Month.SEPTEMBER, Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER];\n}\n\nvar PATTERN = /([-+]?)P(?:([-+]?[0-9]+)Y)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)W)?(?:([-+]?[0-9]+)D)?/;\nvar Period = function (_TemporalAmount) {\n _inheritsLoose(Period, _TemporalAmount);\n\n function Period(years, months, days) {\n var _this;\n\n _this = _TemporalAmount.call(this) || this;\n\n var _years = MathUtil.safeToInt(years);\n\n var _months = MathUtil.safeToInt(months);\n\n var _days = MathUtil.safeToInt(days);\n\n if (_years === 0 && _months === 0 && _days === 0) {\n if (!Period.ZERO) {\n _this._years = _years;\n _this._months = _months;\n _this._days = _days;\n Period.ZERO = _assertThisInitialized(_this);\n }\n\n return Period.ZERO || _assertThisInitialized(_this);\n }\n\n _this._years = _years;\n _this._months = _months;\n _this._days = _days;\n return _this;\n }\n\n Period.ofYears = function ofYears(years) {\n return Period.create(years, 0, 0);\n };\n\n Period.ofMonths = function ofMonths(months) {\n return Period.create(0, months, 0);\n };\n\n Period.ofWeeks = function ofWeeks(weeks) {\n return Period.create(0, 0, MathUtil.safeMultiply(weeks, 7));\n };\n\n Period.ofDays = function ofDays(days) {\n return Period.create(0, 0, days);\n };\n\n Period.of = function of(years, months, days) {\n return Period.create(years, months, days);\n };\n\n Period.from = function from(amount) {\n if (amount instanceof Period) {\n return amount;\n }\n\n requireNonNull(amount, 'amount');\n var years = 0;\n var months = 0;\n var days = 0;\n var units = amount.units();\n\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n var unitAmount = amount.get(unit);\n\n if (unit === ChronoUnit.YEARS) {\n years = MathUtil.safeToInt(unitAmount);\n } else if (unit === ChronoUnit.MONTHS) {\n months = MathUtil.safeToInt(unitAmount);\n } else if (unit === ChronoUnit.DAYS) {\n days = MathUtil.safeToInt(unitAmount);\n } else {\n throw new DateTimeException('Unit must be Years, Months or Days, but was ' + unit);\n }\n }\n\n return Period.create(years, months, days);\n };\n\n Period.between = function between(startDate, endDate) {\n requireNonNull(startDate, 'startDate');\n requireNonNull(endDate, 'endDate');\n requireInstance(startDate, LocalDate, 'startDate');\n requireInstance(endDate, LocalDate, 'endDate');\n return startDate.until(endDate);\n };\n\n Period.parse = function parse(text) {\n requireNonNull(text, 'text');\n\n try {\n return Period._parse(text);\n } catch (ex) {\n if (ex instanceof ArithmeticException) {\n throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0, ex);\n } else {\n throw ex;\n }\n }\n };\n\n Period._parse = function _parse(text) {\n var matches = PATTERN.exec(text);\n\n if (matches != null) {\n var negate = '-' === matches[1] ? -1 : 1;\n var yearMatch = matches[2];\n var monthMatch = matches[3];\n var weekMatch = matches[4];\n var dayMatch = matches[5];\n\n if (yearMatch != null || monthMatch != null || weekMatch != null || dayMatch != null) {\n var years = Period._parseNumber(text, yearMatch, negate);\n\n var months = Period._parseNumber(text, monthMatch, negate);\n\n var weeks = Period._parseNumber(text, weekMatch, negate);\n\n var days = Period._parseNumber(text, dayMatch, negate);\n\n days = MathUtil.safeAdd(days, MathUtil.safeMultiply(weeks, 7));\n return Period.create(years, months, days);\n }\n }\n\n throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0);\n };\n\n Period._parseNumber = function _parseNumber(text, str, negate) {\n if (str == null) {\n return 0;\n }\n\n var val = MathUtil.parseInt(str);\n return MathUtil.safeMultiply(val, negate);\n };\n\n Period.create = function create(years, months, days) {\n return new Period(years, months, days);\n };\n\n var _proto = Period.prototype;\n\n _proto.units = function units() {\n return [ChronoUnit.YEARS, ChronoUnit.MONTHS, ChronoUnit.DAYS];\n };\n\n _proto.chronology = function chronology() {\n return IsoChronology.INSTANCE;\n };\n\n _proto.get = function get(unit) {\n if (unit === ChronoUnit.YEARS) {\n return this._years;\n }\n\n if (unit === ChronoUnit.MONTHS) {\n return this._months;\n }\n\n if (unit === ChronoUnit.DAYS) {\n return this._days;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n };\n\n _proto.isZero = function isZero() {\n return this === Period.ZERO;\n };\n\n _proto.isNegative = function isNegative() {\n return this._years < 0 || this._months < 0 || this._days < 0;\n };\n\n _proto.years = function years() {\n return this._years;\n };\n\n _proto.months = function months() {\n return this._months;\n };\n\n _proto.days = function days() {\n return this._days;\n };\n\n _proto.withYears = function withYears(years) {\n if (years === this._years) {\n return this;\n }\n\n return Period.create(years, this._months, this._days);\n };\n\n _proto.withMonths = function withMonths(months) {\n if (months === this._months) {\n return this;\n }\n\n return Period.create(this._years, months, this._days);\n };\n\n _proto.withDays = function withDays(days) {\n if (days === this._days) {\n return this;\n }\n\n return Period.create(this._years, this._months, days);\n };\n\n _proto.plus = function plus(amountToAdd) {\n var amount = Period.from(amountToAdd);\n return Period.create(MathUtil.safeAdd(this._years, amount._years), MathUtil.safeAdd(this._months, amount._months), MathUtil.safeAdd(this._days, amount._days));\n };\n\n _proto.plusYears = function plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n\n return Period.create(MathUtil.safeToInt(MathUtil.safeAdd(this._years, yearsToAdd)), this._months, this._days);\n };\n\n _proto.plusMonths = function plusMonths(monthsToAdd) {\n if (monthsToAdd === 0) {\n return this;\n }\n\n return Period.create(this._years, MathUtil.safeToInt(MathUtil.safeAdd(this._months, monthsToAdd)), this._days);\n };\n\n _proto.plusDays = function plusDays(daysToAdd) {\n if (daysToAdd === 0) {\n return this;\n }\n\n return Period.create(this._years, this._months, MathUtil.safeToInt(MathUtil.safeAdd(this._days, daysToAdd)));\n };\n\n _proto.minus = function minus(amountToSubtract) {\n var amount = Period.from(amountToSubtract);\n return Period.create(MathUtil.safeSubtract(this._years, amount._years), MathUtil.safeSubtract(this._months, amount._months), MathUtil.safeSubtract(this._days, amount._days));\n };\n\n _proto.minusYears = function minusYears(yearsToSubtract) {\n return this.plusYears(-1 * yearsToSubtract);\n };\n\n _proto.minusMonths = function minusMonths(monthsToSubtract) {\n return this.plusMonths(-1 * monthsToSubtract);\n };\n\n _proto.minusDays = function minusDays(daysToSubtract) {\n return this.plusDays(-1 * daysToSubtract);\n };\n\n _proto.multipliedBy = function multipliedBy(scalar) {\n if (this === Period.ZERO || scalar === 1) {\n return this;\n }\n\n return Period.create(MathUtil.safeMultiply(this._years, scalar), MathUtil.safeMultiply(this._months, scalar), MathUtil.safeMultiply(this._days, scalar));\n };\n\n _proto.negated = function negated() {\n return this.multipliedBy(-1);\n };\n\n _proto.normalized = function normalized() {\n var totalMonths = this.toTotalMonths();\n var splitYears = MathUtil.intDiv(totalMonths, 12);\n var splitMonths = MathUtil.intMod(totalMonths, 12);\n\n if (splitYears === this._years && splitMonths === this._months) {\n return this;\n }\n\n return Period.create(MathUtil.safeToInt(splitYears), splitMonths, this._days);\n };\n\n _proto.toTotalMonths = function toTotalMonths() {\n return this._years * 12 + this._months;\n };\n\n _proto.addTo = function addTo(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (this._years !== 0) {\n if (this._months !== 0) {\n temporal = temporal.plus(this.toTotalMonths(), ChronoUnit.MONTHS);\n } else {\n temporal = temporal.plus(this._years, ChronoUnit.YEARS);\n }\n } else if (this._months !== 0) {\n temporal = temporal.plus(this._months, ChronoUnit.MONTHS);\n }\n\n if (this._days !== 0) {\n temporal = temporal.plus(this._days, ChronoUnit.DAYS);\n }\n\n return temporal;\n };\n\n _proto.subtractFrom = function subtractFrom(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (this._years !== 0) {\n if (this._months !== 0) {\n temporal = temporal.minus(this.toTotalMonths(), ChronoUnit.MONTHS);\n } else {\n temporal = temporal.minus(this._years, ChronoUnit.YEARS);\n }\n } else if (this._months !== 0) {\n temporal = temporal.minus(this._months, ChronoUnit.MONTHS);\n }\n\n if (this._days !== 0) {\n temporal = temporal.minus(this._days, ChronoUnit.DAYS);\n }\n\n return temporal;\n };\n\n _proto.equals = function equals(obj) {\n if (this === obj) {\n return true;\n }\n\n if (obj instanceof Period) {\n var other = obj;\n return this._years === other._years && this._months === other._months && this._days === other._days;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return MathUtil.hashCode(this._years, this._months, this._days);\n };\n\n _proto.toString = function toString() {\n if (this === Period.ZERO) {\n return 'P0D';\n } else {\n var buf = 'P';\n\n if (this._years !== 0) {\n buf += '' + this._years + 'Y';\n }\n\n if (this._months !== 0) {\n buf += '' + this._months + 'M';\n }\n\n if (this._days !== 0) {\n buf += '' + this._days + 'D';\n }\n\n return buf;\n }\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return Period;\n}(TemporalAmount);\nfunction _init$6() {\n Period.ofDays(0);\n}\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ParsePosition = function () {\n function ParsePosition(index) {\n this._index = index;\n this._errorIndex = -1;\n }\n\n var _proto = ParsePosition.prototype;\n\n _proto.getIndex = function getIndex() {\n return this._index;\n };\n\n _proto.setIndex = function setIndex(index) {\n this._index = index;\n };\n\n _proto.getErrorIndex = function getErrorIndex() {\n return this._errorIndex;\n };\n\n _proto.setErrorIndex = function setErrorIndex(errorIndex) {\n this._errorIndex = errorIndex;\n };\n\n return ParsePosition;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar EnumMap = function () {\n function EnumMap() {\n this._map = {};\n }\n\n var _proto = EnumMap.prototype;\n\n _proto.putAll = function putAll(otherMap) {\n for (var key in otherMap._map) {\n this._map[key] = otherMap._map[key];\n }\n\n return this;\n };\n\n _proto.containsKey = function containsKey(key) {\n return this._map.hasOwnProperty(key.name()) && this.get(key) !== undefined;\n };\n\n _proto.get = function get(key) {\n return this._map[key.name()];\n };\n\n _proto.put = function put(key, val) {\n return this.set(key, val);\n };\n\n _proto.set = function set(key, val) {\n this._map[key.name()] = val;\n return this;\n };\n\n _proto.retainAll = function retainAll(keyList) {\n var map = {};\n\n for (var i = 0; i < keyList.length; i++) {\n var key = keyList[i].name();\n map[key] = this._map[key];\n }\n\n this._map = map;\n return this;\n };\n\n _proto.remove = function remove(key) {\n var keyName = key.name();\n var val = this._map[keyName];\n this._map[keyName] = undefined;\n return val;\n };\n\n _proto.keySet = function keySet() {\n return this._map;\n };\n\n _proto.clear = function clear() {\n this._map = {};\n };\n\n return EnumMap;\n}();\n\nvar ResolverStyle = function (_Enum) {\n _inheritsLoose(ResolverStyle, _Enum);\n\n function ResolverStyle() {\n return _Enum.apply(this, arguments) || this;\n }\n\n return ResolverStyle;\n}(Enum);\nResolverStyle.STRICT = new ResolverStyle('STRICT');\nResolverStyle.SMART = new ResolverStyle('SMART');\nResolverStyle.LENIENT = new ResolverStyle('LENIENT');\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar TemporalAdjuster = function () {\n function TemporalAdjuster() {}\n\n var _proto = TemporalAdjuster.prototype;\n\n _proto.adjustInto = function adjustInto(temporal) {\n abstractMethodFail('adjustInto');\n };\n\n return TemporalAdjuster;\n}();\n\nvar Temporal = function (_TemporalAccessor) {\n _inheritsLoose(Temporal, _TemporalAccessor);\n\n function Temporal() {\n return _TemporalAccessor.apply(this, arguments) || this;\n }\n\n var _proto = Temporal.prototype;\n\n _proto.isSupported = function isSupported(unit) {\n abstractMethodFail('isSupported');\n };\n\n _proto.minus = function minus(p1, p2) {\n if (arguments.length < 2) {\n return this.minusAmount(p1);\n } else {\n return this.minusAmountUnit(p1, p2);\n }\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n abstractMethodFail('minusAmount');\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n abstractMethodFail('minusAmountUnit');\n };\n\n _proto.plus = function plus(p1, p2) {\n if (arguments.length < 2) {\n return this.plusAmount(p1);\n } else {\n return this.plusAmountUnit(p1, p2);\n }\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n abstractMethodFail('plusAmount');\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n abstractMethodFail('plusAmountUnit');\n };\n\n _proto.until = function until(endTemporal, unit) {\n abstractMethodFail('until');\n };\n\n _proto.with = function _with(p1, p2) {\n if (arguments.length < 2) {\n return this.withAdjuster(p1);\n } else {\n return this.withFieldValue(p1, p2);\n }\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n abstractMethodFail('withAdjuster');\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n abstractMethodFail('withFieldValue');\n };\n\n return Temporal;\n}(TemporalAccessor);\n\nvar DefaultInterfaceTemporal = function (_Temporal) {\n _inheritsLoose(DefaultInterfaceTemporal, _Temporal);\n\n function DefaultInterfaceTemporal() {\n return _Temporal.apply(this, arguments) || this;\n }\n\n var _proto = DefaultInterfaceTemporal.prototype;\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n requireInstance(adjuster, TemporalAdjuster, 'adjuster');\n return adjuster.adjustInto(this);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(amountToSubtract, 'amountToSubtract');\n requireNonNull(unit, 'unit');\n requireInstance(unit, TemporalUnit, 'unit');\n return amountToSubtract === MIN_SAFE_INTEGER ? this.plusAmountUnit(MAX_SAFE_INTEGER, unit).plusAmountUnit(1, unit) : this.plusAmount(-amountToSubtract, unit);\n };\n\n return DefaultInterfaceTemporal;\n}(Temporal);\n\nvar ChronoLocalDate = function (_DefaultInterfaceTemp) {\n _inheritsLoose(ChronoLocalDate, _DefaultInterfaceTemp);\n\n function ChronoLocalDate() {\n return _DefaultInterfaceTemp.apply(this, arguments) || this;\n }\n\n var _proto = ChronoLocalDate.prototype;\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isDateBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.chronology()) {\n return this.chronology();\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.DAYS;\n } else if (_query === TemporalQueries.localDate()) {\n return LocalDate.ofEpochDay(this.toEpochDay());\n } else if (_query === TemporalQueries.localTime() || _query === TemporalQueries.zone() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n return _DefaultInterfaceTemp.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.EPOCH_DAY, this.toEpochDay());\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return formatter.format(this);\n };\n\n return ChronoLocalDate;\n}(DefaultInterfaceTemporal);\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar StringUtil = function () {\n function StringUtil() {}\n\n StringUtil.startsWith = function startsWith(text, pattern) {\n return text.indexOf(pattern) === 0;\n };\n\n StringUtil.hashCode = function hashCode(text) {\n var len = text.length;\n\n if (len === 0) {\n return 0;\n }\n\n var hash = 0;\n\n for (var i = 0; i < len; i++) {\n var chr = text.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n\n return MathUtil.smi(hash);\n };\n\n return StringUtil;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ZoneId = function () {\n function ZoneId() {}\n\n ZoneId.systemDefault = function systemDefault() {\n throw new DateTimeException('not supported operation');\n };\n\n ZoneId.getAvailableZoneIds = function getAvailableZoneIds() {\n throw new DateTimeException('not supported operation');\n };\n\n ZoneId.of = function of(zoneId) {\n throw new DateTimeException('not supported operation' + zoneId);\n };\n\n ZoneId.ofOffset = function ofOffset(prefix, offset) {\n throw new DateTimeException('not supported operation' + prefix + offset);\n };\n\n ZoneId.from = function from(temporal) {\n throw new DateTimeException('not supported operation' + temporal);\n };\n\n var _proto = ZoneId.prototype;\n\n _proto.id = function id() {\n abstractMethodFail('ZoneId.id');\n };\n\n _proto.rules = function rules() {\n abstractMethodFail('ZoneId.rules');\n };\n\n _proto.normalized = function normalized() {\n var rules = this.rules();\n\n if (rules.isFixedOffset()) {\n return rules.offset(Instant.EPOCH);\n }\n\n return this;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof ZoneId) {\n return this.id() === other.id();\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return StringUtil.hashCode(this.id());\n };\n\n _proto.toString = function toString() {\n return this.id();\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return ZoneId;\n}();\n\nvar ZoneRules = function () {\n function ZoneRules() {}\n\n ZoneRules.of = function of(offset) {\n requireNonNull(offset, 'offset');\n return new Fixed(offset);\n };\n\n var _proto = ZoneRules.prototype;\n\n _proto.isFixedOffset = function isFixedOffset() {\n abstractMethodFail('ZoneRules.isFixedOffset');\n };\n\n _proto.offset = function offset(instantOrLocalDateTime) {\n if (instantOrLocalDateTime instanceof Instant) {\n return this.offsetOfInstant(instantOrLocalDateTime);\n } else {\n return this.offsetOfLocalDateTime(instantOrLocalDateTime);\n }\n };\n\n _proto.offsetOfInstant = function offsetOfInstant(instant) {\n abstractMethodFail('ZoneRules.offsetInstant');\n };\n\n _proto.offsetOfEpochMilli = function offsetOfEpochMilli(epochMilli) {\n abstractMethodFail('ZoneRules.offsetOfEpochMilli');\n };\n\n _proto.offsetOfLocalDateTime = function offsetOfLocalDateTime(localDateTime) {\n abstractMethodFail('ZoneRules.offsetLocalDateTime');\n };\n\n _proto.validOffsets = function validOffsets(localDateTime) {\n abstractMethodFail('ZoneRules.validOffsets');\n };\n\n _proto.transition = function transition(localDateTime) {\n abstractMethodFail('ZoneRules.transition');\n };\n\n _proto.standardOffset = function standardOffset(instant) {\n abstractMethodFail('ZoneRules.standardOffset');\n };\n\n _proto.daylightSavings = function daylightSavings(instant) {\n abstractMethodFail('ZoneRules.daylightSavings');\n };\n\n _proto.isDaylightSavings = function isDaylightSavings(instant) {\n abstractMethodFail('ZoneRules.isDaylightSavings');\n };\n\n _proto.isValidOffset = function isValidOffset(localDateTime, offset) {\n abstractMethodFail('ZoneRules.isValidOffset');\n };\n\n _proto.nextTransition = function nextTransition(instant) {\n abstractMethodFail('ZoneRules.nextTransition');\n };\n\n _proto.previousTransition = function previousTransition(instant) {\n abstractMethodFail('ZoneRules.previousTransition');\n };\n\n _proto.transitions = function transitions() {\n abstractMethodFail('ZoneRules.transitions');\n };\n\n _proto.transitionRules = function transitionRules() {\n abstractMethodFail('ZoneRules.transitionRules');\n };\n\n _proto.toString = function toString() {\n abstractMethodFail('ZoneRules.toString');\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return ZoneRules;\n}();\n\nvar Fixed = function (_ZoneRules) {\n _inheritsLoose(Fixed, _ZoneRules);\n\n function Fixed(offset) {\n var _this;\n\n _this = _ZoneRules.call(this) || this;\n _this._offset = offset;\n return _this;\n }\n\n var _proto2 = Fixed.prototype;\n\n _proto2.isFixedOffset = function isFixedOffset() {\n return true;\n };\n\n _proto2.offsetOfInstant = function offsetOfInstant() {\n return this._offset;\n };\n\n _proto2.offsetOfEpochMilli = function offsetOfEpochMilli() {\n return this._offset;\n };\n\n _proto2.offsetOfLocalDateTime = function offsetOfLocalDateTime() {\n return this._offset;\n };\n\n _proto2.validOffsets = function validOffsets() {\n return [this._offset];\n };\n\n _proto2.transition = function transition() {\n return null;\n };\n\n _proto2.standardOffset = function standardOffset() {\n return this._offset;\n };\n\n _proto2.daylightSavings = function daylightSavings() {\n return Duration.ZERO;\n };\n\n _proto2.isDaylightSavings = function isDaylightSavings() {\n return false;\n };\n\n _proto2.isValidOffset = function isValidOffset(localDateTime, offset) {\n return this._offset.equals(offset);\n };\n\n _proto2.nextTransition = function nextTransition() {\n return null;\n };\n\n _proto2.previousTransition = function previousTransition() {\n return null;\n };\n\n _proto2.transitions = function transitions() {\n return [];\n };\n\n _proto2.transitionRules = function transitionRules() {\n return [];\n };\n\n _proto2.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof Fixed) {\n return this._offset.equals(other._offset);\n }\n\n return false;\n };\n\n _proto2.toString = function toString() {\n return 'FixedRules:' + this._offset.toString();\n };\n\n return Fixed;\n}(ZoneRules);\n\nvar SECONDS_CACHE = {};\nvar ID_CACHE = {};\nvar ZoneOffset = function (_ZoneId) {\n _inheritsLoose(ZoneOffset, _ZoneId);\n\n function ZoneOffset(totalSeconds) {\n var _this;\n\n _this = _ZoneId.call(this) || this;\n\n ZoneOffset._validateTotalSeconds(totalSeconds);\n\n _this._totalSeconds = MathUtil.safeToInt(totalSeconds);\n _this._rules = ZoneRules.of(_assertThisInitialized(_this));\n _this._id = ZoneOffset._buildId(totalSeconds);\n return _this;\n }\n\n var _proto = ZoneOffset.prototype;\n\n _proto.totalSeconds = function totalSeconds() {\n return this._totalSeconds;\n };\n\n _proto.id = function id() {\n return this._id;\n };\n\n ZoneOffset._buildId = function _buildId(totalSeconds) {\n if (totalSeconds === 0) {\n return 'Z';\n } else {\n var absTotalSeconds = Math.abs(totalSeconds);\n var absHours = MathUtil.intDiv(absTotalSeconds, LocalTime.SECONDS_PER_HOUR);\n var absMinutes = MathUtil.intMod(MathUtil.intDiv(absTotalSeconds, LocalTime.SECONDS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n var buf = '' + (totalSeconds < 0 ? '-' : '+') + (absHours < 10 ? '0' : '') + absHours + (absMinutes < 10 ? ':0' : ':') + absMinutes;\n var absSeconds = MathUtil.intMod(absTotalSeconds, LocalTime.SECONDS_PER_MINUTE);\n\n if (absSeconds !== 0) {\n buf += (absSeconds < 10 ? ':0' : ':') + absSeconds;\n }\n\n return buf;\n }\n };\n\n ZoneOffset._validateTotalSeconds = function _validateTotalSeconds(totalSeconds) {\n if (Math.abs(totalSeconds) > ZoneOffset.MAX_SECONDS) {\n throw new DateTimeException('Zone offset not in valid range: -18:00 to +18:00');\n }\n };\n\n ZoneOffset._validate = function _validate(hours, minutes, seconds) {\n if (hours < -18 || hours > 18) {\n throw new DateTimeException('Zone offset hours not in valid range: value ' + hours + ' is not in the range -18 to 18');\n }\n\n if (hours > 0) {\n if (minutes < 0 || seconds < 0) {\n throw new DateTimeException('Zone offset minutes and seconds must be positive because hours is positive');\n }\n } else if (hours < 0) {\n if (minutes > 0 || seconds > 0) {\n throw new DateTimeException('Zone offset minutes and seconds must be negative because hours is negative');\n }\n } else if (minutes > 0 && seconds < 0 || minutes < 0 && seconds > 0) {\n throw new DateTimeException('Zone offset minutes and seconds must have the same sign');\n }\n\n if (Math.abs(minutes) > 59) {\n throw new DateTimeException('Zone offset minutes not in valid range: abs(value) ' + Math.abs(minutes) + ' is not in the range 0 to 59');\n }\n\n if (Math.abs(seconds) > 59) {\n throw new DateTimeException('Zone offset seconds not in valid range: abs(value) ' + Math.abs(seconds) + ' is not in the range 0 to 59');\n }\n\n if (Math.abs(hours) === 18 && (Math.abs(minutes) > 0 || Math.abs(seconds) > 0)) {\n throw new DateTimeException('Zone offset not in valid range: -18:00 to +18:00');\n }\n };\n\n ZoneOffset.of = function of(offsetId) {\n requireNonNull(offsetId, 'offsetId');\n var offset = ID_CACHE[offsetId];\n\n if (offset != null) {\n return offset;\n }\n\n var hours, minutes, seconds;\n\n switch (offsetId.length) {\n case 2:\n offsetId = offsetId[0] + '0' + offsetId[1];\n\n case 3:\n hours = ZoneOffset._parseNumber(offsetId, 1, false);\n minutes = 0;\n seconds = 0;\n break;\n\n case 5:\n hours = ZoneOffset._parseNumber(offsetId, 1, false);\n minutes = ZoneOffset._parseNumber(offsetId, 3, false);\n seconds = 0;\n break;\n\n case 6:\n hours = ZoneOffset._parseNumber(offsetId, 1, false);\n minutes = ZoneOffset._parseNumber(offsetId, 4, true);\n seconds = 0;\n break;\n\n case 7:\n hours = ZoneOffset._parseNumber(offsetId, 1, false);\n minutes = ZoneOffset._parseNumber(offsetId, 3, false);\n seconds = ZoneOffset._parseNumber(offsetId, 5, false);\n break;\n\n case 9:\n hours = ZoneOffset._parseNumber(offsetId, 1, false);\n minutes = ZoneOffset._parseNumber(offsetId, 4, true);\n seconds = ZoneOffset._parseNumber(offsetId, 7, true);\n break;\n\n default:\n throw new DateTimeException('Invalid ID for ZoneOffset, invalid format: ' + offsetId);\n }\n\n var first = offsetId[0];\n\n if (first !== '+' && first !== '-') {\n throw new DateTimeException('Invalid ID for ZoneOffset, plus/minus not found when expected: ' + offsetId);\n }\n\n if (first === '-') {\n return ZoneOffset.ofHoursMinutesSeconds(-hours, -minutes, -seconds);\n } else {\n return ZoneOffset.ofHoursMinutesSeconds(hours, minutes, seconds);\n }\n };\n\n ZoneOffset._parseNumber = function _parseNumber(offsetId, pos, precededByColon) {\n if (precededByColon && offsetId[pos - 1] !== ':') {\n throw new DateTimeException('Invalid ID for ZoneOffset, colon not found when expected: ' + offsetId);\n }\n\n var ch1 = offsetId[pos];\n var ch2 = offsetId[pos + 1];\n\n if (ch1 < '0' || ch1 > '9' || ch2 < '0' || ch2 > '9') {\n throw new DateTimeException('Invalid ID for ZoneOffset, non numeric characters found: ' + offsetId);\n }\n\n return (ch1.charCodeAt(0) - 48) * 10 + (ch2.charCodeAt(0) - 48);\n };\n\n ZoneOffset.ofHours = function ofHours(hours) {\n return ZoneOffset.ofHoursMinutesSeconds(hours, 0, 0);\n };\n\n ZoneOffset.ofHoursMinutes = function ofHoursMinutes(hours, minutes) {\n return ZoneOffset.ofHoursMinutesSeconds(hours, minutes, 0);\n };\n\n ZoneOffset.ofHoursMinutesSeconds = function ofHoursMinutesSeconds(hours, minutes, seconds) {\n ZoneOffset._validate(hours, minutes, seconds);\n\n var totalSeconds = hours * LocalTime.SECONDS_PER_HOUR + minutes * LocalTime.SECONDS_PER_MINUTE + seconds;\n return ZoneOffset.ofTotalSeconds(totalSeconds);\n };\n\n ZoneOffset.ofTotalMinutes = function ofTotalMinutes(totalMinutes) {\n var totalSeconds = totalMinutes * LocalTime.SECONDS_PER_MINUTE;\n return ZoneOffset.ofTotalSeconds(totalSeconds);\n };\n\n ZoneOffset.ofTotalSeconds = function ofTotalSeconds(totalSeconds) {\n if (totalSeconds % (15 * LocalTime.SECONDS_PER_MINUTE) === 0) {\n var totalSecs = totalSeconds;\n var result = SECONDS_CACHE[totalSecs];\n\n if (result == null) {\n result = new ZoneOffset(totalSeconds);\n SECONDS_CACHE[totalSecs] = result;\n ID_CACHE[result.id()] = result;\n }\n\n return result;\n } else {\n return new ZoneOffset(totalSeconds);\n }\n };\n\n _proto.rules = function rules() {\n return this._rules;\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field === ChronoField.OFFSET_SECONDS) {\n return this._totalSeconds;\n } else if (field instanceof ChronoField) {\n throw new DateTimeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.offset() || _query === TemporalQueries.zone()) {\n return this;\n } else if (_query === TemporalQueries.localDate() || _query === TemporalQueries.localTime() || _query === TemporalQueries.precision() || _query === TemporalQueries.chronology() || _query === TemporalQueries.zoneId()) {\n return null;\n }\n\n return _query.queryFrom(this);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.OFFSET_SECONDS, this._totalSeconds);\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n return other._totalSeconds - this._totalSeconds;\n };\n\n _proto.equals = function equals(obj) {\n if (this === obj) {\n return true;\n }\n\n if (obj instanceof ZoneOffset) {\n return this._totalSeconds === obj._totalSeconds;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._totalSeconds;\n };\n\n _proto.toString = function toString() {\n return this._id;\n };\n\n return ZoneOffset;\n}(ZoneId);\nfunction _init$7() {\n ZoneOffset.MAX_SECONDS = 18 * LocalTime.SECONDS_PER_HOUR;\n ZoneOffset.UTC = ZoneOffset.ofTotalSeconds(0);\n ZoneOffset.MIN = ZoneOffset.ofTotalSeconds(-ZoneOffset.MAX_SECONDS);\n ZoneOffset.MAX = ZoneOffset.ofTotalSeconds(ZoneOffset.MAX_SECONDS);\n}\n\nvar DateTimeBuilder = function (_TemporalAccessor) {\n _inheritsLoose(DateTimeBuilder, _TemporalAccessor);\n\n DateTimeBuilder.create = function create(field, value) {\n var dtb = new DateTimeBuilder();\n\n dtb._addFieldValue(field, value);\n\n return dtb;\n };\n\n function DateTimeBuilder() {\n var _this;\n\n _this = _TemporalAccessor.call(this) || this;\n _this.fieldValues = new EnumMap();\n _this.chrono = null;\n _this.zone = null;\n _this.date = null;\n _this.time = null;\n _this.leapSecond = false;\n _this.excessDays = null;\n return _this;\n }\n\n var _proto = DateTimeBuilder.prototype;\n\n _proto.getFieldValue0 = function getFieldValue0(field) {\n return this.fieldValues.get(field);\n };\n\n _proto._addFieldValue = function _addFieldValue(field, value) {\n requireNonNull(field, 'field');\n var old = this.getFieldValue0(field);\n\n if (old != null && old !== value) {\n throw new DateTimeException('Conflict found: ' + field + ' ' + old + ' differs from ' + field + ' ' + value + ': ' + this);\n }\n\n return this._putFieldValue0(field, value);\n };\n\n _proto._putFieldValue0 = function _putFieldValue0(field, value) {\n this.fieldValues.put(field, value);\n return this;\n };\n\n _proto.resolve = function resolve(resolverStyle, resolverFields) {\n if (resolverFields != null) {\n this.fieldValues.retainAll(resolverFields);\n }\n\n this._mergeDate(resolverStyle);\n\n this._mergeTime(resolverStyle);\n\n this._resolveTimeInferZeroes(resolverStyle);\n\n if (this.excessDays != null && this.excessDays.isZero() === false && this.date != null && this.time != null) {\n this.date = this.date.plus(this.excessDays);\n this.excessDays = Period.ZERO;\n }\n\n this._resolveInstant();\n\n return this;\n };\n\n _proto._mergeDate = function _mergeDate(resolverStyle) {\n this._checkDate(IsoChronology.INSTANCE.resolveDate(this.fieldValues, resolverStyle));\n };\n\n _proto._checkDate = function _checkDate(date) {\n if (date != null) {\n this._addObject(date);\n\n for (var fieldName in this.fieldValues.keySet()) {\n var field = ChronoField.byName(fieldName);\n\n if (field) {\n if (this.fieldValues.get(field) !== undefined) {\n if (field.isDateBased()) {\n var val1 = void 0;\n\n try {\n val1 = date.getLong(field);\n } catch (ex) {\n if (ex instanceof DateTimeException) {\n continue;\n } else {\n throw ex;\n }\n }\n\n var val2 = this.fieldValues.get(field);\n\n if (val1 !== val2) {\n throw new DateTimeException('Conflict found: Field ' + field + ' ' + val1 + ' differs from ' + field + ' ' + val2 + ' derived from ' + date);\n }\n }\n }\n }\n }\n }\n };\n\n _proto._mergeTime = function _mergeTime(resolverStyle) {\n if (this.fieldValues.containsKey(ChronoField.CLOCK_HOUR_OF_DAY)) {\n var ch = this.fieldValues.remove(ChronoField.CLOCK_HOUR_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n if (resolverStyle === ResolverStyle.SMART && ch === 0) ; else {\n ChronoField.CLOCK_HOUR_OF_DAY.checkValidValue(ch);\n }\n }\n\n this._addFieldValue(ChronoField.HOUR_OF_DAY, ch === 24 ? 0 : ch);\n }\n\n if (this.fieldValues.containsKey(ChronoField.CLOCK_HOUR_OF_AMPM)) {\n var _ch = this.fieldValues.remove(ChronoField.CLOCK_HOUR_OF_AMPM);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n if (resolverStyle === ResolverStyle.SMART && _ch === 0) ; else {\n ChronoField.CLOCK_HOUR_OF_AMPM.checkValidValue(_ch);\n }\n }\n\n this._addFieldValue(ChronoField.HOUR_OF_AMPM, _ch === 12 ? 0 : _ch);\n }\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n if (this.fieldValues.containsKey(ChronoField.AMPM_OF_DAY)) {\n ChronoField.AMPM_OF_DAY.checkValidValue(this.fieldValues.get(ChronoField.AMPM_OF_DAY));\n }\n\n if (this.fieldValues.containsKey(ChronoField.HOUR_OF_AMPM)) {\n ChronoField.HOUR_OF_AMPM.checkValidValue(this.fieldValues.get(ChronoField.HOUR_OF_AMPM));\n }\n }\n\n if (this.fieldValues.containsKey(ChronoField.AMPM_OF_DAY) && this.fieldValues.containsKey(ChronoField.HOUR_OF_AMPM)) {\n var ap = this.fieldValues.remove(ChronoField.AMPM_OF_DAY);\n var hap = this.fieldValues.remove(ChronoField.HOUR_OF_AMPM);\n\n this._addFieldValue(ChronoField.HOUR_OF_DAY, ap * 12 + hap);\n }\n\n if (this.fieldValues.containsKey(ChronoField.NANO_OF_DAY)) {\n var nod = this.fieldValues.remove(ChronoField.NANO_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.NANO_OF_DAY.checkValidValue(nod);\n }\n\n this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(nod, 1000000000));\n\n this._addFieldValue(ChronoField.NANO_OF_SECOND, MathUtil.intMod(nod, 1000000000));\n }\n\n if (this.fieldValues.containsKey(ChronoField.MICRO_OF_DAY)) {\n var cod = this.fieldValues.remove(ChronoField.MICRO_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.MICRO_OF_DAY.checkValidValue(cod);\n }\n\n this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(cod, 1000000));\n\n this._addFieldValue(ChronoField.MICRO_OF_SECOND, MathUtil.intMod(cod, 1000000));\n }\n\n if (this.fieldValues.containsKey(ChronoField.MILLI_OF_DAY)) {\n var lod = this.fieldValues.remove(ChronoField.MILLI_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.MILLI_OF_DAY.checkValidValue(lod);\n }\n\n this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(lod, 1000));\n\n this._addFieldValue(ChronoField.MILLI_OF_SECOND, MathUtil.intMod(lod, 1000));\n }\n\n if (this.fieldValues.containsKey(ChronoField.SECOND_OF_DAY)) {\n var sod = this.fieldValues.remove(ChronoField.SECOND_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.SECOND_OF_DAY.checkValidValue(sod);\n }\n\n this._addFieldValue(ChronoField.HOUR_OF_DAY, MathUtil.intDiv(sod, 3600));\n\n this._addFieldValue(ChronoField.MINUTE_OF_HOUR, MathUtil.intMod(MathUtil.intDiv(sod, 60), 60));\n\n this._addFieldValue(ChronoField.SECOND_OF_MINUTE, MathUtil.intMod(sod, 60));\n }\n\n if (this.fieldValues.containsKey(ChronoField.MINUTE_OF_DAY)) {\n var mod = this.fieldValues.remove(ChronoField.MINUTE_OF_DAY);\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.MINUTE_OF_DAY.checkValidValue(mod);\n }\n\n this._addFieldValue(ChronoField.HOUR_OF_DAY, MathUtil.intDiv(mod, 60));\n\n this._addFieldValue(ChronoField.MINUTE_OF_HOUR, MathUtil.intMod(mod, 60));\n }\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND)) {\n ChronoField.MILLI_OF_SECOND.checkValidValue(this.fieldValues.get(ChronoField.MILLI_OF_SECOND));\n }\n\n if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n ChronoField.MICRO_OF_SECOND.checkValidValue(this.fieldValues.get(ChronoField.MICRO_OF_SECOND));\n }\n }\n\n if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND) && this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n var los = this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n var cos = this.fieldValues.get(ChronoField.MICRO_OF_SECOND);\n\n this._putFieldValue0(ChronoField.MICRO_OF_SECOND, los * 1000 + MathUtil.intMod(cos, 1000));\n }\n\n if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND) && this.fieldValues.containsKey(ChronoField.NANO_OF_SECOND)) {\n var nos = this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n\n this._putFieldValue0(ChronoField.MICRO_OF_SECOND, MathUtil.intDiv(nos, 1000));\n\n this.fieldValues.remove(ChronoField.MICRO_OF_SECOND);\n }\n\n if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND) && this.fieldValues.containsKey(ChronoField.NANO_OF_SECOND)) {\n var _nos = this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n\n this._putFieldValue0(ChronoField.MILLI_OF_SECOND, MathUtil.intDiv(_nos, 1000000));\n\n this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n }\n\n if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n var _cos = this.fieldValues.remove(ChronoField.MICRO_OF_SECOND);\n\n this._putFieldValue0(ChronoField.NANO_OF_SECOND, _cos * 1000);\n } else if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND)) {\n var _los = this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n\n this._putFieldValue0(ChronoField.NANO_OF_SECOND, _los * 1000000);\n }\n };\n\n _proto._resolveTimeInferZeroes = function _resolveTimeInferZeroes(resolverStyle) {\n var hod = this.fieldValues.get(ChronoField.HOUR_OF_DAY);\n var moh = this.fieldValues.get(ChronoField.MINUTE_OF_HOUR);\n var som = this.fieldValues.get(ChronoField.SECOND_OF_MINUTE);\n var nos = this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n\n if (hod == null) {\n return;\n }\n\n if (moh == null && (som != null || nos != null)) {\n return;\n }\n\n if (moh != null && som == null && nos != null) {\n return;\n }\n\n if (resolverStyle !== ResolverStyle.LENIENT) {\n if (hod != null) {\n if (resolverStyle === ResolverStyle.SMART && hod === 24 && (moh == null || moh === 0) && (som == null || som === 0) && (nos == null || nos === 0)) {\n hod = 0;\n this.excessDays = Period.ofDays(1);\n }\n\n var hodVal = ChronoField.HOUR_OF_DAY.checkValidIntValue(hod);\n\n if (moh != null) {\n var mohVal = ChronoField.MINUTE_OF_HOUR.checkValidIntValue(moh);\n\n if (som != null) {\n var somVal = ChronoField.SECOND_OF_MINUTE.checkValidIntValue(som);\n\n if (nos != null) {\n var nosVal = ChronoField.NANO_OF_SECOND.checkValidIntValue(nos);\n\n this._addObject(LocalTime.of(hodVal, mohVal, somVal, nosVal));\n } else {\n this._addObject(LocalTime.of(hodVal, mohVal, somVal));\n }\n } else {\n if (nos == null) {\n this._addObject(LocalTime.of(hodVal, mohVal));\n }\n }\n } else {\n if (som == null && nos == null) {\n this._addObject(LocalTime.of(hodVal, 0));\n }\n }\n }\n } else {\n if (hod != null) {\n var _hodVal = hod;\n\n if (moh != null) {\n if (som != null) {\n if (nos == null) {\n nos = 0;\n }\n\n var totalNanos = MathUtil.safeMultiply(_hodVal, 3600000000000);\n totalNanos = MathUtil.safeAdd(totalNanos, MathUtil.safeMultiply(moh, 60000000000));\n totalNanos = MathUtil.safeAdd(totalNanos, MathUtil.safeMultiply(som, 1000000000));\n totalNanos = MathUtil.safeAdd(totalNanos, nos);\n var excessDays = MathUtil.floorDiv(totalNanos, 86400000000000);\n var nod = MathUtil.floorMod(totalNanos, 86400000000000);\n\n this._addObject(LocalTime.ofNanoOfDay(nod));\n\n this.excessDays = Period.ofDays(excessDays);\n } else {\n var totalSecs = MathUtil.safeMultiply(_hodVal, 3600);\n totalSecs = MathUtil.safeAdd(totalSecs, MathUtil.safeMultiply(moh, 60));\n\n var _excessDays = MathUtil.floorDiv(totalSecs, 86400);\n\n var sod = MathUtil.floorMod(totalSecs, 86400);\n\n this._addObject(LocalTime.ofSecondOfDay(sod));\n\n this.excessDays = Period.ofDays(_excessDays);\n }\n } else {\n var _excessDays2 = MathUtil.safeToInt(MathUtil.floorDiv(_hodVal, 24));\n\n _hodVal = MathUtil.floorMod(_hodVal, 24);\n\n this._addObject(LocalTime.of(_hodVal, 0));\n\n this.excessDays = Period.ofDays(_excessDays2);\n }\n }\n }\n\n this.fieldValues.remove(ChronoField.HOUR_OF_DAY);\n this.fieldValues.remove(ChronoField.MINUTE_OF_HOUR);\n this.fieldValues.remove(ChronoField.SECOND_OF_MINUTE);\n this.fieldValues.remove(ChronoField.NANO_OF_SECOND);\n };\n\n _proto._addObject = function _addObject(dateOrTime) {\n if (dateOrTime instanceof ChronoLocalDate) {\n this.date = dateOrTime;\n } else if (dateOrTime instanceof LocalTime) {\n this.time = dateOrTime;\n }\n };\n\n _proto._resolveInstant = function _resolveInstant() {\n if (this.date != null && this.time != null) {\n var offsetSecs = this.fieldValues.get(ChronoField.OFFSET_SECONDS);\n\n if (offsetSecs != null) {\n var offset = ZoneOffset.ofTotalSeconds(offsetSecs);\n var instant = this.date.atTime(this.time).atZone(offset).getLong(ChronoField.INSTANT_SECONDS);\n this.fieldValues.put(ChronoField.INSTANT_SECONDS, instant);\n } else if (this.zone != null) {\n var _instant = this.date.atTime(this.time).atZone(this.zone).getLong(ChronoField.INSTANT_SECONDS);\n\n this.fieldValues.put(ChronoField.INSTANT_SECONDS, _instant);\n }\n }\n };\n\n _proto.build = function build(type) {\n return type.queryFrom(this);\n };\n\n _proto.isSupported = function isSupported(field) {\n if (field == null) {\n return false;\n }\n\n return this.fieldValues.containsKey(field) && this.fieldValues.get(field) !== undefined || this.date != null && this.date.isSupported(field) || this.time != null && this.time.isSupported(field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n var value = this.getFieldValue0(field);\n\n if (value == null) {\n if (this.date != null && this.date.isSupported(field)) {\n return this.date.getLong(field);\n }\n\n if (this.time != null && this.time.isSupported(field)) {\n return this.time.getLong(field);\n }\n\n throw new DateTimeException('Field not found: ' + field);\n }\n\n return value;\n };\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.zoneId()) {\n return this.zone;\n } else if (_query === TemporalQueries.chronology()) {\n return this.chrono;\n } else if (_query === TemporalQueries.localDate()) {\n return this.date != null ? LocalDate.from(this.date) : null;\n } else if (_query === TemporalQueries.localTime()) {\n return this.time;\n } else if (_query === TemporalQueries.zone() || _query === TemporalQueries.offset()) {\n return _query.queryFrom(this);\n } else if (_query === TemporalQueries.precision()) {\n return null;\n }\n\n return _query.queryFrom(this);\n };\n\n return DateTimeBuilder;\n}(TemporalAccessor);\n\nvar DateTimeParseContext = function () {\n function DateTimeParseContext() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DateTimeParseContext) {\n this._constructorSelf.apply(this, arguments);\n\n return;\n } else {\n this._constructorFormatter.apply(this, arguments);\n }\n } else {\n this._constructorParam.apply(this, arguments);\n }\n\n this._caseSensitive = true;\n this._strict = true;\n this._parsed = [new Parsed(this)];\n }\n\n var _proto = DateTimeParseContext.prototype;\n\n _proto._constructorParam = function _constructorParam(locale, symbols, chronology) {\n this._locale = locale;\n this._symbols = symbols;\n this._overrideChronology = chronology;\n };\n\n _proto._constructorFormatter = function _constructorFormatter(formatter) {\n this._locale = formatter.locale();\n this._symbols = formatter.decimalStyle();\n this._overrideChronology = formatter.chronology();\n };\n\n _proto._constructorSelf = function _constructorSelf(other) {\n this._locale = other._locale;\n this._symbols = other._symbols;\n this._overrideChronology = other._overrideChronology;\n this._overrideZone = other._overrideZone;\n this._caseSensitive = other._caseSensitive;\n this._strict = other._strict;\n this._parsed = [new Parsed(this)];\n };\n\n _proto.copy = function copy() {\n return new DateTimeParseContext(this);\n };\n\n _proto.symbols = function symbols() {\n return this._symbols;\n };\n\n _proto.isStrict = function isStrict() {\n return this._strict;\n };\n\n _proto.setStrict = function setStrict(strict) {\n this._strict = strict;\n };\n\n _proto.locale = function locale() {\n return this._locale;\n };\n\n _proto.setLocale = function setLocale(locale) {\n this._locale = locale;\n };\n\n _proto.startOptional = function startOptional() {\n this._parsed.push(this.currentParsed().copy());\n };\n\n _proto.endOptional = function endOptional(successful) {\n if (successful) {\n this._parsed.splice(this._parsed.length - 2, 1);\n } else {\n this._parsed.splice(this._parsed.length - 1, 1);\n }\n };\n\n _proto.isCaseSensitive = function isCaseSensitive() {\n return this._caseSensitive;\n };\n\n _proto.setCaseSensitive = function setCaseSensitive(caseSensitive) {\n this._caseSensitive = caseSensitive;\n };\n\n _proto.subSequenceEquals = function subSequenceEquals(cs1, offset1, cs2, offset2, length) {\n if (offset1 + length > cs1.length || offset2 + length > cs2.length) {\n return false;\n }\n\n if (!this.isCaseSensitive()) {\n cs1 = cs1.toLowerCase();\n cs2 = cs2.toLowerCase();\n }\n\n for (var i = 0; i < length; i++) {\n var ch1 = cs1[offset1 + i];\n var ch2 = cs2[offset2 + i];\n\n if (ch1 !== ch2) {\n return false;\n }\n }\n\n return true;\n };\n\n _proto.charEquals = function charEquals(ch1, ch2) {\n if (this.isCaseSensitive()) {\n return ch1 === ch2;\n }\n\n return this.charEqualsIgnoreCase(ch1, ch2);\n };\n\n _proto.charEqualsIgnoreCase = function charEqualsIgnoreCase(c1, c2) {\n return c1 === c2 || c1.toLowerCase() === c2.toLowerCase();\n };\n\n _proto.setParsedField = function setParsedField(field, value, errorPos, successPos) {\n var currentParsedFieldValues = this.currentParsed().fieldValues;\n var old = currentParsedFieldValues.get(field);\n currentParsedFieldValues.set(field, value);\n return old != null && old !== value ? ~errorPos : successPos;\n };\n\n _proto.setParsedZone = function setParsedZone(zone) {\n requireNonNull(zone, 'zone');\n this.currentParsed().zone = zone;\n };\n\n _proto.getParsed = function getParsed(field) {\n return this.currentParsed().fieldValues.get(field);\n };\n\n _proto.toParsed = function toParsed() {\n return this.currentParsed();\n };\n\n _proto.currentParsed = function currentParsed() {\n return this._parsed[this._parsed.length - 1];\n };\n\n _proto.setParsedLeapSecond = function setParsedLeapSecond() {\n this.currentParsed().leapSecond = true;\n };\n\n _proto.getEffectiveChronology = function getEffectiveChronology() {\n var chrono = this.currentParsed().chrono;\n\n if (chrono == null) {\n chrono = this._overrideChronology;\n\n if (chrono == null) {\n chrono = IsoChronology.INSTANCE;\n }\n }\n\n return chrono;\n };\n\n return DateTimeParseContext;\n}();\n\nvar Parsed = function (_Temporal) {\n _inheritsLoose(Parsed, _Temporal);\n\n function Parsed(dateTimeParseContext) {\n var _this;\n\n _this = _Temporal.call(this) || this;\n _this.chrono = null;\n _this.zone = null;\n _this.fieldValues = new EnumMap();\n _this.leapSecond = false;\n _this.dateTimeParseContext = dateTimeParseContext;\n return _this;\n }\n\n var _proto2 = Parsed.prototype;\n\n _proto2.copy = function copy() {\n var cloned = new Parsed();\n cloned.chrono = this.chrono;\n cloned.zone = this.zone;\n cloned.fieldValues.putAll(this.fieldValues);\n cloned.leapSecond = this.leapSecond;\n cloned.dateTimeParseContext = this.dateTimeParseContext;\n return cloned;\n };\n\n _proto2.toString = function toString() {\n return this.fieldValues + \", \" + this.chrono + \", \" + this.zone;\n };\n\n _proto2.isSupported = function isSupported(field) {\n return this.fieldValues.containsKey(field);\n };\n\n _proto2.get = function get(field) {\n var val = this.fieldValues.get(field);\n assert(val != null);\n return val;\n };\n\n _proto2.query = function query(_query) {\n if (_query === TemporalQueries.chronology()) {\n return this.chrono;\n }\n\n if (_query === TemporalQueries.zoneId() || _query === TemporalQueries.zone()) {\n return this.zone;\n }\n\n return _Temporal.prototype.query.call(this, _query);\n };\n\n _proto2.toBuilder = function toBuilder() {\n var builder = new DateTimeBuilder();\n builder.fieldValues.putAll(this.fieldValues);\n builder.chrono = this.dateTimeParseContext.getEffectiveChronology();\n\n if (this.zone != null) {\n builder.zone = this.zone;\n } else {\n builder.zone = this.overrideZone;\n }\n\n builder.leapSecond = this.leapSecond;\n builder.excessDays = this.excessDays;\n return builder;\n };\n\n return Parsed;\n}(Temporal);\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar DateTimePrintContext = function () {\n function DateTimePrintContext(temporal, localeOrFormatter, symbols) {\n if (arguments.length === 2 && arguments[1] instanceof DateTimeFormatter) {\n this._temporal = DateTimePrintContext.adjust(temporal, localeOrFormatter);\n this._locale = localeOrFormatter.locale();\n this._symbols = localeOrFormatter.decimalStyle();\n } else {\n this._temporal = temporal;\n this._locale = localeOrFormatter;\n this._symbols = symbols;\n }\n\n this._optional = 0;\n }\n\n DateTimePrintContext.adjust = function adjust(temporal, formatter) {\n return temporal;\n };\n\n var _proto = DateTimePrintContext.prototype;\n\n _proto.symbols = function symbols() {\n return this._symbols;\n };\n\n _proto.startOptional = function startOptional() {\n this._optional++;\n };\n\n _proto.endOptional = function endOptional() {\n this._optional--;\n };\n\n _proto.getValueQuery = function getValueQuery(query) {\n var result = this._temporal.query(query);\n\n if (result == null && this._optional === 0) {\n throw new DateTimeException('Unable to extract value: ' + this._temporal);\n }\n\n return result;\n };\n\n _proto.getValue = function getValue(field) {\n try {\n return this._temporal.getLong(field);\n } catch (ex) {\n if (ex instanceof DateTimeException && this._optional > 0) {\n return null;\n }\n\n throw ex;\n }\n };\n\n _proto.temporal = function temporal() {\n return this._temporal;\n };\n\n _proto.locale = function locale() {\n return this._locale;\n };\n\n _proto.setDateTime = function setDateTime(temporal) {\n this._temporal = temporal;\n };\n\n _proto.setLocale = function setLocale(locale) {\n this._locale = locale;\n };\n\n return DateTimePrintContext;\n}();\n\nvar IsoFields = {};\nvar QUARTER_DAYS = [0, 90, 181, 273, 0, 91, 182, 274];\n\nvar Field = function (_TemporalField) {\n _inheritsLoose(Field, _TemporalField);\n\n function Field() {\n return _TemporalField.apply(this, arguments) || this;\n }\n\n var _proto = Field.prototype;\n\n _proto.isDateBased = function isDateBased() {\n return true;\n };\n\n _proto.isTimeBased = function isTimeBased() {\n return false;\n };\n\n _proto._isIso = function _isIso() {\n return true;\n };\n\n Field._getWeekRangeByLocalDate = function _getWeekRangeByLocalDate(date) {\n var wby = Field._getWeekBasedYear(date);\n\n return ValueRange.of(1, Field._getWeekRangeByYear(wby));\n };\n\n Field._getWeekRangeByYear = function _getWeekRangeByYear(wby) {\n var date = LocalDate.of(wby, 1, 1);\n\n if (date.dayOfWeek() === DayOfWeek.THURSDAY || date.dayOfWeek() === DayOfWeek.WEDNESDAY && date.isLeapYear()) {\n return 53;\n }\n\n return 52;\n };\n\n Field._getWeek = function _getWeek(date) {\n var dow0 = date.dayOfWeek().ordinal();\n var doy0 = date.dayOfYear() - 1;\n var doyThu0 = doy0 + (3 - dow0);\n var alignedWeek = MathUtil.intDiv(doyThu0, 7);\n var firstThuDoy0 = doyThu0 - alignedWeek * 7;\n var firstMonDoy0 = firstThuDoy0 - 3;\n\n if (firstMonDoy0 < -3) {\n firstMonDoy0 += 7;\n }\n\n if (doy0 < firstMonDoy0) {\n return Field._getWeekRangeByLocalDate(date.withDayOfYear(180).minusYears(1)).maximum();\n }\n\n var week = MathUtil.intDiv(doy0 - firstMonDoy0, 7) + 1;\n\n if (week === 53) {\n if ((firstMonDoy0 === -3 || firstMonDoy0 === -2 && date.isLeapYear()) === false) {\n week = 1;\n }\n }\n\n return week;\n };\n\n Field._getWeekBasedYear = function _getWeekBasedYear(date) {\n var year = date.year();\n var doy = date.dayOfYear();\n\n if (doy <= 3) {\n var dow = date.dayOfWeek().ordinal();\n\n if (doy - dow < -2) {\n year--;\n }\n } else if (doy >= 363) {\n var _dow = date.dayOfWeek().ordinal();\n\n doy = doy - 363 - (date.isLeapYear() ? 1 : 0);\n\n if (doy - _dow >= 0) {\n year++;\n }\n }\n\n return year;\n };\n\n _proto.displayName = function displayName() {\n return this.toString();\n };\n\n _proto.resolve = function resolve() {\n return null;\n };\n\n _proto.name = function name() {\n return this.toString();\n };\n\n return Field;\n}(TemporalField);\n\nvar DAY_OF_QUARTER_FIELD = function (_Field) {\n _inheritsLoose(DAY_OF_QUARTER_FIELD, _Field);\n\n function DAY_OF_QUARTER_FIELD() {\n return _Field.apply(this, arguments) || this;\n }\n\n var _proto2 = DAY_OF_QUARTER_FIELD.prototype;\n\n _proto2.toString = function toString() {\n return 'DayOfQuarter';\n };\n\n _proto2.baseUnit = function baseUnit() {\n return ChronoUnit.DAYS;\n };\n\n _proto2.rangeUnit = function rangeUnit() {\n return QUARTER_YEARS;\n };\n\n _proto2.range = function range() {\n return ValueRange.of(1, 90, 92);\n };\n\n _proto2.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(ChronoField.DAY_OF_YEAR) && temporal.isSupported(ChronoField.MONTH_OF_YEAR) && temporal.isSupported(ChronoField.YEAR) && this._isIso(temporal);\n };\n\n _proto2.rangeRefinedBy = function rangeRefinedBy(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: DayOfQuarter');\n }\n\n var qoy = temporal.getLong(QUARTER_OF_YEAR);\n\n if (qoy === 1) {\n var year = temporal.getLong(ChronoField.YEAR);\n return IsoChronology.isLeapYear(year) ? ValueRange.of(1, 91) : ValueRange.of(1, 90);\n } else if (qoy === 2) {\n return ValueRange.of(1, 91);\n } else if (qoy === 3 || qoy === 4) {\n return ValueRange.of(1, 92);\n }\n\n return this.range();\n };\n\n _proto2.getFrom = function getFrom(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: DayOfQuarter');\n }\n\n var doy = temporal.get(ChronoField.DAY_OF_YEAR);\n var moy = temporal.get(ChronoField.MONTH_OF_YEAR);\n var year = temporal.getLong(ChronoField.YEAR);\n return doy - QUARTER_DAYS[MathUtil.intDiv(moy - 1, 3) + (IsoChronology.isLeapYear(year) ? 4 : 0)];\n };\n\n _proto2.adjustInto = function adjustInto(temporal, newValue) {\n var curValue = this.getFrom(temporal);\n this.range().checkValidValue(newValue, this);\n return temporal.with(ChronoField.DAY_OF_YEAR, temporal.getLong(ChronoField.DAY_OF_YEAR) + (newValue - curValue));\n };\n\n _proto2.resolve = function resolve(fieldValues, partialTemporal, resolverStyle) {\n var yearLong = fieldValues.get(ChronoField.YEAR);\n var qoyLong = fieldValues.get(QUARTER_OF_YEAR);\n\n if (yearLong == null || qoyLong == null) {\n return null;\n }\n\n var y = ChronoField.YEAR.checkValidIntValue(yearLong);\n var doq = fieldValues.get(DAY_OF_QUARTER);\n var date;\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var qoy = qoyLong;\n date = LocalDate.of(y, 1, 1);\n date = date.plusMonths(MathUtil.safeMultiply(MathUtil.safeSubtract(qoy, 1), 3));\n date = date.plusDays(MathUtil.safeSubtract(doq, 1));\n } else {\n var _qoy = QUARTER_OF_YEAR.range().checkValidIntValue(qoyLong, QUARTER_OF_YEAR);\n\n if (resolverStyle === ResolverStyle.STRICT) {\n var max = 92;\n\n if (_qoy === 1) {\n max = IsoChronology.isLeapYear(y) ? 91 : 90;\n } else if (_qoy === 2) {\n max = 91;\n }\n\n ValueRange.of(1, max).checkValidValue(doq, this);\n } else {\n this.range().checkValidValue(doq, this);\n }\n\n date = LocalDate.of(y, (_qoy - 1) * 3 + 1, 1).plusDays(doq - 1);\n }\n\n fieldValues.remove(this);\n fieldValues.remove(ChronoField.YEAR);\n fieldValues.remove(QUARTER_OF_YEAR);\n return date;\n };\n\n return DAY_OF_QUARTER_FIELD;\n}(Field);\n\nvar QUARTER_OF_YEAR_FIELD = function (_Field2) {\n _inheritsLoose(QUARTER_OF_YEAR_FIELD, _Field2);\n\n function QUARTER_OF_YEAR_FIELD() {\n return _Field2.apply(this, arguments) || this;\n }\n\n var _proto3 = QUARTER_OF_YEAR_FIELD.prototype;\n\n _proto3.toString = function toString() {\n return 'QuarterOfYear';\n };\n\n _proto3.baseUnit = function baseUnit() {\n return QUARTER_YEARS;\n };\n\n _proto3.rangeUnit = function rangeUnit() {\n return ChronoUnit.YEARS;\n };\n\n _proto3.range = function range() {\n return ValueRange.of(1, 4);\n };\n\n _proto3.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(ChronoField.MONTH_OF_YEAR) && this._isIso(temporal);\n };\n\n _proto3.rangeRefinedBy = function rangeRefinedBy(temporal) {\n return this.range();\n };\n\n _proto3.getFrom = function getFrom(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: QuarterOfYear');\n }\n\n var moy = temporal.getLong(ChronoField.MONTH_OF_YEAR);\n return MathUtil.intDiv(moy + 2, 3);\n };\n\n _proto3.adjustInto = function adjustInto(temporal, newValue) {\n var curValue = this.getFrom(temporal);\n this.range().checkValidValue(newValue, this);\n return temporal.with(ChronoField.MONTH_OF_YEAR, temporal.getLong(ChronoField.MONTH_OF_YEAR) + (newValue - curValue) * 3);\n };\n\n return QUARTER_OF_YEAR_FIELD;\n}(Field);\n\nvar WEEK_OF_WEEK_BASED_YEAR_FIELD = function (_Field3) {\n _inheritsLoose(WEEK_OF_WEEK_BASED_YEAR_FIELD, _Field3);\n\n function WEEK_OF_WEEK_BASED_YEAR_FIELD() {\n return _Field3.apply(this, arguments) || this;\n }\n\n var _proto4 = WEEK_OF_WEEK_BASED_YEAR_FIELD.prototype;\n\n _proto4.toString = function toString() {\n return 'WeekOfWeekBasedYear';\n };\n\n _proto4.baseUnit = function baseUnit() {\n return ChronoUnit.WEEKS;\n };\n\n _proto4.rangeUnit = function rangeUnit() {\n return WEEK_BASED_YEARS;\n };\n\n _proto4.range = function range() {\n return ValueRange.of(1, 52, 53);\n };\n\n _proto4.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(ChronoField.EPOCH_DAY) && this._isIso(temporal);\n };\n\n _proto4.rangeRefinedBy = function rangeRefinedBy(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: WeekOfWeekBasedYear');\n }\n\n return Field._getWeekRangeByLocalDate(LocalDate.from(temporal));\n };\n\n _proto4.getFrom = function getFrom(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: WeekOfWeekBasedYear');\n }\n\n return Field._getWeek(LocalDate.from(temporal));\n };\n\n _proto4.adjustInto = function adjustInto(temporal, newValue) {\n this.range().checkValidValue(newValue, this);\n return temporal.plus(MathUtil.safeSubtract(newValue, this.getFrom(temporal)), ChronoUnit.WEEKS);\n };\n\n _proto4.resolve = function resolve(fieldValues, partialTemporal, resolverStyle) {\n var wbyLong = fieldValues.get(WEEK_BASED_YEAR);\n var dowLong = fieldValues.get(ChronoField.DAY_OF_WEEK);\n\n if (wbyLong == null || dowLong == null) {\n return null;\n }\n\n var wby = WEEK_BASED_YEAR.range().checkValidIntValue(wbyLong, WEEK_BASED_YEAR);\n var wowby = fieldValues.get(WEEK_OF_WEEK_BASED_YEAR);\n var date;\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var dow = dowLong;\n var weeks = 0;\n\n if (dow > 7) {\n weeks = MathUtil.intDiv(dow - 1, 7);\n dow = MathUtil.intMod(dow - 1, 7) + 1;\n } else if (dow < 1) {\n weeks = MathUtil.intDiv(dow, 7) - 1;\n dow = MathUtil.intMod(dow, 7) + 7;\n }\n\n date = LocalDate.of(wby, 1, 4).plusWeeks(wowby - 1).plusWeeks(weeks).with(ChronoField.DAY_OF_WEEK, dow);\n } else {\n var _dow2 = ChronoField.DAY_OF_WEEK.checkValidIntValue(dowLong);\n\n if (resolverStyle === ResolverStyle.STRICT) {\n var temp = LocalDate.of(wby, 1, 4);\n\n var range = Field._getWeekRangeByLocalDate(temp);\n\n range.checkValidValue(wowby, this);\n } else {\n this.range().checkValidValue(wowby, this);\n }\n\n date = LocalDate.of(wby, 1, 4).plusWeeks(wowby - 1).with(ChronoField.DAY_OF_WEEK, _dow2);\n }\n\n fieldValues.remove(this);\n fieldValues.remove(WEEK_BASED_YEAR);\n fieldValues.remove(ChronoField.DAY_OF_WEEK);\n return date;\n };\n\n _proto4.displayName = function displayName() {\n return 'Week';\n };\n\n return WEEK_OF_WEEK_BASED_YEAR_FIELD;\n}(Field);\n\nvar WEEK_BASED_YEAR_FIELD = function (_Field4) {\n _inheritsLoose(WEEK_BASED_YEAR_FIELD, _Field4);\n\n function WEEK_BASED_YEAR_FIELD() {\n return _Field4.apply(this, arguments) || this;\n }\n\n var _proto5 = WEEK_BASED_YEAR_FIELD.prototype;\n\n _proto5.toString = function toString() {\n return 'WeekBasedYear';\n };\n\n _proto5.baseUnit = function baseUnit() {\n return WEEK_BASED_YEARS;\n };\n\n _proto5.rangeUnit = function rangeUnit() {\n return ChronoUnit.FOREVER;\n };\n\n _proto5.range = function range() {\n return ChronoField.YEAR.range();\n };\n\n _proto5.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(ChronoField.EPOCH_DAY) && this._isIso(temporal);\n };\n\n _proto5.rangeRefinedBy = function rangeRefinedBy(temporal) {\n return ChronoField.YEAR.range();\n };\n\n _proto5.getFrom = function getFrom(temporal) {\n if (temporal.isSupported(this) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: WeekBasedYear');\n }\n\n return Field._getWeekBasedYear(LocalDate.from(temporal));\n };\n\n _proto5.adjustInto = function adjustInto(temporal, newValue) {\n if (this.isSupportedBy(temporal) === false) {\n throw new UnsupportedTemporalTypeException('Unsupported field: WeekBasedYear');\n }\n\n var newWby = this.range().checkValidIntValue(newValue, WEEK_BASED_YEAR);\n var date = LocalDate.from(temporal);\n var dow = date.get(ChronoField.DAY_OF_WEEK);\n\n var week = Field._getWeek(date);\n\n if (week === 53 && Field._getWeekRangeByYear(newWby) === 52) {\n week = 52;\n }\n\n var resolved = LocalDate.of(newWby, 1, 4);\n var days = dow - resolved.get(ChronoField.DAY_OF_WEEK) + (week - 1) * 7;\n resolved = resolved.plusDays(days);\n return temporal.with(resolved);\n };\n\n return WEEK_BASED_YEAR_FIELD;\n}(Field);\n\nvar Unit = function (_TemporalUnit) {\n _inheritsLoose(Unit, _TemporalUnit);\n\n function Unit(name, estimatedDuration) {\n var _this;\n\n _this = _TemporalUnit.call(this) || this;\n _this._name = name;\n _this._duration = estimatedDuration;\n return _this;\n }\n\n var _proto6 = Unit.prototype;\n\n _proto6.duration = function duration() {\n return this._duration;\n };\n\n _proto6.isDurationEstimated = function isDurationEstimated() {\n return true;\n };\n\n _proto6.isDateBased = function isDateBased() {\n return true;\n };\n\n _proto6.isTimeBased = function isTimeBased() {\n return false;\n };\n\n _proto6.isSupportedBy = function isSupportedBy(temporal) {\n return temporal.isSupported(ChronoField.EPOCH_DAY);\n };\n\n _proto6.addTo = function addTo(temporal, periodToAdd) {\n switch (this) {\n case WEEK_BASED_YEARS:\n {\n var added = MathUtil.safeAdd(temporal.get(WEEK_BASED_YEAR), periodToAdd);\n return temporal.with(WEEK_BASED_YEAR, added);\n }\n\n case QUARTER_YEARS:\n return temporal.plus(MathUtil.intDiv(periodToAdd, 256), ChronoUnit.YEARS).plus(MathUtil.intMod(periodToAdd, 256) * 3, ChronoUnit.MONTHS);\n\n default:\n throw new IllegalStateException('Unreachable');\n }\n };\n\n _proto6.between = function between(temporal1, temporal2) {\n switch (this) {\n case WEEK_BASED_YEARS:\n return MathUtil.safeSubtract(temporal2.getLong(WEEK_BASED_YEAR), temporal1.getLong(WEEK_BASED_YEAR));\n\n case QUARTER_YEARS:\n return MathUtil.intDiv(temporal1.until(temporal2, ChronoUnit.MONTHS), 3);\n\n default:\n throw new IllegalStateException('Unreachable');\n }\n };\n\n _proto6.toString = function toString() {\n return name;\n };\n\n return Unit;\n}(TemporalUnit);\n\nvar DAY_OF_QUARTER = null;\nvar QUARTER_OF_YEAR = null;\nvar WEEK_OF_WEEK_BASED_YEAR = null;\nvar WEEK_BASED_YEAR = null;\nvar WEEK_BASED_YEARS = null;\nvar QUARTER_YEARS = null;\nfunction _init$8() {\n DAY_OF_QUARTER = new DAY_OF_QUARTER_FIELD();\n QUARTER_OF_YEAR = new QUARTER_OF_YEAR_FIELD();\n WEEK_OF_WEEK_BASED_YEAR = new WEEK_OF_WEEK_BASED_YEAR_FIELD();\n WEEK_BASED_YEAR = new WEEK_BASED_YEAR_FIELD();\n WEEK_BASED_YEARS = new Unit('WeekBasedYears', Duration.ofSeconds(31556952));\n QUARTER_YEARS = new Unit('QuarterYears', Duration.ofSeconds(31556952 / 4));\n IsoFields.DAY_OF_QUARTER = DAY_OF_QUARTER;\n IsoFields.QUARTER_OF_YEAR = QUARTER_OF_YEAR;\n IsoFields.WEEK_OF_WEEK_BASED_YEAR = WEEK_OF_WEEK_BASED_YEAR;\n IsoFields.WEEK_BASED_YEAR = WEEK_BASED_YEAR;\n IsoFields.WEEK_BASED_YEARS = WEEK_BASED_YEARS;\n IsoFields.QUARTER_YEARS = QUARTER_YEARS;\n\n LocalDate.prototype.isoWeekOfWeekyear = function () {\n return this.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);\n };\n\n LocalDate.prototype.isoWeekyear = function () {\n return this.get(IsoFields.WEEK_BASED_YEAR);\n };\n}\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar DecimalStyle = function () {\n function DecimalStyle(zeroChar, positiveSignChar, negativeSignChar, decimalPointChar) {\n this._zeroDigit = zeroChar;\n this._zeroDigitCharCode = zeroChar.charCodeAt(0);\n this._positiveSign = positiveSignChar;\n this._negativeSign = negativeSignChar;\n this._decimalSeparator = decimalPointChar;\n }\n\n var _proto = DecimalStyle.prototype;\n\n _proto.positiveSign = function positiveSign() {\n return this._positiveSign;\n };\n\n _proto.withPositiveSign = function withPositiveSign(positiveSign) {\n if (positiveSign === this._positiveSign) {\n return this;\n }\n\n return new DecimalStyle(this._zeroDigit, positiveSign, this._negativeSign, this._decimalSeparator);\n };\n\n _proto.negativeSign = function negativeSign() {\n return this._negativeSign;\n };\n\n _proto.withNegativeSign = function withNegativeSign(negativeSign) {\n if (negativeSign === this._negativeSign) {\n return this;\n }\n\n return new DecimalStyle(this._zeroDigit, this._positiveSign, negativeSign, this._decimalSeparator);\n };\n\n _proto.zeroDigit = function zeroDigit() {\n return this._zeroDigit;\n };\n\n _proto.withZeroDigit = function withZeroDigit(zeroDigit) {\n if (zeroDigit === this._zeroDigit) {\n return this;\n }\n\n return new DecimalStyle(zeroDigit, this._positiveSign, this._negativeSign, this._decimalSeparator);\n };\n\n _proto.decimalSeparator = function decimalSeparator() {\n return this._decimalSeparator;\n };\n\n _proto.withDecimalSeparator = function withDecimalSeparator(decimalSeparator) {\n if (decimalSeparator === this._decimalSeparator) {\n return this;\n }\n\n return new DecimalStyle(this._zeroDigit, this._positiveSign, this._negativeSign, decimalSeparator);\n };\n\n _proto.convertToDigit = function convertToDigit(char) {\n var val = char.charCodeAt(0) - this._zeroDigitCharCode;\n\n return val >= 0 && val <= 9 ? val : -1;\n };\n\n _proto.convertNumberToI18N = function convertNumberToI18N(numericText) {\n if (this._zeroDigit === '0') {\n return numericText;\n }\n\n var diff = this._zeroDigitCharCode - '0'.charCodeAt(0);\n var convertedText = '';\n\n for (var i = 0; i < numericText.length; i++) {\n convertedText += String.fromCharCode(numericText.charCodeAt(i) + diff);\n }\n\n return convertedText;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof DecimalStyle) {\n return this._zeroDigit === other._zeroDigit && this._positiveSign === other._positiveSign && this._negativeSign === other._negativeSign && this._decimalSeparator === other._decimalSeparator;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._zeroDigit + this._positiveSign + this._negativeSign + this._decimalSeparator;\n };\n\n _proto.toString = function toString() {\n return 'DecimalStyle[' + this._zeroDigit + this._positiveSign + this._negativeSign + this._decimalSeparator + ']';\n };\n\n DecimalStyle.of = function of() {\n throw new Error('not yet supported');\n };\n\n DecimalStyle.availableLocales = function availableLocales() {\n throw new Error('not yet supported');\n };\n\n return DecimalStyle;\n}();\nDecimalStyle.STANDARD = new DecimalStyle('0', '+', '-', '.');\n\nvar SignStyle = function (_Enum) {\n _inheritsLoose(SignStyle, _Enum);\n\n function SignStyle() {\n return _Enum.apply(this, arguments) || this;\n }\n\n var _proto = SignStyle.prototype;\n\n _proto.parse = function parse(positive, strict, fixedWidth) {\n switch (this) {\n case SignStyle.NORMAL:\n return !positive || !strict;\n\n case SignStyle.ALWAYS:\n case SignStyle.EXCEEDS_PAD:\n return true;\n\n default:\n return !strict && !fixedWidth;\n }\n };\n\n return SignStyle;\n}(Enum);\nSignStyle.NORMAL = new SignStyle('NORMAL');\nSignStyle.NEVER = new SignStyle('NEVER');\nSignStyle.ALWAYS = new SignStyle('ALWAYS');\nSignStyle.EXCEEDS_PAD = new SignStyle('EXCEEDS_PAD');\nSignStyle.NOT_NEGATIVE = new SignStyle('NOT_NEGATIVE');\n\nvar TextStyle = function (_Enum) {\n _inheritsLoose(TextStyle, _Enum);\n\n function TextStyle() {\n return _Enum.apply(this, arguments) || this;\n }\n\n var _proto = TextStyle.prototype;\n\n _proto.isStandalone = function isStandalone() {\n switch (this) {\n case TextStyle.FULL_STANDALONE:\n case TextStyle.SHORT_STANDALONE:\n case TextStyle.NARROW_STANDALONE:\n return true;\n\n default:\n return false;\n }\n };\n\n _proto.asStandalone = function asStandalone() {\n switch (this) {\n case TextStyle.FULL:\n return TextStyle.FULL_STANDALONE;\n\n case TextStyle.SHORT:\n return TextStyle.SHORT_STANDALONE;\n\n case TextStyle.NARROW:\n return TextStyle.NARROW_STANDALONE;\n\n default:\n return this;\n }\n };\n\n _proto.asNormal = function asNormal() {\n switch (this) {\n case TextStyle.FULL_STANDALONE:\n return TextStyle.FULL;\n\n case TextStyle.SHORT_STANDALONE:\n return TextStyle.SHORT;\n\n case TextStyle.NARROW_STANDALONE:\n return TextStyle.NARROW;\n\n default:\n return this;\n }\n };\n\n return TextStyle;\n}(Enum);\nTextStyle.FULL = new TextStyle('FULL');\nTextStyle.FULL_STANDALONE = new TextStyle('FULL_STANDALONE');\nTextStyle.SHORT = new TextStyle('SHORT');\nTextStyle.SHORT_STANDALONE = new TextStyle('SHORT_STANDALONE');\nTextStyle.NARROW = new TextStyle('NARROW');\nTextStyle.NARROW_STANDALONE = new TextStyle('NARROW_STANDALONE');\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar CharLiteralPrinterParser = function () {\n function CharLiteralPrinterParser(literal) {\n if (literal.length > 1) {\n throw new IllegalArgumentException('invalid literal, too long: \"' + literal + '\"');\n }\n\n this._literal = literal;\n }\n\n var _proto = CharLiteralPrinterParser.prototype;\n\n _proto.print = function print(context, buf) {\n buf.append(this._literal);\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var length = text.length;\n\n if (position === length) {\n return ~position;\n }\n\n var ch = text.charAt(position);\n\n if (context.charEquals(this._literal, ch) === false) {\n return ~position;\n }\n\n return position + this._literal.length;\n };\n\n _proto.toString = function toString() {\n if (this._literal === '\\'') {\n return \"''\";\n }\n\n return \"'\" + this._literal + \"'\";\n };\n\n return CharLiteralPrinterParser;\n}();\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar CompositePrinterParser = function () {\n function CompositePrinterParser(printerParsers, optional) {\n this._printerParsers = printerParsers;\n this._optional = optional;\n }\n\n var _proto = CompositePrinterParser.prototype;\n\n _proto.withOptional = function withOptional(optional) {\n if (optional === this._optional) {\n return this;\n }\n\n return new CompositePrinterParser(this._printerParsers, optional);\n };\n\n _proto.print = function print(context, buf) {\n var length = buf.length();\n\n if (this._optional) {\n context.startOptional();\n }\n\n try {\n for (var i = 0; i < this._printerParsers.length; i++) {\n var pp = this._printerParsers[i];\n\n if (pp.print(context, buf) === false) {\n buf.setLength(length);\n return true;\n }\n }\n } finally {\n if (this._optional) {\n context.endOptional();\n }\n }\n\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n if (this._optional) {\n context.startOptional();\n var pos = position;\n\n for (var i = 0; i < this._printerParsers.length; i++) {\n var pp = this._printerParsers[i];\n pos = pp.parse(context, text, pos);\n\n if (pos < 0) {\n context.endOptional(false);\n return position;\n }\n }\n\n context.endOptional(true);\n return pos;\n } else {\n for (var _i = 0; _i < this._printerParsers.length; _i++) {\n var _pp = this._printerParsers[_i];\n position = _pp.parse(context, text, position);\n\n if (position < 0) {\n break;\n }\n }\n\n return position;\n }\n };\n\n _proto.toString = function toString() {\n var buf = '';\n\n if (this._printerParsers != null) {\n buf += this._optional ? '[' : '(';\n\n for (var i = 0; i < this._printerParsers.length; i++) {\n var pp = this._printerParsers[i];\n buf += pp.toString();\n }\n\n buf += this._optional ? ']' : ')';\n }\n\n return buf;\n };\n\n return CompositePrinterParser;\n}();\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar FractionPrinterParser = function () {\n function FractionPrinterParser(field, minWidth, maxWidth, decimalPoint) {\n requireNonNull(field, 'field');\n\n if (field.range().isFixed() === false) {\n throw new IllegalArgumentException('Field must have a fixed set of values: ' + field);\n }\n\n if (minWidth < 0 || minWidth > 9) {\n throw new IllegalArgumentException('Minimum width must be from 0 to 9 inclusive but was ' + minWidth);\n }\n\n if (maxWidth < 1 || maxWidth > 9) {\n throw new IllegalArgumentException('Maximum width must be from 1 to 9 inclusive but was ' + maxWidth);\n }\n\n if (maxWidth < minWidth) {\n throw new IllegalArgumentException('Maximum width must exceed or equal the minimum width but ' + maxWidth + ' < ' + minWidth);\n }\n\n this.field = field;\n this.minWidth = minWidth;\n this.maxWidth = maxWidth;\n this.decimalPoint = decimalPoint;\n }\n\n var _proto = FractionPrinterParser.prototype;\n\n _proto.print = function print(context, buf) {\n var value = context.getValue(this.field);\n\n if (value === null) {\n return false;\n }\n\n var symbols = context.symbols();\n\n if (value === 0) {\n if (this.minWidth > 0) {\n if (this.decimalPoint) {\n buf.append(symbols.decimalSeparator());\n }\n\n for (var i = 0; i < this.minWidth; i++) {\n buf.append(symbols.zeroDigit());\n }\n }\n } else {\n var fraction = this.convertToFraction(value, symbols.zeroDigit());\n var outputScale = Math.min(Math.max(fraction.length, this.minWidth), this.maxWidth);\n fraction = fraction.substr(0, outputScale);\n\n if (fraction * 1 > 0) {\n while (fraction.length > this.minWidth && fraction[fraction.length - 1] === '0') {\n fraction = fraction.substr(0, fraction.length - 1);\n }\n }\n\n var str = fraction;\n str = symbols.convertNumberToI18N(str);\n\n if (this.decimalPoint) {\n buf.append(symbols.decimalSeparator());\n }\n\n buf.append(str);\n }\n\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var effectiveMin = context.isStrict() ? this.minWidth : 0;\n var effectiveMax = context.isStrict() ? this.maxWidth : 9;\n var length = text.length;\n\n if (position === length) {\n return effectiveMin > 0 ? ~position : position;\n }\n\n if (this.decimalPoint) {\n if (text[position] !== context.symbols().decimalSeparator()) {\n return effectiveMin > 0 ? ~position : position;\n }\n\n position++;\n }\n\n var minEndPos = position + effectiveMin;\n\n if (minEndPos > length) {\n return ~position;\n }\n\n var maxEndPos = Math.min(position + effectiveMax, length);\n var total = 0;\n var pos = position;\n\n while (pos < maxEndPos) {\n var ch = text.charAt(pos++);\n var digit = context.symbols().convertToDigit(ch);\n\n if (digit < 0) {\n if (pos < minEndPos) {\n return ~position;\n }\n\n pos--;\n break;\n }\n\n total = total * 10 + digit;\n }\n\n var moveLeft = pos - position;\n var scale = Math.pow(10, moveLeft);\n var value = this.convertFromFraction(total, scale);\n return context.setParsedField(this.field, value, position, pos);\n };\n\n _proto.convertToFraction = function convertToFraction(value, zeroDigit) {\n var range = this.field.range();\n range.checkValidValue(value, this.field);\n\n var _min = range.minimum();\n\n var _range = range.maximum() - _min + 1;\n\n var _value = value - _min;\n\n var _scaled = MathUtil.intDiv(_value * 1000000000, _range);\n\n var fraction = '' + _scaled;\n\n while (fraction.length < 9) {\n fraction = zeroDigit + fraction;\n }\n\n return fraction;\n };\n\n _proto.convertFromFraction = function convertFromFraction(total, scale) {\n var range = this.field.range();\n\n var _min = range.minimum();\n\n var _range = range.maximum() - _min + 1;\n\n var _value = MathUtil.intDiv(total * _range, scale);\n\n return _value;\n };\n\n _proto.toString = function toString() {\n var decimal = this.decimalPoint ? ',DecimalPoint' : '';\n return 'Fraction(' + this.field + ',' + this.minWidth + ',' + this.maxWidth + decimal + ')';\n };\n\n return FractionPrinterParser;\n}();\n\nvar MAX_WIDTH = 15;\nvar EXCEED_POINTS = [0, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000];\nvar NumberPrinterParser = function () {\n function NumberPrinterParser(field, minWidth, maxWidth, signStyle, subsequentWidth) {\n if (subsequentWidth === void 0) {\n subsequentWidth = 0;\n }\n\n this._field = field;\n this._minWidth = minWidth;\n this._maxWidth = maxWidth;\n this._signStyle = signStyle;\n this._subsequentWidth = subsequentWidth;\n }\n\n var _proto = NumberPrinterParser.prototype;\n\n _proto.field = function field() {\n return this._field;\n };\n\n _proto.minWidth = function minWidth() {\n return this._minWidth;\n };\n\n _proto.maxWidth = function maxWidth() {\n return this._maxWidth;\n };\n\n _proto.signStyle = function signStyle() {\n return this._signStyle;\n };\n\n _proto.withFixedWidth = function withFixedWidth() {\n if (this._subsequentWidth === -1) {\n return this;\n }\n\n return new NumberPrinterParser(this._field, this._minWidth, this._maxWidth, this._signStyle, -1);\n };\n\n _proto.withSubsequentWidth = function withSubsequentWidth(subsequentWidth) {\n return new NumberPrinterParser(this._field, this._minWidth, this._maxWidth, this._signStyle, this._subsequentWidth + subsequentWidth);\n };\n\n _proto._isFixedWidth = function _isFixedWidth() {\n return this._subsequentWidth === -1 || this._subsequentWidth > 0 && this._minWidth === this._maxWidth && this._signStyle === SignStyle.NOT_NEGATIVE;\n };\n\n _proto.print = function print(context, buf) {\n var contextValue = context.getValue(this._field);\n\n if (contextValue == null) {\n return false;\n }\n\n var value = this._getValue(context, contextValue);\n\n var symbols = context.symbols();\n var str = '' + Math.abs(value);\n\n if (str.length > this._maxWidth) {\n throw new DateTimeException('Field ' + this._field + ' cannot be printed as the value ' + value + ' exceeds the maximum print width of ' + this._maxWidth);\n }\n\n str = symbols.convertNumberToI18N(str);\n\n if (value >= 0) {\n switch (this._signStyle) {\n case SignStyle.EXCEEDS_PAD:\n if (this._minWidth < MAX_WIDTH && value >= EXCEED_POINTS[this._minWidth]) {\n buf.append(symbols.positiveSign());\n }\n\n break;\n\n case SignStyle.ALWAYS:\n buf.append(symbols.positiveSign());\n break;\n }\n } else {\n switch (this._signStyle) {\n case SignStyle.NORMAL:\n case SignStyle.EXCEEDS_PAD:\n case SignStyle.ALWAYS:\n buf.append(symbols.negativeSign());\n break;\n\n case SignStyle.NOT_NEGATIVE:\n throw new DateTimeException('Field ' + this._field + ' cannot be printed as the value ' + value + ' cannot be negative according to the SignStyle');\n }\n }\n\n for (var i = 0; i < this._minWidth - str.length; i++) {\n buf.append(symbols.zeroDigit());\n }\n\n buf.append(str);\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var length = text.length;\n\n if (position === length) {\n return ~position;\n }\n\n assert(position >= 0 && position < length);\n var sign = text.charAt(position);\n var negative = false;\n var positive = false;\n\n if (sign === context.symbols().positiveSign()) {\n if (this._signStyle.parse(true, context.isStrict(), this._minWidth === this._maxWidth) === false) {\n return ~position;\n }\n\n positive = true;\n position++;\n } else if (sign === context.symbols().negativeSign()) {\n if (this._signStyle.parse(false, context.isStrict(), this._minWidth === this._maxWidth) === false) {\n return ~position;\n }\n\n negative = true;\n position++;\n } else {\n if (this._signStyle === SignStyle.ALWAYS && context.isStrict()) {\n return ~position;\n }\n }\n\n var effMinWidth = context.isStrict() || this._isFixedWidth() ? this._minWidth : 1;\n var minEndPos = position + effMinWidth;\n\n if (minEndPos > length) {\n return ~position;\n }\n\n var effMaxWidth = (context.isStrict() || this._isFixedWidth() ? this._maxWidth : 9) + Math.max(this._subsequentWidth, 0);\n var total = 0;\n var pos = position;\n\n for (var pass = 0; pass < 2; pass++) {\n var maxEndPos = Math.min(pos + effMaxWidth, length);\n\n while (pos < maxEndPos) {\n var ch = text.charAt(pos++);\n var digit = context.symbols().convertToDigit(ch);\n\n if (digit < 0) {\n pos--;\n\n if (pos < minEndPos) {\n return ~position;\n }\n\n break;\n }\n\n if (pos - position > MAX_WIDTH) {\n throw new ArithmeticException('number text exceeds length');\n } else {\n total = total * 10 + digit;\n }\n }\n\n if (this._subsequentWidth > 0 && pass === 0) {\n var parseLen = pos - position;\n effMaxWidth = Math.max(effMinWidth, parseLen - this._subsequentWidth);\n pos = position;\n total = 0;\n } else {\n break;\n }\n }\n\n if (negative) {\n if (total === 0 && context.isStrict()) {\n return ~(position - 1);\n }\n\n if (total !== 0) {\n total = -total;\n }\n } else if (this._signStyle === SignStyle.EXCEEDS_PAD && context.isStrict()) {\n var _parseLen = pos - position;\n\n if (positive) {\n if (_parseLen <= this._minWidth) {\n return ~(position - 1);\n }\n } else {\n if (_parseLen > this._minWidth) {\n return ~position;\n }\n }\n }\n\n return this._setValue(context, total, position, pos);\n };\n\n _proto._getValue = function _getValue(context, value) {\n return value;\n };\n\n _proto._setValue = function _setValue(context, value, errorPos, successPos) {\n return context.setParsedField(this._field, value, errorPos, successPos);\n };\n\n _proto.toString = function toString() {\n if (this._minWidth === 1 && this._maxWidth === MAX_WIDTH && this._signStyle === SignStyle.NORMAL) {\n return 'Value(' + this._field + ')';\n }\n\n if (this._minWidth === this._maxWidth && this._signStyle === SignStyle.NOT_NEGATIVE) {\n return 'Value(' + this._field + ',' + this._minWidth + ')';\n }\n\n return 'Value(' + this._field + ',' + this._minWidth + ',' + this._maxWidth + ',' + this._signStyle + ')';\n };\n\n return NumberPrinterParser;\n}();\nvar ReducedPrinterParser = function (_NumberPrinterParser) {\n _inheritsLoose(ReducedPrinterParser, _NumberPrinterParser);\n\n function ReducedPrinterParser(field, width, maxWidth, baseValue, baseDate) {\n var _this;\n\n _this = _NumberPrinterParser.call(this, field, width, maxWidth, SignStyle.NOT_NEGATIVE) || this;\n\n if (width < 1 || width > 10) {\n throw new IllegalArgumentException('The width must be from 1 to 10 inclusive but was ' + width);\n }\n\n if (maxWidth < 1 || maxWidth > 10) {\n throw new IllegalArgumentException('The maxWidth must be from 1 to 10 inclusive but was ' + maxWidth);\n }\n\n if (maxWidth < width) {\n throw new IllegalArgumentException('The maxWidth must be greater than the width');\n }\n\n if (baseDate === null) {\n if (field.range().isValidValue(baseValue) === false) {\n throw new IllegalArgumentException('The base value must be within the range of the field');\n }\n\n if (baseValue + EXCEED_POINTS[width] > MathUtil.MAX_SAFE_INTEGER) {\n throw new DateTimeException('Unable to add printer-parser as the range exceeds the capacity of an int');\n }\n }\n\n _this._baseValue = baseValue;\n _this._baseDate = baseDate;\n return _this;\n }\n\n var _proto2 = ReducedPrinterParser.prototype;\n\n _proto2._getValue = function _getValue(context, value) {\n var absValue = Math.abs(value);\n var baseValue = this._baseValue;\n\n if (this._baseDate !== null) {\n context.temporal();\n var chrono = IsoChronology.INSTANCE;\n baseValue = chrono.date(this._baseDate).get(this._field);\n }\n\n if (value >= baseValue && value < baseValue + EXCEED_POINTS[this._minWidth]) {\n return absValue % EXCEED_POINTS[this._minWidth];\n }\n\n return absValue % EXCEED_POINTS[this._maxWidth];\n };\n\n _proto2._setValue = function _setValue(context, value, errorPos, successPos) {\n var baseValue = this._baseValue;\n\n if (this._baseDate != null) {\n var chrono = context.getEffectiveChronology();\n baseValue = chrono.date(this._baseDate).get(this._field);\n }\n\n var parseLen = successPos - errorPos;\n\n if (parseLen === this._minWidth && value >= 0) {\n var range = EXCEED_POINTS[this._minWidth];\n var lastPart = baseValue % range;\n var basePart = baseValue - lastPart;\n\n if (baseValue > 0) {\n value = basePart + value;\n } else {\n value = basePart - value;\n }\n\n if (value < baseValue) {\n value += range;\n }\n }\n\n return context.setParsedField(this._field, value, errorPos, successPos);\n };\n\n _proto2.withFixedWidth = function withFixedWidth() {\n if (this._subsequentWidth === -1) {\n return this;\n }\n\n return new ReducedPrinterParser(this._field, this._minWidth, this._maxWidth, this._baseValue, this._baseDate, -1);\n };\n\n _proto2.withSubsequentWidth = function withSubsequentWidth(subsequentWidth) {\n return new ReducedPrinterParser(this._field, this._minWidth, this._maxWidth, this._baseValue, this._baseDate, this._subsequentWidth + subsequentWidth);\n };\n\n _proto2.isFixedWidth = function isFixedWidth(context) {\n if (context.isStrict() === false) {\n return false;\n }\n\n return _NumberPrinterParser.prototype.isFixedWidth.call(this, context);\n };\n\n _proto2.toString = function toString() {\n return 'ReducedValue(' + this._field + ',' + this._minWidth + ',' + this._maxWidth + ',' + (this._baseDate != null ? this._baseDate : this._baseValue) + ')';\n };\n\n return ReducedPrinterParser;\n}(NumberPrinterParser);\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar PATTERNS = ['+HH', '+HHmm', '+HH:mm', '+HHMM', '+HH:MM', '+HHMMss', '+HH:MM:ss', '+HHMMSS', '+HH:MM:SS'];\nvar OffsetIdPrinterParser = function () {\n function OffsetIdPrinterParser(noOffsetText, pattern) {\n requireNonNull(noOffsetText, 'noOffsetText');\n requireNonNull(pattern, 'pattern');\n this.noOffsetText = noOffsetText;\n this.type = this._checkPattern(pattern);\n }\n\n var _proto = OffsetIdPrinterParser.prototype;\n\n _proto._checkPattern = function _checkPattern(pattern) {\n for (var i = 0; i < PATTERNS.length; i++) {\n if (PATTERNS[i] === pattern) {\n return i;\n }\n }\n\n throw new IllegalArgumentException('Invalid zone offset pattern: ' + pattern);\n };\n\n _proto.print = function print(context, buf) {\n var offsetSecs = context.getValue(ChronoField.OFFSET_SECONDS);\n\n if (offsetSecs == null) {\n return false;\n }\n\n var totalSecs = MathUtil.safeToInt(offsetSecs);\n\n if (totalSecs === 0) {\n buf.append(this.noOffsetText);\n } else {\n var absHours = Math.abs(MathUtil.intMod(MathUtil.intDiv(totalSecs, 3600), 100));\n var absMinutes = Math.abs(MathUtil.intMod(MathUtil.intDiv(totalSecs, 60), 60));\n var absSeconds = Math.abs(MathUtil.intMod(totalSecs, 60));\n var bufPos = buf.length();\n var output = absHours;\n buf.append(totalSecs < 0 ? '-' : '+').appendChar(MathUtil.intDiv(absHours, 10) + '0').appendChar(MathUtil.intMod(absHours, 10) + '0');\n\n if (this.type >= 3 || this.type >= 1 && absMinutes > 0) {\n buf.append(this.type % 2 === 0 ? ':' : '').appendChar(MathUtil.intDiv(absMinutes, 10) + '0').appendChar(absMinutes % 10 + '0');\n output += absMinutes;\n\n if (this.type >= 7 || this.type >= 5 && absSeconds > 0) {\n buf.append(this.type % 2 === 0 ? ':' : '').appendChar(MathUtil.intDiv(absSeconds, 10) + '0').appendChar(absSeconds % 10 + '0');\n output += absSeconds;\n }\n }\n\n if (output === 0) {\n buf.setLength(bufPos);\n buf.append(this.noOffsetText);\n }\n }\n\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var length = text.length;\n var noOffsetLen = this.noOffsetText.length;\n\n if (noOffsetLen === 0) {\n if (position === length) {\n return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position);\n }\n } else {\n if (position === length) {\n return ~position;\n }\n\n if (context.subSequenceEquals(text, position, this.noOffsetText, 0, noOffsetLen)) {\n return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position + noOffsetLen);\n }\n }\n\n var sign = text[position];\n\n if (sign === '+' || sign === '-') {\n var negative = sign === '-' ? -1 : 1;\n var array = [0, 0, 0, 0];\n array[0] = position + 1;\n\n if ((this._parseNumber(array, 1, text, true) || this._parseNumber(array, 2, text, this.type >= 3) || this._parseNumber(array, 3, text, false)) === false) {\n var offsetSecs = MathUtil.safeZero(negative * (array[1] * 3600 + array[2] * 60 + array[3]));\n return context.setParsedField(ChronoField.OFFSET_SECONDS, offsetSecs, position, array[0]);\n }\n }\n\n if (noOffsetLen === 0) {\n return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position + noOffsetLen);\n }\n\n return ~position;\n };\n\n _proto._parseNumber = function _parseNumber(array, arrayIndex, parseText, required) {\n if ((this.type + 3) / 2 < arrayIndex) {\n return false;\n }\n\n var pos = array[0];\n\n if (this.type % 2 === 0 && arrayIndex > 1) {\n if (pos + 1 > parseText.length || parseText[pos] !== ':') {\n return required;\n }\n\n pos++;\n }\n\n if (pos + 2 > parseText.length) {\n return required;\n }\n\n var ch1 = parseText[pos++];\n var ch2 = parseText[pos++];\n\n if (ch1 < '0' || ch1 > '9' || ch2 < '0' || ch2 > '9') {\n return required;\n }\n\n var value = (ch1.charCodeAt(0) - 48) * 10 + (ch2.charCodeAt(0) - 48);\n\n if (value < 0 || value > 59) {\n return required;\n }\n\n array[arrayIndex] = value;\n array[0] = pos;\n return false;\n };\n\n _proto.toString = function toString() {\n var converted = this.noOffsetText.replace('\\'', '\\'\\'');\n return 'Offset(' + PATTERNS[this.type] + ',\\'' + converted + '\\')';\n };\n\n return OffsetIdPrinterParser;\n}();\nOffsetIdPrinterParser.INSTANCE_ID = new OffsetIdPrinterParser('Z', '+HH:MM:ss');\nOffsetIdPrinterParser.PATTERNS = PATTERNS;\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar PadPrinterParserDecorator = function () {\n function PadPrinterParserDecorator(printerParser, padWidth, padChar) {\n this._printerParser = printerParser;\n this._padWidth = padWidth;\n this._padChar = padChar;\n }\n\n var _proto = PadPrinterParserDecorator.prototype;\n\n _proto.print = function print(context, buf) {\n var preLen = buf.length();\n\n if (this._printerParser.print(context, buf) === false) {\n return false;\n }\n\n var len = buf.length() - preLen;\n\n if (len > this._padWidth) {\n throw new DateTimeException(\"Cannot print as output of \" + len + \" characters exceeds pad width of \" + this._padWidth);\n }\n\n for (var i = 0; i < this._padWidth - len; i++) {\n buf.insert(preLen, this._padChar);\n }\n\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var strict = context.isStrict();\n var caseSensitive = context.isCaseSensitive();\n assert(!(position > text.length));\n assert(position >= 0);\n\n if (position === text.length) {\n return ~position;\n }\n\n var endPos = position + this._padWidth;\n\n if (endPos > text.length) {\n if (strict) {\n return ~position;\n }\n\n endPos = text.length;\n }\n\n var pos = position;\n\n while (pos < endPos && (caseSensitive ? text[pos] === this._padChar : context.charEquals(text[pos], this._padChar))) {\n pos++;\n }\n\n text = text.substring(0, endPos);\n\n var resultPos = this._printerParser.parse(context, text, pos);\n\n if (resultPos !== endPos && strict) {\n return ~(position + pos);\n }\n\n return resultPos;\n };\n\n _proto.toString = function toString() {\n return \"Pad(\" + this._printerParser + \",\" + this._padWidth + (this._padChar === ' ' ? ')' : ',\\'' + this._padChar + '\\')');\n };\n\n return PadPrinterParserDecorator;\n}();\n\nvar SettingsParser = function (_Enum) {\n _inheritsLoose(SettingsParser, _Enum);\n\n function SettingsParser() {\n return _Enum.apply(this, arguments) || this;\n }\n\n var _proto = SettingsParser.prototype;\n\n _proto.print = function print() {\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n switch (this) {\n case SettingsParser.SENSITIVE:\n context.setCaseSensitive(true);\n break;\n\n case SettingsParser.INSENSITIVE:\n context.setCaseSensitive(false);\n break;\n\n case SettingsParser.STRICT:\n context.setStrict(true);\n break;\n\n case SettingsParser.LENIENT:\n context.setStrict(false);\n break;\n }\n\n return position;\n };\n\n _proto.toString = function toString() {\n switch (this) {\n case SettingsParser.SENSITIVE:\n return 'ParseCaseSensitive(true)';\n\n case SettingsParser.INSENSITIVE:\n return 'ParseCaseSensitive(false)';\n\n case SettingsParser.STRICT:\n return 'ParseStrict(true)';\n\n case SettingsParser.LENIENT:\n return 'ParseStrict(false)';\n }\n };\n\n return SettingsParser;\n}(Enum);\nSettingsParser.SENSITIVE = new SettingsParser('SENSITIVE');\nSettingsParser.INSENSITIVE = new SettingsParser('INSENSITIVE');\nSettingsParser.STRICT = new SettingsParser('STRICT');\nSettingsParser.LENIENT = new SettingsParser('LENIENT');\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar StringLiteralPrinterParser = function () {\n function StringLiteralPrinterParser(literal) {\n this._literal = literal;\n }\n\n var _proto = StringLiteralPrinterParser.prototype;\n\n _proto.print = function print(context, buf) {\n buf.append(this._literal);\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var length = text.length;\n assert(!(position > length || position < 0));\n\n if (context.subSequenceEquals(text, position, this._literal, 0, this._literal.length) === false) {\n return ~position;\n }\n\n return position + this._literal.length;\n };\n\n _proto.toString = function toString() {\n var converted = this._literal.replace(\"'\", \"''\");\n\n return '\\'' + converted + '\\'';\n };\n\n return StringLiteralPrinterParser;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter, Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ZoneRulesProvider = function () {\n function ZoneRulesProvider() {}\n\n ZoneRulesProvider.getRules = function getRules(zoneId) {\n throw new DateTimeException('unsupported ZoneId:' + zoneId);\n };\n\n ZoneRulesProvider.getAvailableZoneIds = function getAvailableZoneIds() {\n return [];\n };\n\n return ZoneRulesProvider;\n}();\n\nvar ZoneRegion = function (_ZoneId) {\n _inheritsLoose(ZoneRegion, _ZoneId);\n\n ZoneRegion.ofId = function ofId(zoneId) {\n var rules = ZoneRulesProvider.getRules(zoneId);\n return new ZoneRegion(zoneId, rules);\n };\n\n function ZoneRegion(id, rules) {\n var _this;\n\n _this = _ZoneId.call(this) || this;\n _this._id = id;\n _this._rules = rules;\n return _this;\n }\n\n var _proto = ZoneRegion.prototype;\n\n _proto.id = function id() {\n return this._id;\n };\n\n _proto.rules = function rules() {\n return this._rules;\n };\n\n return ZoneRegion;\n}(ZoneId);\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ZoneIdPrinterParser = function () {\n function ZoneIdPrinterParser(query, description) {\n this.query = query;\n this.description = description;\n }\n\n var _proto = ZoneIdPrinterParser.prototype;\n\n _proto.print = function print(context, buf) {\n var zone = context.getValueQuery(this.query);\n\n if (zone == null) {\n return false;\n }\n\n buf.append(zone.id());\n return true;\n };\n\n _proto.parse = function parse(context, text, position) {\n var length = text.length;\n\n if (position > length) {\n return ~position;\n }\n\n if (position === length) {\n return ~position;\n }\n\n var nextChar = text.charAt(position);\n\n if (nextChar === '+' || nextChar === '-') {\n var newContext = context.copy();\n var endPos = OffsetIdPrinterParser.INSTANCE_ID.parse(newContext, text, position);\n\n if (endPos < 0) {\n return endPos;\n }\n\n var offset = newContext.getParsed(ChronoField.OFFSET_SECONDS);\n var zone = ZoneOffset.ofTotalSeconds(offset);\n context.setParsedZone(zone);\n return endPos;\n } else if (length >= position + 2) {\n var nextNextChar = text.charAt(position + 1);\n\n if (context.charEquals(nextChar, 'U') && context.charEquals(nextNextChar, 'T')) {\n if (length >= position + 3 && context.charEquals(text.charAt(position + 2), 'C')) {\n return this._parsePrefixedOffset(context, text, position, position + 3);\n }\n\n return this._parsePrefixedOffset(context, text, position, position + 2);\n } else if (context.charEquals(nextChar, 'G') && length >= position + 3 && context.charEquals(nextNextChar, 'M') && context.charEquals(text.charAt(position + 2), 'T')) {\n return this._parsePrefixedOffset(context, text, position, position + 3);\n }\n }\n\n if (text.substr(position, 6) === 'SYSTEM') {\n context.setParsedZone(ZoneId.systemDefault());\n return position + 6;\n }\n\n if (context.charEquals(nextChar, 'Z')) {\n context.setParsedZone(ZoneOffset.UTC);\n return position + 1;\n }\n\n var availableZoneIds = ZoneRulesProvider.getAvailableZoneIds();\n\n if (zoneIdTree.size !== availableZoneIds.length) {\n zoneIdTree = ZoneIdTree.createTreeMap(availableZoneIds);\n }\n\n var maxParseLength = length - position;\n var treeMap = zoneIdTree.treeMap;\n var parsedZoneId = null;\n var parseLength = 0;\n\n while (treeMap != null) {\n var parsedSubZoneId = text.substr(position, Math.min(treeMap.length, maxParseLength));\n treeMap = treeMap.get(parsedSubZoneId);\n\n if (treeMap != null && treeMap.isLeaf) {\n parsedZoneId = parsedSubZoneId;\n parseLength = treeMap.length;\n }\n }\n\n if (parsedZoneId != null) {\n context.setParsedZone(ZoneRegion.ofId(parsedZoneId));\n return position + parseLength;\n }\n\n return ~position;\n };\n\n _proto._parsePrefixedOffset = function _parsePrefixedOffset(context, text, prefixPos, position) {\n var prefix = text.substring(prefixPos, position).toUpperCase();\n var newContext = context.copy();\n\n if (position < text.length && context.charEquals(text.charAt(position), 'Z')) {\n context.setParsedZone(ZoneId.ofOffset(prefix, ZoneOffset.UTC));\n return position;\n }\n\n var endPos = OffsetIdPrinterParser.INSTANCE_ID.parse(newContext, text, position);\n\n if (endPos < 0) {\n context.setParsedZone(ZoneId.ofOffset(prefix, ZoneOffset.UTC));\n return position;\n }\n\n var offsetSecs = newContext.getParsed(ChronoField.OFFSET_SECONDS);\n var offset = ZoneOffset.ofTotalSeconds(offsetSecs);\n context.setParsedZone(ZoneId.ofOffset(prefix, offset));\n return endPos;\n };\n\n _proto.toString = function toString() {\n return this.description;\n };\n\n return ZoneIdPrinterParser;\n}();\n\nvar ZoneIdTree = function () {\n ZoneIdTree.createTreeMap = function createTreeMap(availableZoneIds) {\n var sortedZoneIds = availableZoneIds.sort(function (a, b) {\n return a.length - b.length;\n });\n var treeMap = new ZoneIdTreeMap(sortedZoneIds[0].length, false);\n\n for (var i = 0; i < sortedZoneIds.length; i++) {\n treeMap.add(sortedZoneIds[i]);\n }\n\n return new ZoneIdTree(sortedZoneIds.length, treeMap);\n };\n\n function ZoneIdTree(size, treeMap) {\n this.size = size;\n this.treeMap = treeMap;\n }\n\n return ZoneIdTree;\n}();\n\nvar ZoneIdTreeMap = function () {\n function ZoneIdTreeMap(length, isLeaf) {\n if (length === void 0) {\n length = 0;\n }\n\n if (isLeaf === void 0) {\n isLeaf = false;\n }\n\n this.length = length;\n this.isLeaf = isLeaf;\n this._treeMap = {};\n }\n\n var _proto2 = ZoneIdTreeMap.prototype;\n\n _proto2.add = function add(zoneId) {\n var idLength = zoneId.length;\n\n if (idLength === this.length) {\n this._treeMap[zoneId] = new ZoneIdTreeMap(idLength, true);\n } else if (idLength > this.length) {\n var subZoneId = zoneId.substr(0, this.length);\n var subTreeMap = this._treeMap[subZoneId];\n\n if (subTreeMap == null) {\n subTreeMap = new ZoneIdTreeMap(idLength, false);\n this._treeMap[subZoneId] = subTreeMap;\n }\n\n subTreeMap.add(zoneId);\n }\n };\n\n _proto2.get = function get(zoneId) {\n return this._treeMap[zoneId];\n };\n\n return ZoneIdTreeMap;\n}();\n\nvar zoneIdTree = new ZoneIdTree([]);\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar MAX_WIDTH$1 = 15;\nvar DateTimeFormatterBuilder = function () {\n function DateTimeFormatterBuilder() {\n this._active = this;\n this._parent = null;\n this._printerParsers = [];\n this._optional = false;\n this._padNextWidth = 0;\n this._padNextChar = null;\n this._valueParserIndex = -1;\n }\n\n DateTimeFormatterBuilder._of = function _of(parent, optional) {\n requireNonNull(parent, 'parent');\n requireNonNull(optional, 'optional');\n var dtFormatterBuilder = new DateTimeFormatterBuilder();\n dtFormatterBuilder._parent = parent;\n dtFormatterBuilder._optional = optional;\n return dtFormatterBuilder;\n };\n\n var _proto = DateTimeFormatterBuilder.prototype;\n\n _proto.parseCaseSensitive = function parseCaseSensitive() {\n this._appendInternalPrinterParser(SettingsParser.SENSITIVE);\n\n return this;\n };\n\n _proto.parseCaseInsensitive = function parseCaseInsensitive() {\n this._appendInternalPrinterParser(SettingsParser.INSENSITIVE);\n\n return this;\n };\n\n _proto.parseStrict = function parseStrict() {\n this._appendInternalPrinterParser(SettingsParser.STRICT);\n\n return this;\n };\n\n _proto.parseLenient = function parseLenient() {\n this._appendInternalPrinterParser(SettingsParser.LENIENT);\n\n return this;\n };\n\n _proto.appendValue = function appendValue() {\n if (arguments.length === 1) {\n return this._appendValue1.apply(this, arguments);\n } else if (arguments.length === 2) {\n return this._appendValue2.apply(this, arguments);\n } else {\n return this._appendValue4.apply(this, arguments);\n }\n };\n\n _proto._appendValue1 = function _appendValue1(field) {\n requireNonNull(field);\n\n this._appendValuePrinterParser(new NumberPrinterParser(field, 1, MAX_WIDTH$1, SignStyle.NORMAL));\n\n return this;\n };\n\n _proto._appendValue2 = function _appendValue2(field, width) {\n requireNonNull(field);\n\n if (width < 1 || width > MAX_WIDTH$1) {\n throw new IllegalArgumentException(\"The width must be from 1 to \" + MAX_WIDTH$1 + \" inclusive but was \" + width);\n }\n\n var pp = new NumberPrinterParser(field, width, width, SignStyle.NOT_NEGATIVE);\n\n this._appendValuePrinterParser(pp);\n\n return this;\n };\n\n _proto._appendValue4 = function _appendValue4(field, minWidth, maxWidth, signStyle) {\n requireNonNull(field);\n requireNonNull(signStyle);\n\n if (minWidth === maxWidth && signStyle === SignStyle.NOT_NEGATIVE) {\n return this._appendValue2(field, maxWidth);\n }\n\n if (minWidth < 1 || minWidth > MAX_WIDTH$1) {\n throw new IllegalArgumentException(\"The minimum width must be from 1 to \" + MAX_WIDTH$1 + \" inclusive but was \" + minWidth);\n }\n\n if (maxWidth < 1 || maxWidth > MAX_WIDTH$1) {\n throw new IllegalArgumentException(\"The minimum width must be from 1 to \" + MAX_WIDTH$1 + \" inclusive but was \" + maxWidth);\n }\n\n if (maxWidth < minWidth) {\n throw new IllegalArgumentException(\"The maximum width must exceed or equal the minimum width but \" + maxWidth + \" < \" + minWidth);\n }\n\n var pp = new NumberPrinterParser(field, minWidth, maxWidth, signStyle);\n\n this._appendValuePrinterParser(pp);\n\n return this;\n };\n\n _proto.appendValueReduced = function appendValueReduced() {\n if (arguments.length === 4 && arguments[3] instanceof ChronoLocalDate) {\n return this._appendValueReducedFieldWidthMaxWidthBaseDate.apply(this, arguments);\n } else {\n return this._appendValueReducedFieldWidthMaxWidthBaseValue.apply(this, arguments);\n }\n };\n\n _proto._appendValueReducedFieldWidthMaxWidthBaseValue = function _appendValueReducedFieldWidthMaxWidthBaseValue(field, width, maxWidth, baseValue) {\n requireNonNull(field, 'field');\n var pp = new ReducedPrinterParser(field, width, maxWidth, baseValue, null);\n\n this._appendValuePrinterParser(pp);\n\n return this;\n };\n\n _proto._appendValueReducedFieldWidthMaxWidthBaseDate = function _appendValueReducedFieldWidthMaxWidthBaseDate(field, width, maxWidth, baseDate) {\n requireNonNull(field, 'field');\n requireNonNull(baseDate, 'baseDate');\n requireInstance(baseDate, ChronoLocalDate, 'baseDate');\n var pp = new ReducedPrinterParser(field, width, maxWidth, 0, baseDate);\n\n this._appendValuePrinterParser(pp);\n\n return this;\n };\n\n _proto._appendValuePrinterParser = function _appendValuePrinterParser(pp) {\n assert(pp != null);\n\n if (this._active._valueParserIndex >= 0 && this._active._printerParsers[this._active._valueParserIndex] instanceof NumberPrinterParser) {\n var activeValueParser = this._active._valueParserIndex;\n var basePP = this._active._printerParsers[activeValueParser];\n\n if (pp.minWidth() === pp.maxWidth() && pp.signStyle() === SignStyle.NOT_NEGATIVE) {\n basePP = basePP.withSubsequentWidth(pp.maxWidth());\n\n this._appendInternal(pp.withFixedWidth());\n\n this._active._valueParserIndex = activeValueParser;\n } else {\n basePP = basePP.withFixedWidth();\n this._active._valueParserIndex = this._appendInternal(pp);\n }\n\n this._active._printerParsers[activeValueParser] = basePP;\n } else {\n this._active._valueParserIndex = this._appendInternal(pp);\n }\n\n return this;\n };\n\n _proto.appendFraction = function appendFraction(field, minWidth, maxWidth, decimalPoint) {\n this._appendInternal(new FractionPrinterParser(field, minWidth, maxWidth, decimalPoint));\n\n return this;\n };\n\n _proto.appendInstant = function appendInstant(fractionalDigits) {\n if (fractionalDigits === void 0) {\n fractionalDigits = -2;\n }\n\n if (fractionalDigits < -2 || fractionalDigits > 9) {\n throw new IllegalArgumentException('Invalid fractional digits: ' + fractionalDigits);\n }\n\n this._appendInternal(new InstantPrinterParser(fractionalDigits));\n\n return this;\n };\n\n _proto.appendOffsetId = function appendOffsetId() {\n this._appendInternal(OffsetIdPrinterParser.INSTANCE_ID);\n\n return this;\n };\n\n _proto.appendOffset = function appendOffset(pattern, noOffsetText) {\n this._appendInternalPrinterParser(new OffsetIdPrinterParser(noOffsetText, pattern));\n\n return this;\n };\n\n _proto.appendZoneId = function appendZoneId() {\n this._appendInternal(new ZoneIdPrinterParser(TemporalQueries.zoneId(), 'ZoneId()'));\n\n return this;\n };\n\n _proto.appendPattern = function appendPattern(pattern) {\n requireNonNull(pattern, 'pattern');\n\n this._parsePattern(pattern);\n\n return this;\n };\n\n _proto.appendZoneText = function appendZoneText() {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented, use js-joda-locale plugin!');\n };\n\n _proto.appendText = function appendText() {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented, use js-joda-locale plugin!');\n };\n\n _proto.appendLocalizedOffset = function appendLocalizedOffset() {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented, use js-joda-locale plugin!');\n };\n\n _proto.appendWeekField = function appendWeekField() {\n throw new IllegalArgumentException('Pattern using (localized) text not implemented, use js-joda-locale plugin!');\n };\n\n _proto._parsePattern = function _parsePattern(pattern) {\n var FIELD_MAP = {\n 'G': ChronoField.ERA,\n 'y': ChronoField.YEAR_OF_ERA,\n 'u': ChronoField.YEAR,\n 'Q': IsoFields.QUARTER_OF_YEAR,\n 'q': IsoFields.QUARTER_OF_YEAR,\n 'M': ChronoField.MONTH_OF_YEAR,\n 'L': ChronoField.MONTH_OF_YEAR,\n 'D': ChronoField.DAY_OF_YEAR,\n 'd': ChronoField.DAY_OF_MONTH,\n 'F': ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH,\n 'E': ChronoField.DAY_OF_WEEK,\n 'c': ChronoField.DAY_OF_WEEK,\n 'e': ChronoField.DAY_OF_WEEK,\n 'a': ChronoField.AMPM_OF_DAY,\n 'H': ChronoField.HOUR_OF_DAY,\n 'k': ChronoField.CLOCK_HOUR_OF_DAY,\n 'K': ChronoField.HOUR_OF_AMPM,\n 'h': ChronoField.CLOCK_HOUR_OF_AMPM,\n 'm': ChronoField.MINUTE_OF_HOUR,\n 's': ChronoField.SECOND_OF_MINUTE,\n 'S': ChronoField.NANO_OF_SECOND,\n 'A': ChronoField.MILLI_OF_DAY,\n 'n': ChronoField.NANO_OF_SECOND,\n 'N': ChronoField.NANO_OF_DAY\n };\n\n for (var pos = 0; pos < pattern.length; pos++) {\n var cur = pattern.charAt(pos);\n\n if (cur >= 'A' && cur <= 'Z' || cur >= 'a' && cur <= 'z') {\n var start = pos++;\n\n for (; pos < pattern.length && pattern.charAt(pos) === cur; pos++) {\n }\n\n var count = pos - start;\n\n if (cur === 'p') {\n var pad = 0;\n\n if (pos < pattern.length) {\n cur = pattern.charAt(pos);\n\n if (cur >= 'A' && cur <= 'Z' || cur >= 'a' && cur <= 'z') {\n pad = count;\n start = pos++;\n\n for (; pos < pattern.length && pattern.charAt(pos) === cur; pos++) {\n }\n\n count = pos - start;\n }\n }\n\n if (pad === 0) {\n throw new IllegalArgumentException('Pad letter \\'p\\' must be followed by valid pad pattern: ' + pattern);\n }\n\n this.padNext(pad);\n }\n\n var field = FIELD_MAP[cur];\n\n if (field != null) {\n this._parseField(cur, count, field);\n } else if (cur === 'z') {\n if (count > 4) {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n } else if (count === 4) {\n this.appendZoneText(TextStyle.FULL);\n } else {\n this.appendZoneText(TextStyle.SHORT);\n }\n } else if (cur === 'V') {\n if (count !== 2) {\n throw new IllegalArgumentException('Pattern letter count must be 2: ' + cur);\n }\n\n this.appendZoneId();\n } else if (cur === 'Z') {\n if (count < 4) {\n this.appendOffset('+HHMM', '+0000');\n } else if (count === 4) {\n this.appendLocalizedOffset(TextStyle.FULL);\n } else if (count === 5) {\n this.appendOffset('+HH:MM:ss', 'Z');\n } else {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n } else if (cur === 'O') {\n if (count === 1) {\n this.appendLocalizedOffset(TextStyle.SHORT);\n } else if (count === 4) {\n this.appendLocalizedOffset(TextStyle.FULL);\n } else {\n throw new IllegalArgumentException('Pattern letter count must be 1 or 4: ' + cur);\n }\n } else if (cur === 'X') {\n if (count > 5) {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n this.appendOffset(OffsetIdPrinterParser.PATTERNS[count + (count === 1 ? 0 : 1)], 'Z');\n } else if (cur === 'x') {\n if (count > 5) {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n var zero = count === 1 ? '+00' : count % 2 === 0 ? '+0000' : '+00:00';\n this.appendOffset(OffsetIdPrinterParser.PATTERNS[count + (count === 1 ? 0 : 1)], zero);\n } else if (cur === 'W') {\n if (count > 1) {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n this.appendWeekField('W', count);\n } else if (cur === 'w') {\n if (count > 2) {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n this.appendWeekField('w', count);\n } else if (cur === 'Y') {\n this.appendWeekField('Y', count);\n } else {\n throw new IllegalArgumentException('Unknown pattern letter: ' + cur);\n }\n\n pos--;\n } else if (cur === '\\'') {\n var _start = pos++;\n\n for (; pos < pattern.length; pos++) {\n if (pattern.charAt(pos) === '\\'') {\n if (pos + 1 < pattern.length && pattern.charAt(pos + 1) === '\\'') {\n pos++;\n } else {\n break;\n }\n }\n }\n\n if (pos >= pattern.length) {\n throw new IllegalArgumentException('Pattern ends with an incomplete string literal: ' + pattern);\n }\n\n var str = pattern.substring(_start + 1, pos);\n\n if (str.length === 0) {\n this.appendLiteral('\\'');\n } else {\n this.appendLiteral(str.replace('\\'\\'', '\\''));\n }\n } else if (cur === '[') {\n this.optionalStart();\n } else if (cur === ']') {\n if (this._active._parent === null) {\n throw new IllegalArgumentException('Pattern invalid as it contains ] without previous [');\n }\n\n this.optionalEnd();\n } else if (cur === '{' || cur === '}' || cur === '#') {\n throw new IllegalArgumentException('Pattern includes reserved character: \\'' + cur + '\\'');\n } else {\n this.appendLiteral(cur);\n }\n }\n };\n\n _proto._parseField = function _parseField(cur, count, field) {\n switch (cur) {\n case 'u':\n case 'y':\n if (count === 2) {\n this.appendValueReduced(field, 2, 2, ReducedPrinterParser.BASE_DATE);\n } else if (count < 4) {\n this.appendValue(field, count, MAX_WIDTH$1, SignStyle.NORMAL);\n } else {\n this.appendValue(field, count, MAX_WIDTH$1, SignStyle.EXCEEDS_PAD);\n }\n\n break;\n\n case 'M':\n case 'Q':\n switch (count) {\n case 1:\n this.appendValue(field);\n break;\n\n case 2:\n this.appendValue(field, 2);\n break;\n\n case 3:\n this.appendText(field, TextStyle.SHORT);\n break;\n\n case 4:\n this.appendText(field, TextStyle.FULL);\n break;\n\n case 5:\n this.appendText(field, TextStyle.NARROW);\n break;\n\n default:\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'L':\n case 'q':\n switch (count) {\n case 1:\n this.appendValue(field);\n break;\n\n case 2:\n this.appendValue(field, 2);\n break;\n\n case 3:\n this.appendText(field, TextStyle.SHORT_STANDALONE);\n break;\n\n case 4:\n this.appendText(field, TextStyle.FULL_STANDALONE);\n break;\n\n case 5:\n this.appendText(field, TextStyle.NARROW_STANDALONE);\n break;\n\n default:\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'e':\n switch (count) {\n case 1:\n case 2:\n this.appendWeekField('e', count);\n break;\n\n case 3:\n this.appendText(field, TextStyle.SHORT);\n break;\n\n case 4:\n this.appendText(field, TextStyle.FULL);\n break;\n\n case 5:\n this.appendText(field, TextStyle.NARROW);\n break;\n\n default:\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'c':\n switch (count) {\n case 1:\n this.appendWeekField('c', count);\n break;\n\n case 2:\n throw new IllegalArgumentException('Invalid number of pattern letters: ' + cur);\n\n case 3:\n this.appendText(field, TextStyle.SHORT_STANDALONE);\n break;\n\n case 4:\n this.appendText(field, TextStyle.FULL_STANDALONE);\n break;\n\n case 5:\n this.appendText(field, TextStyle.NARROW_STANDALONE);\n break;\n\n default:\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'a':\n if (count === 1) {\n this.appendText(field, TextStyle.SHORT);\n } else {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'E':\n case 'G':\n switch (count) {\n case 1:\n case 2:\n case 3:\n this.appendText(field, TextStyle.SHORT);\n break;\n\n case 4:\n this.appendText(field, TextStyle.FULL);\n break;\n\n case 5:\n this.appendText(field, TextStyle.NARROW);\n break;\n\n default:\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'S':\n this.appendFraction(ChronoField.NANO_OF_SECOND, count, count, false);\n break;\n\n case 'F':\n if (count === 1) {\n this.appendValue(field);\n } else {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'd':\n case 'h':\n case 'H':\n case 'k':\n case 'K':\n case 'm':\n case 's':\n if (count === 1) {\n this.appendValue(field);\n } else if (count === 2) {\n this.appendValue(field, count);\n } else {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n case 'D':\n if (count === 1) {\n this.appendValue(field);\n } else if (count <= 3) {\n this.appendValue(field, count);\n } else {\n throw new IllegalArgumentException('Too many pattern letters: ' + cur);\n }\n\n break;\n\n default:\n if (count === 1) {\n this.appendValue(field);\n } else {\n this.appendValue(field, count);\n }\n\n break;\n }\n };\n\n _proto.padNext = function padNext() {\n if (arguments.length === 1) {\n return this._padNext1.apply(this, arguments);\n } else {\n return this._padNext2.apply(this, arguments);\n }\n };\n\n _proto._padNext1 = function _padNext1(padWidth) {\n return this._padNext2(padWidth, ' ');\n };\n\n _proto._padNext2 = function _padNext2(padWidth, padChar) {\n if (padWidth < 1) {\n throw new IllegalArgumentException('The pad width must be at least one but was ' + padWidth);\n }\n\n this._active._padNextWidth = padWidth;\n this._active._padNextChar = padChar;\n this._active._valueParserIndex = -1;\n return this;\n };\n\n _proto.optionalStart = function optionalStart() {\n this._active._valueParserIndex = -1;\n this._active = DateTimeFormatterBuilder._of(this._active, true);\n return this;\n };\n\n _proto.optionalEnd = function optionalEnd() {\n if (this._active._parent == null) {\n throw new IllegalStateException('Cannot call optionalEnd() as there was no previous call to optionalStart()');\n }\n\n if (this._active._printerParsers.length > 0) {\n var cpp = new CompositePrinterParser(this._active._printerParsers, this._active._optional);\n this._active = this._active._parent;\n\n this._appendInternal(cpp);\n } else {\n this._active = this._active._parent;\n }\n\n return this;\n };\n\n _proto._appendInternal = function _appendInternal(pp) {\n assert(pp != null);\n\n if (this._active._padNextWidth > 0) {\n if (pp != null) {\n pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n }\n\n this._active._padNextWidth = 0;\n this._active._padNextChar = 0;\n }\n\n this._active._printerParsers.push(pp);\n\n this._active._valueParserIndex = -1;\n return this._active._printerParsers.length - 1;\n };\n\n _proto.appendLiteral = function appendLiteral(literal) {\n assert(literal != null);\n\n if (literal.length > 0) {\n if (literal.length === 1) {\n this._appendInternalPrinterParser(new CharLiteralPrinterParser(literal.charAt(0)));\n } else {\n this._appendInternalPrinterParser(new StringLiteralPrinterParser(literal));\n }\n }\n\n return this;\n };\n\n _proto._appendInternalPrinterParser = function _appendInternalPrinterParser(pp) {\n assert(pp != null);\n\n if (this._active._padNextWidth > 0) {\n if (pp != null) {\n pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n }\n\n this._active._padNextWidth = 0;\n this._active._padNextChar = 0;\n }\n\n this._active._printerParsers.push(pp);\n\n this._active._valueParserIndex = -1;\n return this._active._printerParsers.length - 1;\n };\n\n _proto.append = function append(formatter) {\n requireNonNull(formatter, 'formatter');\n\n this._appendInternal(formatter._toPrinterParser(false));\n\n return this;\n };\n\n _proto.toFormatter = function toFormatter(resolverStyle) {\n if (resolverStyle === void 0) {\n resolverStyle = ResolverStyle.SMART;\n }\n\n while (this._active._parent != null) {\n this.optionalEnd();\n }\n\n var pp = new CompositePrinterParser(this._printerParsers, false);\n return new DateTimeFormatter(pp, null, DecimalStyle.STANDARD, resolverStyle, null, null, null);\n };\n\n return DateTimeFormatterBuilder;\n}();\nvar SECONDS_PER_10000_YEARS = 146097 * 25 * 86400;\nvar SECONDS_0000_TO_1970 = (146097 * 5 - (30 * 365 + 7)) * 86400;\n\nvar InstantPrinterParser = function () {\n function InstantPrinterParser(fractionalDigits) {\n this.fractionalDigits = fractionalDigits;\n }\n\n var _proto2 = InstantPrinterParser.prototype;\n\n _proto2.print = function print(context, buf) {\n var inSecs = context.getValue(ChronoField.INSTANT_SECONDS);\n var inNanos = 0;\n\n if (context.temporal().isSupported(ChronoField.NANO_OF_SECOND)) {\n inNanos = context.temporal().getLong(ChronoField.NANO_OF_SECOND);\n }\n\n if (inSecs == null) {\n return false;\n }\n\n var inSec = inSecs;\n var inNano = ChronoField.NANO_OF_SECOND.checkValidIntValue(inNanos);\n\n if (inSec >= -SECONDS_0000_TO_1970) {\n var zeroSecs = inSec - SECONDS_PER_10000_YEARS + SECONDS_0000_TO_1970;\n var hi = MathUtil.floorDiv(zeroSecs, SECONDS_PER_10000_YEARS) + 1;\n var lo = MathUtil.floorMod(zeroSecs, SECONDS_PER_10000_YEARS);\n var ldt = LocalDateTime.ofEpochSecond(lo - SECONDS_0000_TO_1970, 0, ZoneOffset.UTC);\n\n if (hi > 0) {\n buf.append('+').append(hi);\n }\n\n buf.append(ldt);\n\n if (ldt.second() === 0) {\n buf.append(':00');\n }\n } else {\n var _zeroSecs = inSec + SECONDS_0000_TO_1970;\n\n var _hi = MathUtil.intDiv(_zeroSecs, SECONDS_PER_10000_YEARS);\n\n var _lo = MathUtil.intMod(_zeroSecs, SECONDS_PER_10000_YEARS);\n\n var _ldt = LocalDateTime.ofEpochSecond(_lo - SECONDS_0000_TO_1970, 0, ZoneOffset.UTC);\n\n var pos = buf.length();\n buf.append(_ldt);\n\n if (_ldt.second() === 0) {\n buf.append(':00');\n }\n\n if (_hi < 0) {\n if (_ldt.year() === -10000) {\n buf.replace(pos, pos + 2, '' + (_hi - 1));\n } else if (_lo === 0) {\n buf.insert(pos, _hi);\n } else {\n buf.insert(pos + 1, Math.abs(_hi));\n }\n }\n }\n\n if (this.fractionalDigits === -2) {\n if (inNano !== 0) {\n buf.append('.');\n\n if (MathUtil.intMod(inNano, 1000000) === 0) {\n buf.append(('' + (MathUtil.intDiv(inNano, 1000000) + 1000)).substring(1));\n } else if (MathUtil.intMod(inNano, 1000) === 0) {\n buf.append(('' + (MathUtil.intDiv(inNano, 1000) + 1000000)).substring(1));\n } else {\n buf.append(('' + (inNano + 1000000000)).substring(1));\n }\n }\n } else if (this.fractionalDigits > 0 || this.fractionalDigits === -1 && inNano > 0) {\n buf.append('.');\n var div = 100000000;\n\n for (var i = 0; this.fractionalDigits === -1 && inNano > 0 || i < this.fractionalDigits; i++) {\n var digit = MathUtil.intDiv(inNano, div);\n buf.append(digit);\n inNano = inNano - digit * div;\n div = MathUtil.intDiv(div, 10);\n }\n }\n\n buf.append('Z');\n return true;\n };\n\n _proto2.parse = function parse(context, text, position) {\n var newContext = context.copy();\n var minDigits = this.fractionalDigits < 0 ? 0 : this.fractionalDigits;\n var maxDigits = this.fractionalDigits < 0 ? 9 : this.fractionalDigits;\n\n var parser = new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_LOCAL_DATE).appendLiteral('T').appendValue(ChronoField.HOUR_OF_DAY, 2).appendLiteral(':').appendValue(ChronoField.MINUTE_OF_HOUR, 2).appendLiteral(':').appendValue(ChronoField.SECOND_OF_MINUTE, 2).appendFraction(ChronoField.NANO_OF_SECOND, minDigits, maxDigits, true).appendLiteral('Z').toFormatter()._toPrinterParser(false);\n\n var pos = parser.parse(newContext, text, position);\n\n if (pos < 0) {\n return pos;\n }\n\n var yearParsed = newContext.getParsed(ChronoField.YEAR);\n var month = newContext.getParsed(ChronoField.MONTH_OF_YEAR);\n var day = newContext.getParsed(ChronoField.DAY_OF_MONTH);\n var hour = newContext.getParsed(ChronoField.HOUR_OF_DAY);\n var min = newContext.getParsed(ChronoField.MINUTE_OF_HOUR);\n var secVal = newContext.getParsed(ChronoField.SECOND_OF_MINUTE);\n var nanoVal = newContext.getParsed(ChronoField.NANO_OF_SECOND);\n var sec = secVal != null ? secVal : 0;\n var nano = nanoVal != null ? nanoVal : 0;\n var year = MathUtil.intMod(yearParsed, 10000);\n var days = 0;\n\n if (hour === 24 && min === 0 && sec === 0 && nano === 0) {\n hour = 0;\n days = 1;\n } else if (hour === 23 && min === 59 && sec === 60) {\n context.setParsedLeapSecond();\n sec = 59;\n }\n\n var instantSecs;\n\n try {\n var ldt = LocalDateTime.of(year, month, day, hour, min, sec, 0).plusDays(days);\n instantSecs = ldt.toEpochSecond(ZoneOffset.UTC);\n instantSecs += MathUtil.safeMultiply(MathUtil.intDiv(yearParsed, 10000), SECONDS_PER_10000_YEARS);\n } catch (ex) {\n return ~position;\n }\n\n var successPos = pos;\n successPos = context.setParsedField(ChronoField.INSTANT_SECONDS, instantSecs, position, successPos);\n return context.setParsedField(ChronoField.NANO_OF_SECOND, nano, position, successPos);\n };\n\n _proto2.toString = function toString() {\n return 'Instant()';\n };\n\n return InstantPrinterParser;\n}();\n\nfunction _init$9() {\n ReducedPrinterParser.BASE_DATE = LocalDate.of(2000, 1, 1);\n DateTimeFormatterBuilder.CompositePrinterParser = CompositePrinterParser;\n DateTimeFormatterBuilder.PadPrinterParserDecorator = PadPrinterParserDecorator;\n DateTimeFormatterBuilder.SettingsParser = SettingsParser;\n DateTimeFormatterBuilder.CharLiteralPrinterParser = StringLiteralPrinterParser;\n DateTimeFormatterBuilder.StringLiteralPrinterParser = StringLiteralPrinterParser;\n DateTimeFormatterBuilder.CharLiteralPrinterParser = CharLiteralPrinterParser;\n DateTimeFormatterBuilder.NumberPrinterParser = NumberPrinterParser;\n DateTimeFormatterBuilder.ReducedPrinterParser = ReducedPrinterParser;\n DateTimeFormatterBuilder.FractionPrinterParser = FractionPrinterParser;\n DateTimeFormatterBuilder.OffsetIdPrinterParser = OffsetIdPrinterParser;\n DateTimeFormatterBuilder.ZoneIdPrinterParser = ZoneIdPrinterParser;\n}\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar StringBuilder = function () {\n function StringBuilder() {\n this._str = '';\n }\n\n var _proto = StringBuilder.prototype;\n\n _proto.append = function append(str) {\n this._str += str;\n return this;\n };\n\n _proto.appendChar = function appendChar(str) {\n this._str += str[0];\n return this;\n };\n\n _proto.insert = function insert(offset, str) {\n this._str = this._str.slice(0, offset) + str + this._str.slice(offset);\n return this;\n };\n\n _proto.replace = function replace(start, end, str) {\n this._str = this._str.slice(0, start) + str + this._str.slice(end);\n return this;\n };\n\n _proto.length = function length() {\n return this._str.length;\n };\n\n _proto.setLength = function setLength(length) {\n this._str = this._str.slice(0, length);\n return this;\n };\n\n _proto.toString = function toString() {\n return this._str;\n };\n\n return StringBuilder;\n}();\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar DateTimeFormatter = function () {\n DateTimeFormatter.parsedExcessDays = function parsedExcessDays() {\n return DateTimeFormatter.PARSED_EXCESS_DAYS;\n };\n\n DateTimeFormatter.parsedLeapSecond = function parsedLeapSecond() {\n return DateTimeFormatter.PARSED_LEAP_SECOND;\n };\n\n DateTimeFormatter.ofPattern = function ofPattern(pattern) {\n return new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter();\n };\n\n function DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono, zone) {\n if (chrono === void 0) {\n chrono = IsoChronology.INSTANCE;\n }\n\n assert(printerParser != null);\n assert(decimalStyle != null);\n assert(resolverStyle != null);\n this._printerParser = printerParser;\n this._locale = locale;\n this._decimalStyle = decimalStyle;\n this._resolverStyle = resolverStyle;\n this._resolverFields = resolverFields;\n this._chrono = chrono;\n this._zone = zone;\n }\n\n var _proto = DateTimeFormatter.prototype;\n\n _proto.locale = function locale() {\n return this._locale;\n };\n\n _proto.decimalStyle = function decimalStyle() {\n return this._decimalStyle;\n };\n\n _proto.chronology = function chronology() {\n return this._chrono;\n };\n\n _proto.withChronology = function withChronology(chrono) {\n if (this._chrono != null && this._chrono.equals(chrono)) {\n return this;\n }\n\n return new DateTimeFormatter(this._printerParser, this._locale, this._decimalStyle, this._resolverStyle, this._resolverFields, chrono, this._zone);\n };\n\n _proto.withLocale = function withLocale() {\n return this;\n };\n\n _proto.withResolverStyle = function withResolverStyle(resolverStyle) {\n requireNonNull(resolverStyle, 'resolverStyle');\n\n if (resolverStyle.equals(this._resolverStyle)) {\n return this;\n }\n\n return new DateTimeFormatter(this._printerParser, this._locale, this._decimalStyle, resolverStyle, this._resolverFields, this._chrono, this._zone);\n };\n\n _proto.format = function format(temporal) {\n var buf = new StringBuilder(32);\n\n this._formatTo(temporal, buf);\n\n return buf.toString();\n };\n\n _proto._formatTo = function _formatTo(temporal, appendable) {\n requireNonNull(temporal, 'temporal');\n requireNonNull(appendable, 'appendable');\n var context = new DateTimePrintContext(temporal, this);\n\n this._printerParser.print(context, appendable);\n };\n\n _proto.parse = function parse(text, type) {\n if (arguments.length === 1) {\n return this.parse1(text);\n } else {\n return this.parse2(text, type);\n }\n };\n\n _proto.parse1 = function parse1(text) {\n requireNonNull(text, 'text');\n\n try {\n return this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n } catch (ex) {\n if (ex instanceof DateTimeParseException) {\n throw ex;\n } else {\n throw this._createError(text, ex);\n }\n }\n };\n\n _proto.parse2 = function parse2(text, type) {\n requireNonNull(text, 'text');\n requireNonNull(type, 'type');\n\n try {\n var builder = this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n\n return builder.build(type);\n } catch (ex) {\n if (ex instanceof DateTimeParseException) {\n throw ex;\n } else {\n throw this._createError(text, ex);\n }\n }\n };\n\n _proto._createError = function _createError(text, ex) {\n var abbr = '';\n\n if (text.length > 64) {\n abbr = text.substring(0, 64) + '...';\n } else {\n abbr = text;\n }\n\n return new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed: ' + ex.message, text, 0, ex);\n };\n\n _proto._parseToBuilder = function _parseToBuilder(text, position) {\n var pos = position != null ? position : new ParsePosition(0);\n\n var result = this._parseUnresolved0(text, pos);\n\n if (result == null || pos.getErrorIndex() >= 0 || position == null && pos.getIndex() < text.length) {\n var abbr = '';\n\n if (text.length > 64) {\n abbr = text.substr(0, 64).toString() + '...';\n } else {\n abbr = text;\n }\n\n if (pos.getErrorIndex() >= 0) {\n throw new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed at index ' + pos.getErrorIndex(), text, pos.getErrorIndex());\n } else {\n throw new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed, unparsed text found at index ' + pos.getIndex(), text, pos.getIndex());\n }\n }\n\n return result.toBuilder();\n };\n\n _proto.parseUnresolved = function parseUnresolved(text, position) {\n return this._parseUnresolved0(text, position);\n };\n\n _proto._parseUnresolved0 = function _parseUnresolved0(text, position) {\n assert(text != null, 'text', NullPointerException);\n assert(position != null, 'position', NullPointerException);\n var context = new DateTimeParseContext(this);\n var pos = position.getIndex();\n pos = this._printerParser.parse(context, text, pos);\n\n if (pos < 0) {\n position.setErrorIndex(~pos);\n return null;\n }\n\n position.setIndex(pos);\n return context.toParsed();\n };\n\n _proto._toPrinterParser = function _toPrinterParser(optional) {\n return this._printerParser.withOptional(optional);\n };\n\n _proto.toString = function toString() {\n var pattern = this._printerParser.toString();\n\n return pattern.indexOf('[') === 0 ? pattern : pattern.substring(1, pattern.length - 1);\n };\n\n return DateTimeFormatter;\n}();\nfunction _init$a() {\n DateTimeFormatter.ISO_LOCAL_DATE = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).appendLiteral('-').appendValue(ChronoField.MONTH_OF_YEAR, 2).appendLiteral('-').appendValue(ChronoField.DAY_OF_MONTH, 2).toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_LOCAL_TIME = new DateTimeFormatterBuilder().appendValue(ChronoField.HOUR_OF_DAY, 2).appendLiteral(':').appendValue(ChronoField.MINUTE_OF_HOUR, 2).optionalStart().appendLiteral(':').appendValue(ChronoField.SECOND_OF_MINUTE, 2).optionalStart().appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true).toFormatter(ResolverStyle.STRICT);\n DateTimeFormatter.ISO_LOCAL_DATE_TIME = new DateTimeFormatterBuilder().parseCaseInsensitive().append(DateTimeFormatter.ISO_LOCAL_DATE).appendLiteral('T').append(DateTimeFormatter.ISO_LOCAL_TIME).toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_INSTANT = new DateTimeFormatterBuilder().parseCaseInsensitive().appendInstant().toFormatter(ResolverStyle.STRICT);\n DateTimeFormatter.ISO_OFFSET_DATE_TIME = new DateTimeFormatterBuilder().parseCaseInsensitive().append(DateTimeFormatter.ISO_LOCAL_DATE_TIME).appendOffsetId().toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_ZONED_DATE_TIME = new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_OFFSET_DATE_TIME).optionalStart().appendLiteral('[').parseCaseSensitive().appendZoneId().appendLiteral(']').toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.BASIC_ISO_DATE = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).appendValue(ChronoField.MONTH_OF_YEAR, 2).appendValue(ChronoField.DAY_OF_MONTH, 2).toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_OFFSET_DATE = new DateTimeFormatterBuilder().parseCaseInsensitive().append(DateTimeFormatter.ISO_LOCAL_DATE).appendOffsetId().toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_OFFSET_TIME = new DateTimeFormatterBuilder().parseCaseInsensitive().append(DateTimeFormatter.ISO_LOCAL_TIME).appendOffsetId().toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n DateTimeFormatter.ISO_ORDINAL_DATE = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).appendLiteral('-').appendValue(ChronoField.DAY_OF_YEAR).toFormatter(ResolverStyle.STRICT);\n DateTimeFormatter.ISO_WEEK_DATE = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).appendLiteral('-W').appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR).appendLiteral('-').appendValue(ChronoField.DAY_OF_WEEK).toFormatter(ResolverStyle.STRICT);\n DateTimeFormatter.PARSED_EXCESS_DAYS = createTemporalQuery('PARSED_EXCESS_DAYS', function (temporal) {\n if (temporal instanceof DateTimeBuilder) {\n return temporal.excessDays;\n } else {\n return Period.ZERO;\n }\n });\n DateTimeFormatter.PARSED_LEAP_SECOND = createTemporalQuery('PARSED_LEAP_SECOND', function (temporal) {\n if (temporal instanceof DateTimeBuilder) {\n return temporal.leapSecond;\n } else {\n return false;\n }\n });\n}\n\nvar MonthDay = function (_TemporalAccessor) {\n _inheritsLoose(MonthDay, _TemporalAccessor);\n\n MonthDay.now = function now(zoneIdOrClock) {\n if (arguments.length === 0) {\n return MonthDay.now0();\n } else if (arguments.length === 1 && zoneIdOrClock instanceof ZoneId) {\n return MonthDay.nowZoneId(zoneIdOrClock);\n } else {\n return MonthDay.nowClock(zoneIdOrClock);\n }\n };\n\n MonthDay.now0 = function now0() {\n return this.nowClock(Clock.systemDefaultZone());\n };\n\n MonthDay.nowZoneId = function nowZoneId(zone) {\n requireNonNull(zone, 'zone');\n return this.nowClock(Clock.system(zone));\n };\n\n MonthDay.nowClock = function nowClock(clock) {\n requireNonNull(clock, 'clock');\n var now = LocalDate.now(clock);\n return MonthDay.of(now.month(), now.dayOfMonth());\n };\n\n MonthDay.of = function of(monthOrNumber, number) {\n if (arguments.length === 2 && monthOrNumber instanceof Month) {\n return MonthDay.ofMonthNumber(monthOrNumber, number);\n } else {\n return MonthDay.ofNumberNumber(monthOrNumber, number);\n }\n };\n\n MonthDay.ofMonthNumber = function ofMonthNumber(month, dayOfMonth) {\n requireNonNull(month, 'month');\n ChronoField.DAY_OF_MONTH.checkValidValue(dayOfMonth);\n\n if (dayOfMonth > month.maxLength()) {\n throw new DateTimeException('Illegal value for DayOfMonth field, value ' + dayOfMonth + ' is not valid for month ' + month.toString());\n }\n\n return new MonthDay(month.value(), dayOfMonth);\n };\n\n MonthDay.ofNumberNumber = function ofNumberNumber(month, dayOfMonth) {\n requireNonNull(month, 'month');\n requireNonNull(dayOfMonth, 'dayOfMonth');\n return MonthDay.of(Month.of(month), dayOfMonth);\n };\n\n MonthDay.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n requireInstance(temporal, TemporalAccessor, 'temporal');\n\n if (temporal instanceof MonthDay) {\n return temporal;\n }\n\n try {\n return MonthDay.of(temporal.get(ChronoField.MONTH_OF_YEAR), temporal.get(ChronoField.DAY_OF_MONTH));\n } catch (ex) {\n throw new DateTimeException('Unable to obtain MonthDay from TemporalAccessor: ' + temporal + ', type ' + (temporal && temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n MonthDay.parse = function parse(text, formatter) {\n if (arguments.length === 1) {\n return MonthDay.parseString(text);\n } else {\n return MonthDay.parseStringFormatter(text, formatter);\n }\n };\n\n MonthDay.parseString = function parseString(text) {\n return MonthDay.parseStringFormatter(text, PARSER);\n };\n\n MonthDay.parseStringFormatter = function parseStringFormatter(text, formatter) {\n requireNonNull(text, 'text');\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return formatter.parse(text, MonthDay.FROM);\n };\n\n function MonthDay(month, dayOfMonth) {\n var _this;\n\n _this = _TemporalAccessor.call(this) || this;\n _this._month = MathUtil.safeToInt(month);\n _this._day = MathUtil.safeToInt(dayOfMonth);\n return _this;\n }\n\n var _proto = MonthDay.prototype;\n\n _proto.monthValue = function monthValue() {\n return this._month;\n };\n\n _proto.month = function month() {\n return Month.of(this._month);\n };\n\n _proto.dayOfMonth = function dayOfMonth() {\n return this._day;\n };\n\n _proto.isSupported = function isSupported(field) {\n if (field instanceof ChronoField) {\n return field === ChronoField.MONTH_OF_YEAR || field === ChronoField.DAY_OF_MONTH;\n }\n\n return field != null && field.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field === ChronoField.MONTH_OF_YEAR) {\n return field.range();\n } else if (field === ChronoField.DAY_OF_MONTH) {\n return ValueRange.of(1, this.month().minLength(), this.month().maxLength());\n }\n\n return _TemporalAccessor.prototype.range.call(this, field);\n };\n\n _proto.get = function get(field) {\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.DAY_OF_MONTH:\n return this._day;\n\n case ChronoField.MONTH_OF_YEAR:\n return this._month;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.isValidYear = function isValidYear(year) {\n return (this._day === 29 && this._month === 2 && Year.isLeap(year) === false) === false;\n };\n\n _proto.withMonth = function withMonth(month) {\n return this.with(Month.of(month));\n };\n\n _proto.with = function _with(month) {\n requireNonNull(month, 'month');\n\n if (month.value() === this._month) {\n return this;\n }\n\n var day = Math.min(this._day, month.maxLength());\n return new MonthDay(month.value(), day);\n };\n\n _proto.withDayOfMonth = function withDayOfMonth(dayOfMonth) {\n if (dayOfMonth === this._day) {\n return this;\n }\n\n return MonthDay.of(this._month, dayOfMonth);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n requireInstance(_query, TemporalQuery, 'query');\n\n if (_query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n }\n\n return _TemporalAccessor.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n temporal = temporal.with(ChronoField.MONTH_OF_YEAR, this._month);\n return temporal.with(ChronoField.DAY_OF_MONTH, Math.min(temporal.range(ChronoField.DAY_OF_MONTH).maximum(), this._day));\n };\n\n _proto.atYear = function atYear(year) {\n return LocalDate.of(year, this._month, this.isValidYear(year) ? this._day : 28);\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, MonthDay, 'other');\n var cmp = this._month - other.monthValue();\n\n if (cmp === 0) {\n cmp = this._day - other.dayOfMonth();\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n requireNonNull(other, 'other');\n requireInstance(other, MonthDay, 'other');\n return this.compareTo(other) > 0;\n };\n\n _proto.isBefore = function isBefore(other) {\n requireNonNull(other, 'other');\n requireInstance(other, MonthDay, 'other');\n return this.compareTo(other) < 0;\n };\n\n _proto.equals = function equals(obj) {\n if (this === obj) {\n return true;\n }\n\n if (obj instanceof MonthDay) {\n var other = obj;\n return this.monthValue() === other.monthValue() && this.dayOfMonth() === other.dayOfMonth();\n }\n\n return false;\n };\n\n _proto.toString = function toString() {\n return '--' + (this._month < 10 ? '0' : '') + this._month + (this._day < 10 ? '-0' : '-') + this._day;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return formatter.format(this);\n };\n\n return MonthDay;\n}(TemporalAccessor);\nvar PARSER;\nfunction _init$b() {\n PARSER = new DateTimeFormatterBuilder().appendLiteral('--').appendValue(ChronoField.MONTH_OF_YEAR, 2).appendLiteral('-').appendValue(ChronoField.DAY_OF_MONTH, 2).toFormatter();\n MonthDay.FROM = createTemporalQuery('MonthDay.FROM', function (temporal) {\n return MonthDay.from(temporal);\n });\n}\n\nvar YearMonth = function (_Temporal) {\n _inheritsLoose(YearMonth, _Temporal);\n\n YearMonth.now = function now(zoneIdOrClock) {\n if (arguments.length === 0) {\n return YearMonth.now0();\n } else if (arguments.length === 1 && zoneIdOrClock instanceof ZoneId) {\n return YearMonth.nowZoneId(zoneIdOrClock);\n } else {\n return YearMonth.nowClock(zoneIdOrClock);\n }\n };\n\n YearMonth.now0 = function now0() {\n return YearMonth.nowClock(Clock.systemDefaultZone());\n };\n\n YearMonth.nowZoneId = function nowZoneId(zone) {\n return YearMonth.nowClock(Clock.system(zone));\n };\n\n YearMonth.nowClock = function nowClock(clock) {\n var now = LocalDate.now(clock);\n return YearMonth.of(now.year(), now.month());\n };\n\n YearMonth.of = function of(year, monthOrNumber) {\n if (arguments.length === 2 && monthOrNumber instanceof Month) {\n return YearMonth.ofNumberMonth(year, monthOrNumber);\n } else {\n return YearMonth.ofNumberNumber(year, monthOrNumber);\n }\n };\n\n YearMonth.ofNumberMonth = function ofNumberMonth(year, month) {\n requireNonNull(month, 'month');\n requireInstance(month, Month, 'month');\n return YearMonth.ofNumberNumber(year, month.value());\n };\n\n YearMonth.ofNumberNumber = function ofNumberNumber(year, month) {\n requireNonNull(year, 'year');\n requireNonNull(month, 'month');\n ChronoField.YEAR.checkValidValue(year);\n ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n return new YearMonth(year, month);\n };\n\n YearMonth.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (temporal instanceof YearMonth) {\n return temporal;\n }\n\n try {\n return YearMonth.of(temporal.get(ChronoField.YEAR), temporal.get(ChronoField.MONTH_OF_YEAR));\n } catch (ex) {\n throw new DateTimeException('Unable to obtain YearMonth from TemporalAccessor: ' + temporal + ', type ' + (temporal && temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n YearMonth.parse = function parse(text, formatter) {\n if (arguments.length === 1) {\n return YearMonth.parseString(text);\n } else {\n return YearMonth.parseStringFormatter(text, formatter);\n }\n };\n\n YearMonth.parseString = function parseString(text) {\n return YearMonth.parseStringFormatter(text, PARSER$1);\n };\n\n YearMonth.parseStringFormatter = function parseStringFormatter(text, formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, YearMonth.FROM);\n };\n\n function YearMonth(year, month) {\n var _this;\n\n _this = _Temporal.call(this) || this;\n _this._year = MathUtil.safeToInt(year);\n _this._month = MathUtil.safeToInt(month);\n return _this;\n }\n\n var _proto = YearMonth.prototype;\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (arguments.length === 1 && fieldOrUnit instanceof TemporalField) {\n return this.isSupportedField(fieldOrUnit);\n } else {\n return this.isSupportedUnit(fieldOrUnit);\n }\n };\n\n _proto.isSupportedField = function isSupportedField(field) {\n if (field instanceof ChronoField) {\n return field === ChronoField.YEAR || field === ChronoField.MONTH_OF_YEAR || field === ChronoField.PROLEPTIC_MONTH || field === ChronoField.YEAR_OF_ERA || field === ChronoField.ERA;\n }\n\n return field != null && field.isSupportedBy(this);\n };\n\n _proto.isSupportedUnit = function isSupportedUnit(unit) {\n if (unit instanceof ChronoUnit) {\n return unit === ChronoUnit.MONTHS || unit === ChronoUnit.YEARS || unit === ChronoUnit.DECADES || unit === ChronoUnit.CENTURIES || unit === ChronoUnit.MILLENNIA || unit === ChronoUnit.ERAS;\n }\n\n return unit != null && unit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field === ChronoField.YEAR_OF_ERA) {\n return this.year() <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE);\n }\n\n return _Temporal.prototype.range.call(this, field);\n };\n\n _proto.get = function get(field) {\n requireNonNull(field, 'field');\n requireInstance(field, TemporalField, 'field');\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n requireInstance(field, TemporalField, 'field');\n\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.MONTH_OF_YEAR:\n return this._month;\n\n case ChronoField.PROLEPTIC_MONTH:\n return this._getProlepticMonth();\n\n case ChronoField.YEAR_OF_ERA:\n return this._year < 1 ? 1 - this._year : this._year;\n\n case ChronoField.YEAR:\n return this._year;\n\n case ChronoField.ERA:\n return this._year < 1 ? 0 : 1;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto._getProlepticMonth = function _getProlepticMonth() {\n return MathUtil.safeAdd(MathUtil.safeMultiply(this._year, 12), this._month - 1);\n };\n\n _proto.year = function year() {\n return this._year;\n };\n\n _proto.monthValue = function monthValue() {\n return this._month;\n };\n\n _proto.month = function month() {\n return Month.of(this._month);\n };\n\n _proto.isLeapYear = function isLeapYear() {\n return IsoChronology.isLeapYear(this._year);\n };\n\n _proto.isValidDay = function isValidDay(dayOfMonth) {\n return dayOfMonth >= 1 && dayOfMonth <= this.lengthOfMonth();\n };\n\n _proto.lengthOfMonth = function lengthOfMonth() {\n return this.month().length(this.isLeapYear());\n };\n\n _proto.lengthOfYear = function lengthOfYear() {\n return this.isLeapYear() ? 366 : 365;\n };\n\n _proto.with = function _with(adjusterOrField, value) {\n if (arguments.length === 1) {\n return this.withAdjuster(adjusterOrField);\n } else {\n return this.withFieldValue(adjusterOrField, value);\n }\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n requireInstance(field, TemporalField, 'field');\n\n if (field instanceof ChronoField) {\n var f = field;\n f.checkValidValue(newValue);\n\n switch (f) {\n case ChronoField.MONTH_OF_YEAR:\n return this.withMonth(newValue);\n\n case ChronoField.PROLEPTIC_MONTH:\n return this.plusMonths(newValue - this.getLong(ChronoField.PROLEPTIC_MONTH));\n\n case ChronoField.YEAR_OF_ERA:\n return this.withYear(this._year < 1 ? 1 - newValue : newValue);\n\n case ChronoField.YEAR:\n return this.withYear(newValue);\n\n case ChronoField.ERA:\n return this.getLong(ChronoField.ERA) === newValue ? this : this.withYear(1 - this._year);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.withYear = function withYear(year) {\n ChronoField.YEAR.checkValidValue(year);\n return new YearMonth(year, this._month);\n };\n\n _proto.withMonth = function withMonth(month) {\n ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n return new YearMonth(this._year, month);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n requireInstance(unit, TemporalUnit, 'unit');\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.MONTHS:\n return this.plusMonths(amountToAdd);\n\n case ChronoUnit.YEARS:\n return this.plusYears(amountToAdd);\n\n case ChronoUnit.DECADES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n\n case ChronoUnit.CENTURIES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n\n case ChronoUnit.MILLENNIA:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n\n case ChronoUnit.ERAS:\n return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n\n var newYear = ChronoField.YEAR.checkValidIntValue(this._year + yearsToAdd);\n return this.withYear(newYear);\n };\n\n _proto.plusMonths = function plusMonths(monthsToAdd) {\n if (monthsToAdd === 0) {\n return this;\n }\n\n var monthCount = this._year * 12 + (this._month - 1);\n var calcMonths = monthCount + monthsToAdd;\n var newYear = ChronoField.YEAR.checkValidIntValue(MathUtil.floorDiv(calcMonths, 12));\n var newMonth = MathUtil.floorMod(calcMonths, 12) + 1;\n return new YearMonth(newYear, newMonth);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n return amountToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusAmountUnit(MathUtil.MAX_SAFE_INTEGER, unit).plusAmountUnit(1, unit) : this.plusAmountUnit(-amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(yearsToSubtract) {\n return yearsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusYears(MathUtil.MIN_SAFE_INTEGER).plusYears(1) : this.plusYears(-yearsToSubtract);\n };\n\n _proto.minusMonths = function minusMonths(monthsToSubtract) {\n return monthsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusMonths(Math.MAX_SAFE_INTEGER).plusMonths(1) : this.plusMonths(-monthsToSubtract);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n requireInstance(_query, TemporalQuery, 'query');\n\n if (_query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.MONTHS;\n } else if (_query === TemporalQueries.localDate() || _query === TemporalQueries.localTime() || _query === TemporalQueries.zone() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n return _Temporal.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n requireInstance(temporal, Temporal, 'temporal');\n return temporal.with(ChronoField.PROLEPTIC_MONTH, this._getProlepticMonth());\n };\n\n _proto.until = function until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n requireInstance(endExclusive, Temporal, 'endExclusive');\n requireInstance(unit, TemporalUnit, 'unit');\n var end = YearMonth.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n var monthsUntil = end._getProlepticMonth() - this._getProlepticMonth();\n\n switch (unit) {\n case ChronoUnit.MONTHS:\n return monthsUntil;\n\n case ChronoUnit.YEARS:\n return monthsUntil / 12;\n\n case ChronoUnit.DECADES:\n return monthsUntil / 120;\n\n case ChronoUnit.CENTURIES:\n return monthsUntil / 1200;\n\n case ChronoUnit.MILLENNIA:\n return monthsUntil / 12000;\n\n case ChronoUnit.ERAS:\n return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.atDay = function atDay(dayOfMonth) {\n return LocalDate.of(this._year, this._month, dayOfMonth);\n };\n\n _proto.atEndOfMonth = function atEndOfMonth() {\n return LocalDate.of(this._year, this._month, this.lengthOfMonth());\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, YearMonth, 'other');\n var cmp = this._year - other.year();\n\n if (cmp === 0) {\n cmp = this._month - other.monthValue();\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n return this.compareTo(other) > 0;\n };\n\n _proto.isBefore = function isBefore(other) {\n return this.compareTo(other) < 0;\n };\n\n _proto.equals = function equals(obj) {\n if (this === obj) {\n return true;\n }\n\n if (obj instanceof YearMonth) {\n var other = obj;\n return this.year() === other.year() && this.monthValue() === other.monthValue();\n }\n\n return false;\n };\n\n _proto.toString = function toString() {\n return PARSER$1.format(this);\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n };\n\n return YearMonth;\n}(Temporal);\nvar PARSER$1;\nfunction _init$c() {\n PARSER$1 = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).appendLiteral('-').appendValue(ChronoField.MONTH_OF_YEAR, 2).toFormatter();\n YearMonth.FROM = createTemporalQuery('YearMonth.FROM', function (temporal) {\n return YearMonth.from(temporal);\n });\n}\n\nvar Year = function (_Temporal) {\n _inheritsLoose(Year, _Temporal);\n\n function Year(value) {\n var _this;\n\n _this = _Temporal.call(this) || this;\n _this._year = MathUtil.safeToInt(value);\n return _this;\n }\n\n var _proto = Year.prototype;\n\n _proto.value = function value() {\n return this._year;\n };\n\n Year.now = function now(zoneIdOrClock) {\n if (zoneIdOrClock === void 0) {\n zoneIdOrClock = undefined;\n }\n\n if (zoneIdOrClock === undefined) {\n return Year.now0();\n } else if (zoneIdOrClock instanceof ZoneId) {\n return Year.nowZoneId(zoneIdOrClock);\n } else {\n return Year.nowClock(zoneIdOrClock);\n }\n };\n\n Year.now0 = function now0() {\n return Year.nowClock(Clock.systemDefaultZone());\n };\n\n Year.nowZoneId = function nowZoneId(zone) {\n requireNonNull(zone, 'zone');\n requireInstance(zone, ZoneId, 'zone');\n return Year.nowClock(Clock.system(zone));\n };\n\n Year.nowClock = function nowClock(clock) {\n requireNonNull(clock, 'clock');\n requireInstance(clock, Clock, 'clock');\n var now = LocalDate.now(clock);\n return Year.of(now.year());\n };\n\n Year.of = function of(isoYear) {\n requireNonNull(isoYear, 'isoYear');\n ChronoField.YEAR.checkValidValue(isoYear);\n return new Year(isoYear);\n };\n\n Year.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n requireInstance(temporal, TemporalAccessor, 'temporal');\n\n if (temporal instanceof Year) {\n return temporal;\n }\n\n try {\n return Year.of(temporal.get(ChronoField.YEAR));\n } catch (ex) {\n throw new DateTimeException('Unable to obtain Year from TemporalAccessor: ' + temporal + ', type ' + (temporal && temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n Year.parse = function parse(text, formatter) {\n if (arguments.length <= 1) {\n return Year.parseText(text);\n } else {\n return Year.parseTextFormatter(text, formatter);\n }\n };\n\n Year.parseText = function parseText(text) {\n requireNonNull(text, 'text');\n return Year.parse(text, PARSER$2);\n };\n\n Year.parseTextFormatter = function parseTextFormatter(text, formatter) {\n if (formatter === void 0) {\n formatter = PARSER$2;\n }\n\n requireNonNull(text, 'text');\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return formatter.parse(text, Year.FROM);\n };\n\n Year.isLeap = function isLeap(year) {\n return MathUtil.intMod(year, 4) === 0 && (MathUtil.intMod(year, 100) !== 0 || MathUtil.intMod(year, 400) === 0);\n };\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (arguments.length === 1 && fieldOrUnit instanceof TemporalField) {\n return this.isSupportedField(fieldOrUnit);\n } else {\n return this.isSupportedUnit(fieldOrUnit);\n }\n };\n\n _proto.isSupportedField = function isSupportedField(field) {\n if (field instanceof ChronoField) {\n return field === ChronoField.YEAR || field === ChronoField.YEAR_OF_ERA || field === ChronoField.ERA;\n }\n\n return field != null && field.isSupportedBy(this);\n };\n\n _proto.isSupportedUnit = function isSupportedUnit(unit) {\n if (unit instanceof ChronoUnit) {\n return unit === ChronoUnit.YEARS || unit === ChronoUnit.DECADES || unit === ChronoUnit.CENTURIES || unit === ChronoUnit.MILLENNIA || unit === ChronoUnit.ERAS;\n }\n\n return unit != null && unit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (this.isSupported(field)) {\n return field.range();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return _Temporal.prototype.range.call(this, field);\n };\n\n _proto.get = function get(field) {\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.YEAR_OF_ERA:\n return this._year < 1 ? 1 - this._year : this._year;\n\n case ChronoField.YEAR:\n return this._year;\n\n case ChronoField.ERA:\n return this._year < 1 ? 0 : 1;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.isLeap = function isLeap() {\n return Year.isLeap(this._year);\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n requireInstance(field, TemporalField, 'field');\n\n if (field instanceof ChronoField) {\n field.checkValidValue(newValue);\n\n switch (field) {\n case ChronoField.YEAR_OF_ERA:\n return Year.of(this._year < 1 ? 1 - newValue : newValue);\n\n case ChronoField.YEAR:\n return Year.of(newValue);\n\n case ChronoField.ERA:\n return this.getLong(ChronoField.ERA) === newValue ? this : Year.of(1 - this._year);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(amountToAdd, 'amountToAdd');\n requireNonNull(unit, 'unit');\n requireInstance(unit, TemporalUnit, 'unit');\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.YEARS:\n return this.plusYears(amountToAdd);\n\n case ChronoUnit.DECADES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n\n case ChronoUnit.CENTURIES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n\n case ChronoUnit.MILLENNIA:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n\n case ChronoUnit.ERAS:\n return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n\n return Year.of(ChronoField.YEAR.checkValidIntValue(MathUtil.safeAdd(this._year, yearsToAdd)));\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n requireInstance(amount, TemporalAmount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(amountToSubtract, 'amountToSubtract');\n requireNonNull(unit, 'unit');\n requireInstance(unit, TemporalUnit, 'unit');\n return amountToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plus(MathUtil.MAX_SAFE_INTEGER, unit).plus(1, unit) : this.plus(-amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(yearsToSubtract) {\n return yearsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusYears(MathUtil.MAX_SAFE_INTEGER).plusYears(1) : this.plusYears(-yearsToSubtract);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n return temporal.with(ChronoField.YEAR, this._year);\n };\n\n _proto.isValidMonthDay = function isValidMonthDay(monthDay) {\n return monthDay != null && monthDay.isValidYear(this._year);\n };\n\n _proto.length = function length() {\n return this.isLeap() ? 366 : 365;\n };\n\n _proto.atDay = function atDay(dayOfYear) {\n return LocalDate.ofYearDay(this._year, dayOfYear);\n };\n\n _proto.atMonth = function atMonth(monthOrNumber) {\n if (arguments.length === 1 && monthOrNumber instanceof Month) {\n return this.atMonthMonth(monthOrNumber);\n } else {\n return this.atMonthNumber(monthOrNumber);\n }\n };\n\n _proto.atMonthMonth = function atMonthMonth(month) {\n requireNonNull(month, 'month');\n requireInstance(month, Month, 'month');\n return YearMonth.of(this._year, month);\n };\n\n _proto.atMonthNumber = function atMonthNumber(month) {\n requireNonNull(month, 'month');\n return YearMonth.of(this._year, month);\n };\n\n _proto.atMonthDay = function atMonthDay(monthDay) {\n requireNonNull(monthDay, 'monthDay');\n requireInstance(monthDay, MonthDay, 'monthDay');\n return monthDay.atYear(this._year);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query()');\n requireInstance(_query, TemporalQuery, 'query()');\n\n if (_query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.YEARS;\n } else if (_query === TemporalQueries.localDate() || _query === TemporalQueries.localTime() || _query === TemporalQueries.zone() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n return _Temporal.prototype.query.call(this, _query);\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, Year, 'other');\n return this._year - other._year;\n };\n\n _proto.isAfter = function isAfter(other) {\n requireNonNull(other, 'other');\n requireInstance(other, Year, 'other');\n return this._year > other._year;\n };\n\n _proto.isBefore = function isBefore(other) {\n requireNonNull(other, 'other');\n requireInstance(other, Year, 'other');\n return this._year < other._year;\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return formatter.format(this);\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof Year) {\n return this.value() === other.value();\n }\n\n return false;\n };\n\n _proto.toString = function toString() {\n return '' + this._year;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.until = function until(endExclusive, unit) {\n var end = Year.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n var yearsUntil = end.value() - this.value();\n\n switch (unit) {\n case ChronoUnit.YEARS:\n return yearsUntil;\n\n case ChronoUnit.DECADES:\n return MathUtil.intDiv(yearsUntil, 10);\n\n case ChronoUnit.CENTURIES:\n return MathUtil.intDiv(yearsUntil, 100);\n\n case ChronoUnit.MILLENNIA:\n return MathUtil.intDiv(yearsUntil, 1000);\n\n case ChronoUnit.ERAS:\n return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n return Year;\n}(Temporal);\nvar PARSER$2;\nfunction _init$d() {\n Year.MIN_VALUE = YearConstants.MIN_VALUE;\n Year.MAX_VALUE = YearConstants.MAX_VALUE;\n PARSER$2 = new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD).toFormatter();\n Year.FROM = createTemporalQuery('Year.FROM', function (temporal) {\n return Year.from(temporal);\n });\n}\n\nvar TemporalAdjusters = function () {\n function TemporalAdjusters() {}\n\n TemporalAdjusters.firstDayOfMonth = function firstDayOfMonth() {\n return Impl.FIRST_DAY_OF_MONTH;\n };\n\n TemporalAdjusters.lastDayOfMonth = function lastDayOfMonth() {\n return Impl.LAST_DAY_OF_MONTH;\n };\n\n TemporalAdjusters.firstDayOfNextMonth = function firstDayOfNextMonth() {\n return Impl.FIRST_DAY_OF_NEXT_MONTH;\n };\n\n TemporalAdjusters.firstDayOfYear = function firstDayOfYear() {\n return Impl.FIRST_DAY_OF_YEAR;\n };\n\n TemporalAdjusters.lastDayOfYear = function lastDayOfYear() {\n return Impl.LAST_DAY_OF_YEAR;\n };\n\n TemporalAdjusters.firstDayOfNextYear = function firstDayOfNextYear() {\n return Impl.FIRST_DAY_OF_NEXT_YEAR;\n };\n\n TemporalAdjusters.firstInMonth = function firstInMonth(dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(1, dayOfWeek);\n };\n\n TemporalAdjusters.lastInMonth = function lastInMonth(dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(-1, dayOfWeek);\n };\n\n TemporalAdjusters.dayOfWeekInMonth = function dayOfWeekInMonth(ordinal, dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(ordinal, dayOfWeek);\n };\n\n TemporalAdjusters.next = function next(dayOfWeek) {\n return new RelativeDayOfWeek(2, dayOfWeek);\n };\n\n TemporalAdjusters.nextOrSame = function nextOrSame(dayOfWeek) {\n return new RelativeDayOfWeek(0, dayOfWeek);\n };\n\n TemporalAdjusters.previous = function previous(dayOfWeek) {\n return new RelativeDayOfWeek(3, dayOfWeek);\n };\n\n TemporalAdjusters.previousOrSame = function previousOrSame(dayOfWeek) {\n return new RelativeDayOfWeek(1, dayOfWeek);\n };\n\n return TemporalAdjusters;\n}();\n\nvar Impl = function (_TemporalAdjuster) {\n _inheritsLoose(Impl, _TemporalAdjuster);\n\n function Impl(ordinal) {\n var _this;\n\n _this = _TemporalAdjuster.call(this) || this;\n _this._ordinal = ordinal;\n return _this;\n }\n\n var _proto = Impl.prototype;\n\n _proto.adjustInto = function adjustInto(temporal) {\n switch (this._ordinal) {\n case 0:\n return temporal.with(ChronoField.DAY_OF_MONTH, 1);\n\n case 1:\n return temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n\n case 2:\n return temporal.with(ChronoField.DAY_OF_MONTH, 1).plus(1, ChronoUnit.MONTHS);\n\n case 3:\n return temporal.with(ChronoField.DAY_OF_YEAR, 1);\n\n case 4:\n return temporal.with(ChronoField.DAY_OF_YEAR, temporal.range(ChronoField.DAY_OF_YEAR).maximum());\n\n case 5:\n return temporal.with(ChronoField.DAY_OF_YEAR, 1).plus(1, ChronoUnit.YEARS);\n }\n\n throw new IllegalStateException('Unreachable');\n };\n\n return Impl;\n}(TemporalAdjuster);\n\nImpl.FIRST_DAY_OF_MONTH = new Impl(0);\nImpl.LAST_DAY_OF_MONTH = new Impl(1);\nImpl.FIRST_DAY_OF_NEXT_MONTH = new Impl(2);\nImpl.FIRST_DAY_OF_YEAR = new Impl(3);\nImpl.LAST_DAY_OF_YEAR = new Impl(4);\nImpl.FIRST_DAY_OF_NEXT_YEAR = new Impl(5);\n\nvar DayOfWeekInMonth = function (_TemporalAdjuster2) {\n _inheritsLoose(DayOfWeekInMonth, _TemporalAdjuster2);\n\n function DayOfWeekInMonth(ordinal, dow) {\n var _this2;\n\n _this2 = _TemporalAdjuster2.call(this) || this;\n _this2._ordinal = ordinal;\n _this2._dowValue = dow.value();\n return _this2;\n }\n\n var _proto2 = DayOfWeekInMonth.prototype;\n\n _proto2.adjustInto = function adjustInto(temporal) {\n if (this._ordinal >= 0) {\n var temp = temporal.with(ChronoField.DAY_OF_MONTH, 1);\n var curDow = temp.get(ChronoField.DAY_OF_WEEK);\n var dowDiff = MathUtil.intMod(this._dowValue - curDow + 7, 7);\n dowDiff += (this._ordinal - 1) * 7;\n return temp.plus(dowDiff, ChronoUnit.DAYS);\n } else {\n var _temp = temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n\n var _curDow = _temp.get(ChronoField.DAY_OF_WEEK);\n\n var daysDiff = this._dowValue - _curDow;\n daysDiff = daysDiff === 0 ? 0 : daysDiff > 0 ? daysDiff - 7 : daysDiff;\n daysDiff -= (-this._ordinal - 1) * 7;\n return _temp.plus(daysDiff, ChronoUnit.DAYS);\n }\n };\n\n return DayOfWeekInMonth;\n}(TemporalAdjuster);\n\nvar RelativeDayOfWeek = function (_TemporalAdjuster3) {\n _inheritsLoose(RelativeDayOfWeek, _TemporalAdjuster3);\n\n function RelativeDayOfWeek(relative, dayOfWeek) {\n var _this3;\n\n _this3 = _TemporalAdjuster3.call(this) || this;\n requireNonNull(dayOfWeek, 'dayOfWeek');\n _this3._relative = relative;\n _this3._dowValue = dayOfWeek.value();\n return _this3;\n }\n\n var _proto3 = RelativeDayOfWeek.prototype;\n\n _proto3.adjustInto = function adjustInto(temporal) {\n var calDow = temporal.get(ChronoField.DAY_OF_WEEK);\n\n if (this._relative < 2 && calDow === this._dowValue) {\n return temporal;\n }\n\n if ((this._relative & 1) === 0) {\n var daysDiff = calDow - this._dowValue;\n return temporal.plus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, ChronoUnit.DAYS);\n } else {\n var _daysDiff = this._dowValue - calDow;\n\n return temporal.minus(_daysDiff >= 0 ? 7 - _daysDiff : -_daysDiff, ChronoUnit.DAYS);\n }\n };\n\n return RelativeDayOfWeek;\n}(TemporalAdjuster);\n\nvar IsoChronology = function (_Enum) {\n _inheritsLoose(IsoChronology, _Enum);\n\n function IsoChronology() {\n return _Enum.apply(this, arguments) || this;\n }\n\n IsoChronology.isLeapYear = function isLeapYear(prolepticYear) {\n return (prolepticYear & 3) === 0 && (prolepticYear % 100 !== 0 || prolepticYear % 400 === 0);\n };\n\n var _proto = IsoChronology.prototype;\n\n _proto._updateResolveMap = function _updateResolveMap(fieldValues, field, value) {\n requireNonNull(fieldValues, 'fieldValues');\n requireNonNull(field, 'field');\n var current = fieldValues.get(field);\n\n if (current != null && current !== value) {\n throw new DateTimeException('Invalid state, field: ' + field + ' ' + current + ' conflicts with ' + field + ' ' + value);\n }\n\n fieldValues.put(field, value);\n };\n\n _proto.resolveDate = function resolveDate(fieldValues, resolverStyle) {\n if (fieldValues.containsKey(ChronoField.EPOCH_DAY)) {\n return LocalDate.ofEpochDay(fieldValues.remove(ChronoField.EPOCH_DAY));\n }\n\n var prolepticMonth = fieldValues.remove(ChronoField.PROLEPTIC_MONTH);\n\n if (prolepticMonth != null) {\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.PROLEPTIC_MONTH.checkValidValue(prolepticMonth);\n }\n\n this._updateResolveMap(fieldValues, ChronoField.MONTH_OF_YEAR, MathUtil.floorMod(prolepticMonth, 12) + 1);\n\n this._updateResolveMap(fieldValues, ChronoField.YEAR, MathUtil.floorDiv(prolepticMonth, 12));\n }\n\n var yoeLong = fieldValues.remove(ChronoField.YEAR_OF_ERA);\n\n if (yoeLong != null) {\n if (resolverStyle !== ResolverStyle.LENIENT) {\n ChronoField.YEAR_OF_ERA.checkValidValue(yoeLong);\n }\n\n var era = fieldValues.remove(ChronoField.ERA);\n\n if (era == null) {\n var year = fieldValues.get(ChronoField.YEAR);\n\n if (resolverStyle === ResolverStyle.STRICT) {\n if (year != null) {\n this._updateResolveMap(fieldValues, ChronoField.YEAR, year > 0 ? yoeLong : MathUtil.safeSubtract(1, yoeLong));\n } else {\n fieldValues.put(ChronoField.YEAR_OF_ERA, yoeLong);\n }\n } else {\n this._updateResolveMap(fieldValues, ChronoField.YEAR, year == null || year > 0 ? yoeLong : MathUtil.safeSubtract(1, yoeLong));\n }\n } else if (era === 1) {\n this._updateResolveMap(fieldValues, ChronoField.YEAR, yoeLong);\n } else if (era === 0) {\n this._updateResolveMap(fieldValues, ChronoField.YEAR, MathUtil.safeSubtract(1, yoeLong));\n } else {\n throw new DateTimeException('Invalid value for era: ' + era);\n }\n } else if (fieldValues.containsKey(ChronoField.ERA)) {\n ChronoField.ERA.checkValidValue(fieldValues.get(ChronoField.ERA));\n }\n\n if (fieldValues.containsKey(ChronoField.YEAR)) {\n if (fieldValues.containsKey(ChronoField.MONTH_OF_YEAR)) {\n if (fieldValues.containsKey(ChronoField.DAY_OF_MONTH)) {\n var y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n var moy = fieldValues.remove(ChronoField.MONTH_OF_YEAR);\n var dom = fieldValues.remove(ChronoField.DAY_OF_MONTH);\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var months = moy - 1;\n var days = dom - 1;\n return LocalDate.of(y, 1, 1).plusMonths(months).plusDays(days);\n } else if (resolverStyle === ResolverStyle.SMART) {\n ChronoField.DAY_OF_MONTH.checkValidValue(dom);\n\n if (moy === 4 || moy === 6 || moy === 9 || moy === 11) {\n dom = Math.min(dom, 30);\n } else if (moy === 2) {\n dom = Math.min(dom, Month.FEBRUARY.length(Year.isLeap(y)));\n }\n\n return LocalDate.of(y, moy, dom);\n } else {\n return LocalDate.of(y, moy, dom);\n }\n }\n }\n\n if (fieldValues.containsKey(ChronoField.DAY_OF_YEAR)) {\n var _y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var _days = MathUtil.safeSubtract(fieldValues.remove(ChronoField.DAY_OF_YEAR), 1);\n\n return LocalDate.ofYearDay(_y, 1).plusDays(_days);\n }\n\n var doy = ChronoField.DAY_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.DAY_OF_YEAR));\n return LocalDate.ofYearDay(_y, doy);\n }\n\n if (fieldValues.containsKey(ChronoField.ALIGNED_WEEK_OF_YEAR)) {\n if (fieldValues.containsKey(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)) {\n var _y2 = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var weeks = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR), 1);\n\n var _days2 = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR), 1);\n\n return LocalDate.of(_y2, 1, 1).plusWeeks(weeks).plusDays(_days2);\n }\n\n var aw = ChronoField.ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR));\n var ad = ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));\n var date = LocalDate.of(_y2, 1, 1).plusDays((aw - 1) * 7 + (ad - 1));\n\n if (resolverStyle === ResolverStyle.STRICT && date.get(ChronoField.YEAR) !== _y2) {\n throw new DateTimeException('Strict mode rejected date parsed to a different year');\n }\n\n return date;\n }\n\n if (fieldValues.containsKey(ChronoField.DAY_OF_WEEK)) {\n var _y3 = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n\n if (resolverStyle === ResolverStyle.LENIENT) {\n var _weeks = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR), 1);\n\n var _days3 = MathUtil.safeSubtract(fieldValues.remove(ChronoField.DAY_OF_WEEK), 1);\n\n return LocalDate.of(_y3, 1, 1).plusWeeks(_weeks).plusDays(_days3);\n }\n\n var _aw = ChronoField.ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR));\n\n var dow = ChronoField.DAY_OF_WEEK.checkValidIntValue(fieldValues.remove(ChronoField.DAY_OF_WEEK));\n\n var _date = LocalDate.of(_y3, 1, 1).plusWeeks(_aw - 1).with(TemporalAdjusters.nextOrSame(DayOfWeek.of(dow)));\n\n if (resolverStyle === ResolverStyle.STRICT && _date.get(ChronoField.YEAR) !== _y3) {\n throw new DateTimeException('Strict mode rejected date parsed to a different month');\n }\n\n return _date;\n }\n }\n }\n\n return null;\n };\n\n _proto.date = function date(temporal) {\n return LocalDate.from(temporal);\n };\n\n return IsoChronology;\n}(Enum);\nfunction _init$e() {\n IsoChronology.INSTANCE = new IsoChronology('IsoChronology');\n}\n\nvar OffsetTime = function (_DefaultInterfaceTemp) {\n _inheritsLoose(OffsetTime, _DefaultInterfaceTemp);\n\n OffsetTime.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (temporal instanceof OffsetTime) {\n return temporal;\n } else if (temporal instanceof OffsetDateTime) {\n return temporal.toOffsetTime();\n }\n\n try {\n var time = LocalTime.from(temporal);\n var offset = ZoneOffset.from(temporal);\n return new OffsetTime(time, offset);\n } catch (ex) {\n throw new DateTimeException(\"Unable to obtain OffsetTime TemporalAccessor: \" + temporal + \", type \" + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n OffsetTime.now = function now(clockOrZone) {\n if (arguments.length === 0) {\n return OffsetTime._now(Clock.systemDefaultZone());\n } else if (clockOrZone instanceof Clock) {\n return OffsetTime._now(clockOrZone);\n } else {\n return OffsetTime._now(Clock.system(clockOrZone));\n }\n };\n\n OffsetTime._now = function _now(clock) {\n requireNonNull(clock, 'clock');\n var now = clock.instant();\n return OffsetTime.ofInstant(now, clock.zone().rules().offset(now));\n };\n\n OffsetTime.of = function of() {\n if (arguments.length <= 2) {\n return OffsetTime.ofTimeAndOffset.apply(this, arguments);\n } else {\n return OffsetTime.ofNumbers.apply(this, arguments);\n }\n };\n\n OffsetTime.ofNumbers = function ofNumbers(hour, minute, second, nanoOfSecond, offset) {\n var time = LocalTime.of(hour, minute, second, nanoOfSecond);\n return new OffsetTime(time, offset);\n };\n\n OffsetTime.ofTimeAndOffset = function ofTimeAndOffset(time, offset) {\n return new OffsetTime(time, offset);\n };\n\n OffsetTime.ofInstant = function ofInstant(instant, zone) {\n requireNonNull(instant, 'instant');\n requireInstance(instant, Instant, 'instant');\n requireNonNull(zone, 'zone');\n requireInstance(zone, ZoneId, 'zone');\n var rules = zone.rules();\n var offset = rules.offset(instant);\n var secsOfDay = instant.epochSecond() % LocalTime.SECONDS_PER_DAY;\n secsOfDay = (secsOfDay + offset.totalSeconds()) % LocalTime.SECONDS_PER_DAY;\n\n if (secsOfDay < 0) {\n secsOfDay += LocalTime.SECONDS_PER_DAY;\n }\n\n var time = LocalTime.ofSecondOfDay(secsOfDay, instant.nano());\n return new OffsetTime(time, offset);\n };\n\n OffsetTime.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_OFFSET_TIME;\n }\n\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, OffsetTime.FROM);\n };\n\n function OffsetTime(time, offset) {\n var _this;\n\n _this = _DefaultInterfaceTemp.call(this) || this;\n requireNonNull(time, 'time');\n requireInstance(time, LocalTime, 'time');\n requireNonNull(offset, 'offset');\n requireInstance(offset, ZoneOffset, 'offset');\n _this._time = time;\n _this._offset = offset;\n return _this;\n }\n\n var _proto = OffsetTime.prototype;\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.NANO_OF_DAY, this._time.toNanoOfDay()).with(ChronoField.OFFSET_SECONDS, this.offset().totalSeconds());\n };\n\n _proto.atDate = function atDate(date) {\n return OffsetDateTime.of(date, this._time, this._offset);\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this, OffsetTime.FROM);\n };\n\n _proto.get = function get(field) {\n return _DefaultInterfaceTemp.prototype.get.call(this, field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field instanceof ChronoField) {\n if (field === ChronoField.OFFSET_SECONDS) {\n return this._offset.totalSeconds();\n }\n\n return this._time.getLong(field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.hour = function hour() {\n return this._time.hour();\n };\n\n _proto.minute = function minute() {\n return this._time.minute();\n };\n\n _proto.second = function second() {\n return this._time.second();\n };\n\n _proto.nano = function nano() {\n return this._time.nano();\n };\n\n _proto.offset = function offset() {\n return this._offset;\n };\n\n _proto.isAfter = function isAfter(other) {\n requireNonNull(other, 'other');\n return this._toEpochNano() > other._toEpochNano();\n };\n\n _proto.isBefore = function isBefore(other) {\n requireNonNull(other, 'other');\n return this._toEpochNano() < other._toEpochNano();\n };\n\n _proto.isEqual = function isEqual(other) {\n requireNonNull(other, 'other');\n return this._toEpochNano() === other._toEpochNano();\n };\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isTimeBased() || fieldOrUnit === ChronoField.OFFSET_SECONDS;\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isTimeBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.minusHours = function minusHours(hours) {\n return this._withLocalTimeOffset(this._time.minusHours(hours), this._offset);\n };\n\n _proto.minusMinutes = function minusMinutes(minutes) {\n return this._withLocalTimeOffset(this._time.minusMinutes(minutes), this._offset);\n };\n\n _proto.minusSeconds = function minusSeconds(seconds) {\n return this._withLocalTimeOffset(this._time.minusSeconds(seconds), this._offset);\n };\n\n _proto.minusNanos = function minusNanos(nanos) {\n return this._withLocalTimeOffset(this._time.minusNanos(nanos), this._offset);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount);\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n return this.plus(-1 * amountToSubtract, unit);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount);\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n if (unit instanceof ChronoUnit) {\n return this._withLocalTimeOffset(this._time.plus(amountToAdd, unit), this._offset);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusHours = function plusHours(hours) {\n return this._withLocalTimeOffset(this._time.plusHours(hours), this._offset);\n };\n\n _proto.plusMinutes = function plusMinutes(minutes) {\n return this._withLocalTimeOffset(this._time.plusMinutes(minutes), this._offset);\n };\n\n _proto.plusSeconds = function plusSeconds(seconds) {\n return this._withLocalTimeOffset(this._time.plusSeconds(seconds), this._offset);\n };\n\n _proto.plusNanos = function plusNanos(nanos) {\n return this._withLocalTimeOffset(this._time.plusNanos(nanos), this._offset);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (_query === TemporalQueries.offset() || _query === TemporalQueries.zone()) {\n return this.offset();\n } else if (_query === TemporalQueries.localTime()) {\n return this._time;\n } else if (_query === TemporalQueries.chronology() || _query === TemporalQueries.localDate() || _query === TemporalQueries.zoneId()) {\n return null;\n }\n\n return _DefaultInterfaceTemp.prototype.query.call(this, _query);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n if (field === ChronoField.OFFSET_SECONDS) {\n return field.range();\n }\n\n return this._time.range(field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.toLocalTime = function toLocalTime() {\n return this._time;\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n return this._withLocalTimeOffset(this._time.truncatedTo(unit), this._offset);\n };\n\n _proto.until = function until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n var end = OffsetTime.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n var nanosUntil = end._toEpochNano() - this._toEpochNano();\n\n switch (unit) {\n case ChronoUnit.NANOS:\n return nanosUntil;\n\n case ChronoUnit.MICROS:\n return Math.floor(nanosUntil / 1000);\n\n case ChronoUnit.MILLIS:\n return Math.floor(nanosUntil / 1000000);\n\n case ChronoUnit.SECONDS:\n return Math.floor(nanosUntil / LocalTime.NANOS_PER_SECOND);\n\n case ChronoUnit.MINUTES:\n return Math.floor(nanosUntil / LocalTime.NANOS_PER_MINUTE);\n\n case ChronoUnit.HOURS:\n return Math.floor(nanosUntil / LocalTime.NANOS_PER_HOUR);\n\n case ChronoUnit.HALF_DAYS:\n return Math.floor(nanosUntil / (12 * LocalTime.NANOS_PER_HOUR));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.withHour = function withHour(hour) {\n return this._withLocalTimeOffset(this._time.withHour(hour), this._offset);\n };\n\n _proto.withMinute = function withMinute(minute) {\n return this._withLocalTimeOffset(this._time.withMinute(minute), this._offset);\n };\n\n _proto.withSecond = function withSecond(second) {\n return this._withLocalTimeOffset(this._time.withSecond(second), this._offset);\n };\n\n _proto.withNano = function withNano(nano) {\n return this._withLocalTimeOffset(this._time.withNano(nano), this._offset);\n };\n\n _proto.withOffsetSameInstant = function withOffsetSameInstant(offset) {\n requireNonNull(offset, 'offset');\n\n if (offset.equals(this._offset)) {\n return this;\n }\n\n var difference = offset.totalSeconds() - this._offset.totalSeconds();\n\n var adjusted = this._time.plusSeconds(difference);\n\n return new OffsetTime(adjusted, offset);\n };\n\n _proto.withOffsetSameLocal = function withOffsetSameLocal(offset) {\n return offset != null && offset.equals(this._offset) ? this : new OffsetTime(this._time, offset);\n };\n\n _proto._toEpochNano = function _toEpochNano() {\n var nod = this._time.toNanoOfDay();\n\n var offsetNanos = this._offset.totalSeconds() * LocalTime.NANOS_PER_SECOND;\n return nod - offsetNanos;\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n\n if (adjuster instanceof LocalTime) {\n return this._withLocalTimeOffset(adjuster, this._offset);\n } else if (adjuster instanceof ZoneOffset) {\n return this._withLocalTimeOffset(this._time, adjuster);\n } else if (adjuster instanceof OffsetTime) {\n return adjuster;\n }\n\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n if (field === ChronoField.OFFSET_SECONDS) {\n return this._withLocalTimeOffset(this._time, ZoneOffset.ofTotalSeconds(field.checkValidIntValue(newValue)));\n }\n\n return this._withLocalTimeOffset(this._time.with(field, newValue), this._offset);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto._withLocalTimeOffset = function _withLocalTimeOffset(time, offset) {\n if (this._time === time && this._offset.equals(offset)) {\n return this;\n }\n\n return new OffsetTime(time, offset);\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, OffsetTime, 'other');\n\n if (this._offset.equals(other._offset)) {\n return this._time.compareTo(other._time);\n }\n\n var compare = MathUtil.compareNumbers(this._toEpochNano(), other._toEpochNano());\n\n if (compare === 0) {\n return this._time.compareTo(other._time);\n }\n\n return compare;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof OffsetTime) {\n return this._time.equals(other._time) && this._offset.equals(other._offset);\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._time.hashCode() ^ this._offset.hashCode();\n };\n\n _proto.toString = function toString() {\n return this._time.toString() + this._offset.toString();\n };\n\n return OffsetTime;\n}(DefaultInterfaceTemporal);\nfunction _init$f() {\n OffsetTime.MIN = OffsetTime.ofNumbers(0, 0, 0, 0, ZoneOffset.MAX);\n OffsetTime.MAX = OffsetTime.ofNumbers(23, 59, 59, 999999999, ZoneOffset.MIN);\n OffsetTime.FROM = createTemporalQuery('OffsetTime.FROM', function (temporal) {\n return OffsetTime.from(temporal);\n });\n}\n\nvar ChronoZonedDateTime = function (_DefaultInterfaceTemp) {\n _inheritsLoose(ChronoZonedDateTime, _DefaultInterfaceTemp);\n\n function ChronoZonedDateTime() {\n return _DefaultInterfaceTemp.apply(this, arguments) || this;\n }\n\n var _proto = ChronoZonedDateTime.prototype;\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.zoneId() || _query === TemporalQueries.zone()) {\n return this.zone();\n } else if (_query === TemporalQueries.chronology()) {\n return this.toLocalDate().chronology();\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (_query === TemporalQueries.offset()) {\n return this.offset();\n } else if (_query === TemporalQueries.localDate()) {\n return LocalDate.ofEpochDay(this.toLocalDate().toEpochDay());\n } else if (_query === TemporalQueries.localTime()) {\n return this.toLocalTime();\n }\n\n return _DefaultInterfaceTemp.prototype.query.call(this, _query);\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n };\n\n _proto.toInstant = function toInstant() {\n return Instant.ofEpochSecond(this.toEpochSecond(), this.toLocalTime().nano());\n };\n\n _proto.toEpochSecond = function toEpochSecond() {\n var epochDay = this.toLocalDate().toEpochDay();\n var secs = epochDay * 86400 + this.toLocalTime().toSecondOfDay();\n secs -= this.offset().totalSeconds();\n return secs;\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n var cmp = MathUtil.compareNumbers(this.toEpochSecond(), other.toEpochSecond());\n\n if (cmp === 0) {\n cmp = this.toLocalTime().nano() - other.toLocalTime().nano();\n\n if (cmp === 0) {\n cmp = this.toLocalDateTime().compareTo(other.toLocalDateTime());\n\n if (cmp === 0) {\n cmp = strcmp(this.zone().id(), other.zone().id());\n }\n }\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n requireNonNull(other, 'other');\n var thisEpochSec = this.toEpochSecond();\n var otherEpochSec = other.toEpochSecond();\n return thisEpochSec > otherEpochSec || thisEpochSec === otherEpochSec && this.toLocalTime().nano() > other.toLocalTime().nano();\n };\n\n _proto.isBefore = function isBefore(other) {\n requireNonNull(other, 'other');\n var thisEpochSec = this.toEpochSecond();\n var otherEpochSec = other.toEpochSecond();\n return thisEpochSec < otherEpochSec || thisEpochSec === otherEpochSec && this.toLocalTime().nano() < other.toLocalTime().nano();\n };\n\n _proto.isEqual = function isEqual(other) {\n requireNonNull(other, 'other');\n return this.toEpochSecond() === other.toEpochSecond() && this.toLocalTime().nano() === other.toLocalTime().nano();\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof ChronoZonedDateTime) {\n return this.compareTo(other) === 0;\n }\n\n return false;\n };\n\n return ChronoZonedDateTime;\n}(DefaultInterfaceTemporal);\n\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n\n if (a > b) {\n return 1;\n }\n\n return 0;\n}\n\nvar ZonedDateTime = function (_ChronoZonedDateTime) {\n _inheritsLoose(ZonedDateTime, _ChronoZonedDateTime);\n\n ZonedDateTime.now = function now(clockOrZone) {\n var clock;\n\n if (clockOrZone instanceof ZoneId) {\n clock = Clock.system(clockOrZone);\n } else {\n clock = clockOrZone == null ? Clock.systemDefaultZone() : clockOrZone;\n }\n\n return ZonedDateTime.ofInstant(clock.instant(), clock.zone());\n };\n\n ZonedDateTime.of = function of() {\n if (arguments.length <= 2) {\n return ZonedDateTime.of2.apply(this, arguments);\n } else if (arguments.length === 3 && arguments[0] instanceof LocalDate) {\n return ZonedDateTime.of3.apply(this, arguments);\n } else {\n return ZonedDateTime.of8.apply(this, arguments);\n }\n };\n\n ZonedDateTime.of3 = function of3(date, time, zone) {\n return ZonedDateTime.of2(LocalDateTime.of(date, time), zone);\n };\n\n ZonedDateTime.of2 = function of2(localDateTime, zone) {\n return ZonedDateTime.ofLocal(localDateTime, zone, null);\n };\n\n ZonedDateTime.of8 = function of8(year, month, dayOfMonth, hour, minute, second, nanoOfSecond, zone) {\n var dt = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);\n return ZonedDateTime.ofLocal(dt, zone, null);\n };\n\n ZonedDateTime.ofLocal = function ofLocal(localDateTime, zone, preferredOffset) {\n requireNonNull(localDateTime, 'localDateTime');\n requireNonNull(zone, 'zone');\n\n if (zone instanceof ZoneOffset) {\n return new ZonedDateTime(localDateTime, zone, zone);\n }\n\n var offset = null;\n var rules = zone.rules();\n var validOffsets = rules.validOffsets(localDateTime);\n\n if (validOffsets.length === 1) {\n offset = validOffsets[0];\n } else if (validOffsets.length === 0) {\n var trans = rules.transition(localDateTime);\n localDateTime = localDateTime.plusSeconds(trans.duration().seconds());\n offset = trans.offsetAfter();\n } else {\n if (preferredOffset != null && validOffsets.some(function (validOffset) {\n return validOffset.equals(preferredOffset);\n })) {\n offset = preferredOffset;\n } else {\n offset = requireNonNull(validOffsets[0], 'offset');\n }\n }\n\n return new ZonedDateTime(localDateTime, offset, zone);\n };\n\n ZonedDateTime.ofInstant = function ofInstant() {\n if (arguments.length === 2) {\n return ZonedDateTime.ofInstant2.apply(this, arguments);\n } else {\n return ZonedDateTime.ofInstant3.apply(this, arguments);\n }\n };\n\n ZonedDateTime.ofInstant2 = function ofInstant2(instant, zone) {\n requireNonNull(instant, 'instant');\n requireNonNull(zone, 'zone');\n return ZonedDateTime._create(instant.epochSecond(), instant.nano(), zone);\n };\n\n ZonedDateTime.ofInstant3 = function ofInstant3(localDateTime, offset, zone) {\n requireNonNull(localDateTime, 'localDateTime');\n requireNonNull(offset, 'offset');\n requireNonNull(zone, 'zone');\n return ZonedDateTime._create(localDateTime.toEpochSecond(offset), localDateTime.nano(), zone);\n };\n\n ZonedDateTime._create = function _create(epochSecond, nanoOfSecond, zone) {\n var rules = zone.rules();\n var instant = Instant.ofEpochSecond(epochSecond, nanoOfSecond);\n var offset = rules.offset(instant);\n var ldt = LocalDateTime.ofEpochSecond(epochSecond, nanoOfSecond, offset);\n return new ZonedDateTime(ldt, offset, zone);\n };\n\n ZonedDateTime.ofStrict = function ofStrict(localDateTime, offset, zone) {\n requireNonNull(localDateTime, 'localDateTime');\n requireNonNull(offset, 'offset');\n requireNonNull(zone, 'zone');\n var rules = zone.rules();\n\n if (rules.isValidOffset(localDateTime, offset) === false) {\n var trans = rules.transition(localDateTime);\n\n if (trans != null && trans.isGap()) {\n throw new DateTimeException('LocalDateTime ' + localDateTime + ' does not exist in zone ' + zone + ' due to a gap in the local time-line, typically caused by daylight savings');\n }\n\n throw new DateTimeException('ZoneOffset \"' + offset + '\" is not valid for LocalDateTime \"' + localDateTime + '\" in zone \"' + zone + '\"');\n }\n\n return new ZonedDateTime(localDateTime, offset, zone);\n };\n\n ZonedDateTime.ofLenient = function ofLenient(localDateTime, offset, zone) {\n requireNonNull(localDateTime, 'localDateTime');\n requireNonNull(offset, 'offset');\n requireNonNull(zone, 'zone');\n\n if (zone instanceof ZoneOffset && offset.equals(zone) === false) {\n throw new IllegalArgumentException('ZoneId must match ZoneOffset');\n }\n\n return new ZonedDateTime(localDateTime, offset, zone);\n };\n\n ZonedDateTime.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (temporal instanceof ZonedDateTime) {\n return temporal;\n }\n\n var zone = ZoneId.from(temporal);\n\n if (temporal.isSupported(ChronoField.INSTANT_SECONDS)) {\n var zdt = ZonedDateTime._from(temporal, zone);\n\n if (zdt != null) return zdt;\n }\n\n var ldt = LocalDateTime.from(temporal);\n return ZonedDateTime.of2(ldt, zone);\n };\n\n ZonedDateTime._from = function _from(temporal, zone) {\n try {\n return ZonedDateTime.__from(temporal, zone);\n } catch (ex) {\n if (!(ex instanceof DateTimeException)) throw ex;\n }\n };\n\n ZonedDateTime.__from = function __from(temporal, zone) {\n var epochSecond = temporal.getLong(ChronoField.INSTANT_SECONDS);\n var nanoOfSecond = temporal.get(ChronoField.NANO_OF_SECOND);\n return ZonedDateTime._create(epochSecond, nanoOfSecond, zone);\n };\n\n ZonedDateTime.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;\n }\n\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, ZonedDateTime.FROM);\n };\n\n function ZonedDateTime(dateTime, offset, zone) {\n var _this;\n\n requireNonNull(dateTime, 'dateTime');\n requireNonNull(offset, 'offset');\n requireNonNull(zone, 'zone');\n _this = _ChronoZonedDateTime.call(this) || this;\n _this._dateTime = dateTime;\n _this._offset = offset;\n _this._zone = zone;\n return _this;\n }\n\n var _proto = ZonedDateTime.prototype;\n\n _proto._resolveLocal = function _resolveLocal(newDateTime) {\n requireNonNull(newDateTime, 'newDateTime');\n return ZonedDateTime.ofLocal(newDateTime, this._zone, this._offset);\n };\n\n _proto._resolveInstant = function _resolveInstant(newDateTime) {\n return ZonedDateTime.ofInstant3(newDateTime, this._offset, this._zone);\n };\n\n _proto._resolveOffset = function _resolveOffset(offset) {\n if (offset.equals(this._offset) === false && this._zone.rules().isValidOffset(this._dateTime, offset)) {\n return new ZonedDateTime(this._dateTime, offset, this._zone);\n }\n\n return this;\n };\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return true;\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n if (field === ChronoField.INSTANT_SECONDS || field === ChronoField.OFFSET_SECONDS) {\n return field.range();\n }\n\n return this._dateTime.range(field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.INSTANT_SECONDS:\n return this.toEpochSecond();\n\n case ChronoField.OFFSET_SECONDS:\n return this._offset.totalSeconds();\n }\n\n return this._dateTime.getLong(field);\n }\n\n requireNonNull(field, 'field');\n return field.getFrom(this);\n };\n\n _proto.offset = function offset() {\n return this._offset;\n };\n\n _proto.withEarlierOffsetAtOverlap = function withEarlierOffsetAtOverlap() {\n var trans = this._zone.rules().transition(this._dateTime);\n\n if (trans != null && trans.isOverlap()) {\n var earlierOffset = trans.offsetBefore();\n\n if (earlierOffset.equals(this._offset) === false) {\n return new ZonedDateTime(this._dateTime, earlierOffset, this._zone);\n }\n }\n\n return this;\n };\n\n _proto.withLaterOffsetAtOverlap = function withLaterOffsetAtOverlap() {\n var trans = this._zone.rules().transition(this.toLocalDateTime());\n\n if (trans != null) {\n var laterOffset = trans.offsetAfter();\n\n if (laterOffset.equals(this._offset) === false) {\n return new ZonedDateTime(this._dateTime, laterOffset, this._zone);\n }\n }\n\n return this;\n };\n\n _proto.zone = function zone() {\n return this._zone;\n };\n\n _proto.withZoneSameLocal = function withZoneSameLocal(zone) {\n requireNonNull(zone, 'zone');\n return this._zone.equals(zone) ? this : ZonedDateTime.ofLocal(this._dateTime, zone, this._offset);\n };\n\n _proto.withZoneSameInstant = function withZoneSameInstant(zone) {\n requireNonNull(zone, 'zone');\n return this._zone.equals(zone) ? this : ZonedDateTime._create(this._dateTime.toEpochSecond(this._offset), this._dateTime.nano(), zone);\n };\n\n _proto.withFixedOffsetZone = function withFixedOffsetZone() {\n return this._zone.equals(this._offset) ? this : new ZonedDateTime(this._dateTime, this._offset, this._offset);\n };\n\n _proto.year = function year() {\n return this._dateTime.year();\n };\n\n _proto.monthValue = function monthValue() {\n return this._dateTime.monthValue();\n };\n\n _proto.month = function month() {\n return this._dateTime.month();\n };\n\n _proto.dayOfMonth = function dayOfMonth() {\n return this._dateTime.dayOfMonth();\n };\n\n _proto.dayOfYear = function dayOfYear() {\n return this._dateTime.dayOfYear();\n };\n\n _proto.dayOfWeek = function dayOfWeek() {\n return this._dateTime.dayOfWeek();\n };\n\n _proto.hour = function hour() {\n return this._dateTime.hour();\n };\n\n _proto.minute = function minute() {\n return this._dateTime.minute();\n };\n\n _proto.second = function second() {\n return this._dateTime.second();\n };\n\n _proto.nano = function nano() {\n return this._dateTime.nano();\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n if (adjuster instanceof LocalDate) {\n return this._resolveLocal(LocalDateTime.of(adjuster, this._dateTime.toLocalTime()));\n } else if (adjuster instanceof LocalTime) {\n return this._resolveLocal(LocalDateTime.of(this._dateTime.toLocalDate(), adjuster));\n } else if (adjuster instanceof LocalDateTime) {\n return this._resolveLocal(adjuster);\n } else if (adjuster instanceof Instant) {\n var instant = adjuster;\n return ZonedDateTime._create(instant.epochSecond(), instant.nano(), this._zone);\n } else if (adjuster instanceof ZoneOffset) {\n return this._resolveOffset(adjuster);\n }\n\n requireNonNull(adjuster, 'adjuster');\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.INSTANT_SECONDS:\n return ZonedDateTime._create(newValue, this.nano(), this._zone);\n\n case ChronoField.OFFSET_SECONDS:\n {\n var offset = ZoneOffset.ofTotalSeconds(field.checkValidIntValue(newValue));\n return this._resolveOffset(offset);\n }\n }\n\n return this._resolveLocal(this._dateTime.with(field, newValue));\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.withYear = function withYear(year) {\n return this._resolveLocal(this._dateTime.withYear(year));\n };\n\n _proto.withMonth = function withMonth(month) {\n return this._resolveLocal(this._dateTime.withMonth(month));\n };\n\n _proto.withDayOfMonth = function withDayOfMonth(dayOfMonth) {\n return this._resolveLocal(this._dateTime.withDayOfMonth(dayOfMonth));\n };\n\n _proto.withDayOfYear = function withDayOfYear(dayOfYear) {\n return this._resolveLocal(this._dateTime.withDayOfYear(dayOfYear));\n };\n\n _proto.withHour = function withHour(hour) {\n return this._resolveLocal(this._dateTime.withHour(hour));\n };\n\n _proto.withMinute = function withMinute(minute) {\n return this._resolveLocal(this._dateTime.withMinute(minute));\n };\n\n _proto.withSecond = function withSecond(second) {\n return this._resolveLocal(this._dateTime.withSecond(second));\n };\n\n _proto.withNano = function withNano(nanoOfSecond) {\n return this._resolveLocal(this._dateTime.withNano(nanoOfSecond));\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n return this._resolveLocal(this._dateTime.truncatedTo(unit));\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount);\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n if (unit instanceof ChronoUnit) {\n if (unit.isDateBased()) {\n return this._resolveLocal(this._dateTime.plus(amountToAdd, unit));\n } else {\n return this._resolveInstant(this._dateTime.plus(amountToAdd, unit));\n }\n }\n\n requireNonNull(unit, 'unit');\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(years) {\n return this._resolveLocal(this._dateTime.plusYears(years));\n };\n\n _proto.plusMonths = function plusMonths(months) {\n return this._resolveLocal(this._dateTime.plusMonths(months));\n };\n\n _proto.plusWeeks = function plusWeeks(weeks) {\n return this._resolveLocal(this._dateTime.plusWeeks(weeks));\n };\n\n _proto.plusDays = function plusDays(days) {\n return this._resolveLocal(this._dateTime.plusDays(days));\n };\n\n _proto.plusHours = function plusHours(hours) {\n return this._resolveInstant(this._dateTime.plusHours(hours));\n };\n\n _proto.plusMinutes = function plusMinutes(minutes) {\n return this._resolveInstant(this._dateTime.plusMinutes(minutes));\n };\n\n _proto.plusSeconds = function plusSeconds(seconds) {\n return this._resolveInstant(this._dateTime.plusSeconds(seconds));\n };\n\n _proto.plusNanos = function plusNanos(nanos) {\n return this._resolveInstant(this._dateTime.plusNanos(nanos));\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n return this.plusAmountUnit(-1 * amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(years) {\n return this.plusYears(-1 * years);\n };\n\n _proto.minusMonths = function minusMonths(months) {\n return this.plusMonths(-1 * months);\n };\n\n _proto.minusWeeks = function minusWeeks(weeks) {\n return this.plusWeeks(-1 * weeks);\n };\n\n _proto.minusDays = function minusDays(days) {\n return this.plusDays(-1 * days);\n };\n\n _proto.minusHours = function minusHours(hours) {\n return this.plusHours(-1 * hours);\n };\n\n _proto.minusMinutes = function minusMinutes(minutes) {\n return this.plusMinutes(-1 * minutes);\n };\n\n _proto.minusSeconds = function minusSeconds(seconds) {\n return this.plusSeconds(-1 * seconds);\n };\n\n _proto.minusNanos = function minusNanos(nanos) {\n return this.plusNanos(-1 * nanos);\n };\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.localDate()) {\n return this.toLocalDate();\n }\n\n requireNonNull(_query, 'query');\n return _ChronoZonedDateTime.prototype.query.call(this, _query);\n };\n\n _proto.until = function until(endExclusive, unit) {\n var end = ZonedDateTime.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n end = end.withZoneSameInstant(this._zone);\n\n if (unit.isDateBased()) {\n return this._dateTime.until(end._dateTime, unit);\n } else {\n var difference = this._offset.totalSeconds() - end._offset.totalSeconds();\n\n var adjustedEnd = end._dateTime.plusSeconds(difference);\n\n return this._dateTime.until(adjustedEnd, unit);\n }\n }\n\n return unit.between(this, end);\n };\n\n _proto.toLocalDateTime = function toLocalDateTime() {\n return this._dateTime;\n };\n\n _proto.toLocalDate = function toLocalDate() {\n return this._dateTime.toLocalDate();\n };\n\n _proto.toLocalTime = function toLocalTime() {\n return this._dateTime.toLocalTime();\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof ZonedDateTime) {\n return this._dateTime.equals(other._dateTime) && this._offset.equals(other._offset) && this._zone.equals(other._zone);\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return MathUtil.hashCode(this._dateTime.hashCode(), this._offset.hashCode(), this._zone.hashCode());\n };\n\n _proto.toString = function toString() {\n var str = this._dateTime.toString() + this._offset.toString();\n\n if (this._offset !== this._zone) {\n str += '[' + this._zone.toString() + ']';\n }\n\n return str;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n return _ChronoZonedDateTime.prototype.format.call(this, formatter);\n };\n\n return ZonedDateTime;\n}(ChronoZonedDateTime);\nfunction _init$g() {\n ZonedDateTime.FROM = createTemporalQuery('ZonedDateTime.FROM', function (temporal) {\n return ZonedDateTime.from(temporal);\n });\n}\n\nvar OffsetDateTime = function (_DefaultInterfaceTemp) {\n _inheritsLoose(OffsetDateTime, _DefaultInterfaceTemp);\n\n OffsetDateTime.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (temporal instanceof OffsetDateTime) {\n return temporal;\n }\n\n try {\n var offset = ZoneOffset.from(temporal);\n\n try {\n var ldt = LocalDateTime.from(temporal);\n return OffsetDateTime.of(ldt, offset);\n } catch (_) {\n var instant = Instant.from(temporal);\n return OffsetDateTime.ofInstant(instant, offset);\n }\n } catch (ex) {\n throw new DateTimeException(\"Unable to obtain OffsetDateTime TemporalAccessor: \" + temporal + \", type \" + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n OffsetDateTime.now = function now(clockOrZone) {\n if (arguments.length === 0) {\n return OffsetDateTime.now(Clock.systemDefaultZone());\n } else {\n requireNonNull(clockOrZone, 'clockOrZone');\n\n if (clockOrZone instanceof ZoneId) {\n return OffsetDateTime.now(Clock.system(clockOrZone));\n } else if (clockOrZone instanceof Clock) {\n var now = clockOrZone.instant();\n return OffsetDateTime.ofInstant(now, clockOrZone.zone().rules().offset(now));\n } else {\n throw new IllegalArgumentException('clockOrZone must be an instance of ZoneId or Clock');\n }\n }\n };\n\n OffsetDateTime.of = function of() {\n if (arguments.length <= 2) {\n return OffsetDateTime.ofDateTime.apply(this, arguments);\n } else if (arguments.length === 3) {\n return OffsetDateTime.ofDateAndTime.apply(this, arguments);\n } else {\n return OffsetDateTime.ofNumbers.apply(this, arguments);\n }\n };\n\n OffsetDateTime.ofDateTime = function ofDateTime(dateTime, offset) {\n return new OffsetDateTime(dateTime, offset);\n };\n\n OffsetDateTime.ofDateAndTime = function ofDateAndTime(date, time, offset) {\n var dt = LocalDateTime.of(date, time);\n return new OffsetDateTime(dt, offset);\n };\n\n OffsetDateTime.ofNumbers = function ofNumbers(year, month, dayOfMonth, hour, minute, second, nanoOfSecond, offset) {\n if (hour === void 0) {\n hour = 0;\n }\n\n if (minute === void 0) {\n minute = 0;\n }\n\n if (second === void 0) {\n second = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n var dt = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);\n return new OffsetDateTime(dt, offset);\n };\n\n OffsetDateTime.ofInstant = function ofInstant(instant, zone) {\n requireNonNull(instant, 'instant');\n requireNonNull(zone, 'zone');\n var rules = zone.rules();\n var offset = rules.offset(instant);\n var ldt = LocalDateTime.ofEpochSecond(instant.epochSecond(), instant.nano(), offset);\n return new OffsetDateTime(ldt, offset);\n };\n\n OffsetDateTime.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;\n }\n\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, OffsetDateTime.FROM);\n };\n\n function OffsetDateTime(dateTime, offset) {\n var _this;\n\n _this = _DefaultInterfaceTemp.call(this) || this;\n requireNonNull(dateTime, 'dateTime');\n requireInstance(dateTime, LocalDateTime, 'dateTime');\n requireNonNull(offset, 'offset');\n requireInstance(offset, ZoneOffset, 'offset');\n _this._dateTime = dateTime;\n _this._offset = offset;\n return _this;\n }\n\n var _proto = OffsetDateTime.prototype;\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.EPOCH_DAY, this.toLocalDate().toEpochDay()).with(ChronoField.NANO_OF_DAY, this.toLocalTime().toNanoOfDay()).with(ChronoField.OFFSET_SECONDS, this.offset().totalSeconds());\n };\n\n _proto.until = function until(endExclusive, unit) {\n var end = OffsetDateTime.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n end = end.withOffsetSameInstant(this._offset);\n return this._dateTime.until(end._dateTime, unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.atZoneSameInstant = function atZoneSameInstant(zone) {\n return ZonedDateTime.ofInstant(this._dateTime, this._offset, zone);\n };\n\n _proto.atZoneSimilarLocal = function atZoneSimilarLocal(zone) {\n return ZonedDateTime.ofLocal(this._dateTime, zone, this._offset);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (_query === TemporalQueries.offset() || _query === TemporalQueries.zone()) {\n return this.offset();\n } else if (_query === TemporalQueries.localDate()) {\n return this.toLocalDate();\n } else if (_query === TemporalQueries.localTime()) {\n return this.toLocalTime();\n } else if (_query === TemporalQueries.zoneId()) {\n return null;\n }\n\n return _DefaultInterfaceTemp.prototype.query.call(this, _query);\n };\n\n _proto.get = function get(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.INSTANT_SECONDS:\n throw new DateTimeException('Field too large for an int: ' + field);\n\n case ChronoField.OFFSET_SECONDS:\n return this.offset().totalSeconds();\n }\n\n return this._dateTime.get(field);\n }\n\n return _DefaultInterfaceTemp.prototype.get.call(this, field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.INSTANT_SECONDS:\n return this.toEpochSecond();\n\n case ChronoField.OFFSET_SECONDS:\n return this.offset().totalSeconds();\n }\n\n return this._dateTime.getLong(field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.offset = function offset() {\n return this._offset;\n };\n\n _proto.year = function year() {\n return this._dateTime.year();\n };\n\n _proto.monthValue = function monthValue() {\n return this._dateTime.monthValue();\n };\n\n _proto.month = function month() {\n return this._dateTime.month();\n };\n\n _proto.dayOfMonth = function dayOfMonth() {\n return this._dateTime.dayOfMonth();\n };\n\n _proto.dayOfYear = function dayOfYear() {\n return this._dateTime.dayOfYear();\n };\n\n _proto.dayOfWeek = function dayOfWeek() {\n return this._dateTime.dayOfWeek();\n };\n\n _proto.hour = function hour() {\n return this._dateTime.hour();\n };\n\n _proto.minute = function minute() {\n return this._dateTime.minute();\n };\n\n _proto.second = function second() {\n return this._dateTime.second();\n };\n\n _proto.nano = function nano() {\n return this._dateTime.nano();\n };\n\n _proto.toLocalDateTime = function toLocalDateTime() {\n return this._dateTime;\n };\n\n _proto.toLocalDate = function toLocalDate() {\n return this._dateTime.toLocalDate();\n };\n\n _proto.toLocalTime = function toLocalTime() {\n return this._dateTime.toLocalTime();\n };\n\n _proto.toOffsetTime = function toOffsetTime() {\n return OffsetTime.of(this._dateTime.toLocalTime(), this._offset);\n };\n\n _proto.toZonedDateTime = function toZonedDateTime() {\n return ZonedDateTime.of(this._dateTime, this._offset);\n };\n\n _proto.toInstant = function toInstant() {\n return this._dateTime.toInstant(this._offset);\n };\n\n _proto.toEpochSecond = function toEpochSecond() {\n return this._dateTime.toEpochSecond(this._offset);\n };\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n }\n\n if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n if (field === ChronoField.INSTANT_SECONDS || field === ChronoField.OFFSET_SECONDS) {\n return field.range();\n }\n\n return this._dateTime.range(field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster);\n\n if (adjuster instanceof LocalDate || adjuster instanceof LocalTime || adjuster instanceof LocalDateTime) {\n return this._withDateTimeOffset(this._dateTime.with(adjuster), this._offset);\n } else if (adjuster instanceof Instant) {\n return OffsetDateTime.ofInstant(adjuster, this._offset);\n } else if (adjuster instanceof ZoneOffset) {\n return this._withDateTimeOffset(this._dateTime, adjuster);\n } else if (adjuster instanceof OffsetDateTime) {\n return adjuster;\n }\n\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field);\n\n if (field instanceof ChronoField) {\n var f = field;\n\n switch (f) {\n case ChronoField.INSTANT_SECONDS:\n return OffsetDateTime.ofInstant(Instant.ofEpochSecond(newValue, this.nano()), this._offset);\n\n case ChronoField.OFFSET_SECONDS:\n {\n return this._withDateTimeOffset(this._dateTime, ZoneOffset.ofTotalSeconds(f.checkValidIntValue(newValue)));\n }\n }\n\n return this._withDateTimeOffset(this._dateTime.with(field, newValue), this._offset);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto._withDateTimeOffset = function _withDateTimeOffset(dateTime, offset) {\n if (this._dateTime === dateTime && this._offset.equals(offset)) {\n return this;\n }\n\n return new OffsetDateTime(dateTime, offset);\n };\n\n _proto.withYear = function withYear(year) {\n return this._withDateTimeOffset(this._dateTime.withYear(year), this._offset);\n };\n\n _proto.withMonth = function withMonth(month) {\n return this._withDateTimeOffset(this._dateTime.withMonth(month), this._offset);\n };\n\n _proto.withDayOfMonth = function withDayOfMonth(dayOfMonth) {\n return this._withDateTimeOffset(this._dateTime.withDayOfMonth(dayOfMonth), this._offset);\n };\n\n _proto.withDayOfYear = function withDayOfYear(dayOfYear) {\n return this._withDateTimeOffset(this._dateTime.withDayOfYear(dayOfYear), this._offset);\n };\n\n _proto.withHour = function withHour(hour) {\n return this._withDateTimeOffset(this._dateTime.withHour(hour), this._offset);\n };\n\n _proto.withMinute = function withMinute(minute) {\n return this._withDateTimeOffset(this._dateTime.withMinute(minute), this._offset);\n };\n\n _proto.withSecond = function withSecond(second) {\n return this._withDateTimeOffset(this._dateTime.withSecond(second), this._offset);\n };\n\n _proto.withNano = function withNano(nanoOfSecond) {\n return this._withDateTimeOffset(this._dateTime.withNano(nanoOfSecond), this._offset);\n };\n\n _proto.withOffsetSameLocal = function withOffsetSameLocal(offset) {\n requireNonNull(offset, 'offset');\n return this._withDateTimeOffset(this._dateTime, offset);\n };\n\n _proto.withOffsetSameInstant = function withOffsetSameInstant(offset) {\n requireNonNull(offset, 'offset');\n\n if (offset.equals(this._offset)) {\n return this;\n }\n\n var difference = offset.totalSeconds() - this._offset.totalSeconds();\n\n var adjusted = this._dateTime.plusSeconds(difference);\n\n return new OffsetDateTime(adjusted, offset);\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n return this._withDateTimeOffset(this._dateTime.truncatedTo(unit), this._offset);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n if (unit instanceof ChronoUnit) {\n return this._withDateTimeOffset(this._dateTime.plus(amountToAdd, unit), this._offset);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(years) {\n return this._withDateTimeOffset(this._dateTime.plusYears(years), this._offset);\n };\n\n _proto.plusMonths = function plusMonths(months) {\n return this._withDateTimeOffset(this._dateTime.plusMonths(months), this._offset);\n };\n\n _proto.plusWeeks = function plusWeeks(weeks) {\n return this._withDateTimeOffset(this._dateTime.plusWeeks(weeks), this._offset);\n };\n\n _proto.plusDays = function plusDays(days) {\n return this._withDateTimeOffset(this._dateTime.plusDays(days), this._offset);\n };\n\n _proto.plusHours = function plusHours(hours) {\n return this._withDateTimeOffset(this._dateTime.plusHours(hours), this._offset);\n };\n\n _proto.plusMinutes = function plusMinutes(minutes) {\n return this._withDateTimeOffset(this._dateTime.plusMinutes(minutes), this._offset);\n };\n\n _proto.plusSeconds = function plusSeconds(seconds) {\n return this._withDateTimeOffset(this._dateTime.plusSeconds(seconds), this._offset);\n };\n\n _proto.plusNanos = function plusNanos(nanos) {\n return this._withDateTimeOffset(this._dateTime.plusNanos(nanos), this._offset);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount);\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n return this.plus(-1 * amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(years) {\n return this._withDateTimeOffset(this._dateTime.minusYears(years), this._offset);\n };\n\n _proto.minusMonths = function minusMonths(months) {\n return this._withDateTimeOffset(this._dateTime.minusMonths(months), this._offset);\n };\n\n _proto.minusWeeks = function minusWeeks(weeks) {\n return this._withDateTimeOffset(this._dateTime.minusWeeks(weeks), this._offset);\n };\n\n _proto.minusDays = function minusDays(days) {\n return this._withDateTimeOffset(this._dateTime.minusDays(days), this._offset);\n };\n\n _proto.minusHours = function minusHours(hours) {\n return this._withDateTimeOffset(this._dateTime.minusHours(hours), this._offset);\n };\n\n _proto.minusMinutes = function minusMinutes(minutes) {\n return this._withDateTimeOffset(this._dateTime.minusMinutes(minutes), this._offset);\n };\n\n _proto.minusSeconds = function minusSeconds(seconds) {\n return this._withDateTimeOffset(this._dateTime.minusSeconds(seconds), this._offset);\n };\n\n _proto.minusNanos = function minusNanos(nanos) {\n return this._withDateTimeOffset(this._dateTime.minusNanos(nanos), this._offset);\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, OffsetDateTime, 'other');\n\n if (this.offset().equals(other.offset())) {\n return this.toLocalDateTime().compareTo(other.toLocalDateTime());\n }\n\n var cmp = MathUtil.compareNumbers(this.toEpochSecond(), other.toEpochSecond());\n\n if (cmp === 0) {\n cmp = this.toLocalTime().nano() - other.toLocalTime().nano();\n\n if (cmp === 0) {\n cmp = this.toLocalDateTime().compareTo(other.toLocalDateTime());\n }\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n requireNonNull(other, 'other');\n var thisEpochSec = this.toEpochSecond();\n var otherEpochSec = other.toEpochSecond();\n return thisEpochSec > otherEpochSec || thisEpochSec === otherEpochSec && this.toLocalTime().nano() > other.toLocalTime().nano();\n };\n\n _proto.isBefore = function isBefore(other) {\n requireNonNull(other, 'other');\n var thisEpochSec = this.toEpochSecond();\n var otherEpochSec = other.toEpochSecond();\n return thisEpochSec < otherEpochSec || thisEpochSec === otherEpochSec && this.toLocalTime().nano() < other.toLocalTime().nano();\n };\n\n _proto.isEqual = function isEqual(other) {\n requireNonNull(other, 'other');\n return this.toEpochSecond() === other.toEpochSecond() && this.toLocalTime().nano() === other.toLocalTime().nano();\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof OffsetDateTime) {\n return this._dateTime.equals(other._dateTime) && this._offset.equals(other._offset);\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._dateTime.hashCode() ^ this._offset.hashCode();\n };\n\n _proto.toString = function toString() {\n return this._dateTime.toString() + this._offset.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n };\n\n return OffsetDateTime;\n}(DefaultInterfaceTemporal);\nfunction _init$h() {\n OffsetDateTime.MIN = LocalDateTime.MIN.atOffset(ZoneOffset.MAX);\n OffsetDateTime.MAX = LocalDateTime.MAX.atOffset(ZoneOffset.MIN);\n OffsetDateTime.FROM = createTemporalQuery('OffsetDateTime.FROM', function (temporal) {\n return OffsetDateTime.from(temporal);\n });\n}\n\nvar DAYS_PER_CYCLE = 146097;\nvar DAYS_0000_TO_1970 = DAYS_PER_CYCLE * 5 - (30 * 365 + 7);\nvar LocalDate = function (_ChronoLocalDate) {\n _inheritsLoose(LocalDate, _ChronoLocalDate);\n\n LocalDate.now = function now(clockOrZone) {\n var clock;\n\n if (clockOrZone == null) {\n clock = Clock.systemDefaultZone();\n } else if (clockOrZone instanceof ZoneId) {\n clock = Clock.system(clockOrZone);\n } else {\n clock = clockOrZone;\n }\n\n return LocalDate.ofInstant(clock.instant(), clock.zone());\n };\n\n LocalDate.ofInstant = function ofInstant(instant, zone) {\n if (zone === void 0) {\n zone = ZoneId.systemDefault();\n }\n\n requireNonNull(instant, 'instant');\n var offset = zone.rules().offset(instant);\n var epochSec = instant.epochSecond() + offset.totalSeconds();\n var epochDay = MathUtil.floorDiv(epochSec, LocalTime.SECONDS_PER_DAY);\n return LocalDate.ofEpochDay(epochDay);\n };\n\n LocalDate.of = function of(year, month, dayOfMonth) {\n return new LocalDate(year, month, dayOfMonth);\n };\n\n LocalDate.ofYearDay = function ofYearDay(year, dayOfYear) {\n ChronoField.YEAR.checkValidValue(year);\n var leap = IsoChronology.isLeapYear(year);\n\n if (dayOfYear === 366 && leap === false) {\n assert(false, 'Invalid date \\'DayOfYear 366\\' as \\'' + year + '\\' is not a leap year', DateTimeException);\n }\n\n var moy = Month.of(Math.floor((dayOfYear - 1) / 31 + 1));\n var monthEnd = moy.firstDayOfYear(leap) + moy.length(leap) - 1;\n\n if (dayOfYear > monthEnd) {\n moy = moy.plus(1);\n }\n\n var dom = dayOfYear - moy.firstDayOfYear(leap) + 1;\n return new LocalDate(year, moy.value(), dom);\n };\n\n LocalDate.ofEpochDay = function ofEpochDay(epochDay) {\n if (epochDay === void 0) {\n epochDay = 0;\n }\n\n var adjust, adjustCycles, doyEst, yearEst, zeroDay;\n zeroDay = epochDay + DAYS_0000_TO_1970;\n zeroDay -= 60;\n adjust = 0;\n\n if (zeroDay < 0) {\n adjustCycles = MathUtil.intDiv(zeroDay + 1, DAYS_PER_CYCLE) - 1;\n adjust = adjustCycles * 400;\n zeroDay += -adjustCycles * DAYS_PER_CYCLE;\n }\n\n yearEst = MathUtil.intDiv(400 * zeroDay + 591, DAYS_PER_CYCLE);\n doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n\n if (doyEst < 0) {\n yearEst--;\n doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n }\n\n yearEst += adjust;\n var marchDoy0 = doyEst;\n var marchMonth0 = MathUtil.intDiv(marchDoy0 * 5 + 2, 153);\n var month = (marchMonth0 + 2) % 12 + 1;\n var dom = marchDoy0 - MathUtil.intDiv(marchMonth0 * 306 + 5, 10) + 1;\n yearEst += MathUtil.intDiv(marchMonth0, 10);\n var year = yearEst;\n return new LocalDate(year, month, dom);\n };\n\n LocalDate.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n var date = temporal.query(TemporalQueries.localDate());\n\n if (date == null) {\n throw new DateTimeException(\"Unable to obtain LocalDate from TemporalAccessor: \" + temporal + \", type \" + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n\n return date;\n };\n\n LocalDate.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_LOCAL_DATE;\n }\n\n assert(formatter != null, 'formatter', NullPointerException);\n return formatter.parse(text, LocalDate.FROM);\n };\n\n LocalDate._resolvePreviousValid = function _resolvePreviousValid(year, month, day) {\n switch (month) {\n case 2:\n day = Math.min(day, IsoChronology.isLeapYear(year) ? 29 : 28);\n break;\n\n case 4:\n case 6:\n case 9:\n case 11:\n day = Math.min(day, 30);\n break;\n }\n\n return LocalDate.of(year, month, day);\n };\n\n function LocalDate(year, month, dayOfMonth) {\n var _this;\n\n _this = _ChronoLocalDate.call(this) || this;\n requireNonNull(year, 'year');\n requireNonNull(month, 'month');\n requireNonNull(dayOfMonth, 'dayOfMonth');\n\n if (month instanceof Month) {\n month = month.value();\n }\n\n _this._year = MathUtil.safeToInt(year);\n _this._month = MathUtil.safeToInt(month);\n _this._day = MathUtil.safeToInt(dayOfMonth);\n\n LocalDate._validate(_this._year, _this._month, _this._day);\n\n return _this;\n }\n\n LocalDate._validate = function _validate(year, month, dayOfMonth) {\n var dom;\n ChronoField.YEAR.checkValidValue(year);\n ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n ChronoField.DAY_OF_MONTH.checkValidValue(dayOfMonth);\n\n if (dayOfMonth > 28) {\n dom = 31;\n\n switch (month) {\n case 2:\n dom = IsoChronology.isLeapYear(year) ? 29 : 28;\n break;\n\n case 4:\n case 6:\n case 9:\n case 11:\n dom = 30;\n }\n\n if (dayOfMonth > dom) {\n if (dayOfMonth === 29) {\n assert(false, 'Invalid date \\'February 29\\' as \\'' + year + '\\' is not a leap year', DateTimeException);\n } else {\n assert(false, 'Invalid date \\'' + year + '\\' \\'' + month + '\\' \\'' + dayOfMonth + '\\'', DateTimeException);\n }\n }\n }\n };\n\n var _proto = LocalDate.prototype;\n\n _proto.isSupported = function isSupported(field) {\n return _ChronoLocalDate.prototype.isSupported.call(this, field);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n if (field.isDateBased()) {\n switch (field) {\n case ChronoField.DAY_OF_MONTH:\n return ValueRange.of(1, this.lengthOfMonth());\n\n case ChronoField.DAY_OF_YEAR:\n return ValueRange.of(1, this.lengthOfYear());\n\n case ChronoField.ALIGNED_WEEK_OF_MONTH:\n return ValueRange.of(1, this.month() === Month.FEBRUARY && this.isLeapYear() === false ? 4 : 5);\n\n case ChronoField.YEAR_OF_ERA:\n return this._year <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE);\n }\n\n return field.range();\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n assert(field != null, '', NullPointerException);\n\n if (field instanceof ChronoField) {\n return this._get0(field);\n }\n\n return field.getFrom(this);\n };\n\n _proto._get0 = function _get0(field) {\n switch (field) {\n case ChronoField.DAY_OF_WEEK:\n return this.dayOfWeek().value();\n\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH:\n return MathUtil.intMod(this._day - 1, 7) + 1;\n\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR:\n return MathUtil.intMod(this.dayOfYear() - 1, 7) + 1;\n\n case ChronoField.DAY_OF_MONTH:\n return this._day;\n\n case ChronoField.DAY_OF_YEAR:\n return this.dayOfYear();\n\n case ChronoField.EPOCH_DAY:\n return this.toEpochDay();\n\n case ChronoField.ALIGNED_WEEK_OF_MONTH:\n return MathUtil.intDiv(this._day - 1, 7) + 1;\n\n case ChronoField.ALIGNED_WEEK_OF_YEAR:\n return MathUtil.intDiv(this.dayOfYear() - 1, 7) + 1;\n\n case ChronoField.MONTH_OF_YEAR:\n return this._month;\n\n case ChronoField.PROLEPTIC_MONTH:\n return this._prolepticMonth();\n\n case ChronoField.YEAR_OF_ERA:\n return this._year >= 1 ? this._year : 1 - this._year;\n\n case ChronoField.YEAR:\n return this._year;\n\n case ChronoField.ERA:\n return this._year >= 1 ? 1 : 0;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n };\n\n _proto._prolepticMonth = function _prolepticMonth() {\n return this._year * 12 + (this._month - 1);\n };\n\n _proto.chronology = function chronology() {\n return IsoChronology.INSTANCE;\n };\n\n _proto.year = function year() {\n return this._year;\n };\n\n _proto.monthValue = function monthValue() {\n return this._month;\n };\n\n _proto.month = function month() {\n return Month.of(this._month);\n };\n\n _proto.dayOfMonth = function dayOfMonth() {\n return this._day;\n };\n\n _proto.dayOfYear = function dayOfYear() {\n return this.month().firstDayOfYear(this.isLeapYear()) + this._day - 1;\n };\n\n _proto.dayOfWeek = function dayOfWeek() {\n var dow0 = MathUtil.floorMod(this.toEpochDay() + 3, 7);\n return DayOfWeek.of(dow0 + 1);\n };\n\n _proto.isLeapYear = function isLeapYear() {\n return IsoChronology.isLeapYear(this._year);\n };\n\n _proto.lengthOfMonth = function lengthOfMonth() {\n switch (this._month) {\n case 2:\n return this.isLeapYear() ? 29 : 28;\n\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n\n default:\n return 31;\n }\n };\n\n _proto.lengthOfYear = function lengthOfYear() {\n return this.isLeapYear() ? 366 : 365;\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n\n if (adjuster instanceof LocalDate) {\n return adjuster;\n }\n\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n assert(field != null, 'field', NullPointerException);\n\n if (field instanceof ChronoField) {\n var f = field;\n f.checkValidValue(newValue);\n\n switch (f) {\n case ChronoField.DAY_OF_WEEK:\n return this.plusDays(newValue - this.dayOfWeek().value());\n\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH:\n return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));\n\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR:\n return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));\n\n case ChronoField.DAY_OF_MONTH:\n return this.withDayOfMonth(newValue);\n\n case ChronoField.DAY_OF_YEAR:\n return this.withDayOfYear(newValue);\n\n case ChronoField.EPOCH_DAY:\n return LocalDate.ofEpochDay(newValue);\n\n case ChronoField.ALIGNED_WEEK_OF_MONTH:\n return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_MONTH));\n\n case ChronoField.ALIGNED_WEEK_OF_YEAR:\n return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_YEAR));\n\n case ChronoField.MONTH_OF_YEAR:\n return this.withMonth(newValue);\n\n case ChronoField.PROLEPTIC_MONTH:\n return this.plusMonths(newValue - this.getLong(ChronoField.PROLEPTIC_MONTH));\n\n case ChronoField.YEAR_OF_ERA:\n return this.withYear(this._year >= 1 ? newValue : 1 - newValue);\n\n case ChronoField.YEAR:\n return this.withYear(newValue);\n\n case ChronoField.ERA:\n return this.getLong(ChronoField.ERA) === newValue ? this : this.withYear(1 - this._year);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.withYear = function withYear(year) {\n if (this._year === year) {\n return this;\n }\n\n ChronoField.YEAR.checkValidValue(year);\n return LocalDate._resolvePreviousValid(year, this._month, this._day);\n };\n\n _proto.withMonth = function withMonth(month) {\n var m = month instanceof Month ? month.value() : month;\n\n if (this._month === m) {\n return this;\n }\n\n ChronoField.MONTH_OF_YEAR.checkValidValue(m);\n return LocalDate._resolvePreviousValid(this._year, m, this._day);\n };\n\n _proto.withDayOfMonth = function withDayOfMonth(dayOfMonth) {\n if (this._day === dayOfMonth) {\n return this;\n }\n\n return LocalDate.of(this._year, this._month, dayOfMonth);\n };\n\n _proto.withDayOfYear = function withDayOfYear(dayOfYear) {\n if (this.dayOfYear() === dayOfYear) {\n return this;\n }\n\n return LocalDate.ofYearDay(this._year, dayOfYear);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(amountToAdd, 'amountToAdd');\n requireNonNull(unit, 'unit');\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.DAYS:\n return this.plusDays(amountToAdd);\n\n case ChronoUnit.WEEKS:\n return this.plusWeeks(amountToAdd);\n\n case ChronoUnit.MONTHS:\n return this.plusMonths(amountToAdd);\n\n case ChronoUnit.YEARS:\n return this.plusYears(amountToAdd);\n\n case ChronoUnit.DECADES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n\n case ChronoUnit.CENTURIES:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n\n case ChronoUnit.MILLENNIA:\n return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n\n case ChronoUnit.ERAS:\n return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n\n var newYear = ChronoField.YEAR.checkValidIntValue(this._year + yearsToAdd);\n return LocalDate._resolvePreviousValid(newYear, this._month, this._day);\n };\n\n _proto.plusMonths = function plusMonths(monthsToAdd) {\n if (monthsToAdd === 0) {\n return this;\n }\n\n var monthCount = this._year * 12 + (this._month - 1);\n var calcMonths = monthCount + monthsToAdd;\n var newYear = ChronoField.YEAR.checkValidIntValue(MathUtil.floorDiv(calcMonths, 12));\n var newMonth = MathUtil.floorMod(calcMonths, 12) + 1;\n return LocalDate._resolvePreviousValid(newYear, newMonth, this._day);\n };\n\n _proto.plusWeeks = function plusWeeks(weeksToAdd) {\n return this.plusDays(MathUtil.safeMultiply(weeksToAdd, 7));\n };\n\n _proto.plusDays = function plusDays(daysToAdd) {\n if (daysToAdd === 0) {\n return this;\n }\n\n var mjDay = MathUtil.safeAdd(this.toEpochDay(), daysToAdd);\n return LocalDate.ofEpochDay(mjDay);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(amountToSubtract, 'amountToSubtract');\n requireNonNull(unit, 'unit');\n return this.plusAmountUnit(-1 * amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(yearsToSubtract) {\n return this.plusYears(yearsToSubtract * -1);\n };\n\n _proto.minusMonths = function minusMonths(monthsToSubtract) {\n return this.plusMonths(monthsToSubtract * -1);\n };\n\n _proto.minusWeeks = function minusWeeks(weeksToSubtract) {\n return this.plusWeeks(weeksToSubtract * -1);\n };\n\n _proto.minusDays = function minusDays(daysToSubtract) {\n return this.plusDays(daysToSubtract * -1);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.localDate()) {\n return this;\n }\n\n return _ChronoLocalDate.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return _ChronoLocalDate.prototype.adjustInto.call(this, temporal);\n };\n\n _proto.until = function until(p1, p2) {\n if (arguments.length < 2) {\n return this.until1(p1);\n } else {\n return this.until2(p1, p2);\n }\n };\n\n _proto.until2 = function until2(endExclusive, unit) {\n var end = LocalDate.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.DAYS:\n return this.daysUntil(end);\n\n case ChronoUnit.WEEKS:\n return MathUtil.intDiv(this.daysUntil(end), 7);\n\n case ChronoUnit.MONTHS:\n return this._monthsUntil(end);\n\n case ChronoUnit.YEARS:\n return MathUtil.intDiv(this._monthsUntil(end), 12);\n\n case ChronoUnit.DECADES:\n return MathUtil.intDiv(this._monthsUntil(end), 120);\n\n case ChronoUnit.CENTURIES:\n return MathUtil.intDiv(this._monthsUntil(end), 1200);\n\n case ChronoUnit.MILLENNIA:\n return MathUtil.intDiv(this._monthsUntil(end), 12000);\n\n case ChronoUnit.ERAS:\n return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.daysUntil = function daysUntil(end) {\n return end.toEpochDay() - this.toEpochDay();\n };\n\n _proto._monthsUntil = function _monthsUntil(end) {\n var packed1 = this._prolepticMonth() * 32 + this.dayOfMonth();\n var packed2 = end._prolepticMonth() * 32 + end.dayOfMonth();\n return MathUtil.intDiv(packed2 - packed1, 32);\n };\n\n _proto.until1 = function until1(endDate) {\n var end = LocalDate.from(endDate);\n\n var totalMonths = end._prolepticMonth() - this._prolepticMonth();\n\n var days = end._day - this._day;\n\n if (totalMonths > 0 && days < 0) {\n totalMonths--;\n var calcDate = this.plusMonths(totalMonths);\n days = end.toEpochDay() - calcDate.toEpochDay();\n } else if (totalMonths < 0 && days > 0) {\n totalMonths++;\n days -= end.lengthOfMonth();\n }\n\n var years = MathUtil.intDiv(totalMonths, 12);\n var months = MathUtil.intMod(totalMonths, 12);\n return Period.of(years, months, days);\n };\n\n _proto.atTime = function atTime() {\n if (arguments.length === 1) {\n return this.atTime1.apply(this, arguments);\n } else {\n return this.atTime4.apply(this, arguments);\n }\n };\n\n _proto.atTime1 = function atTime1(time) {\n requireNonNull(time, 'time');\n\n if (time instanceof LocalTime) {\n return LocalDateTime.of(this, time);\n } else if (time instanceof OffsetTime) {\n return this._atTimeOffsetTime(time);\n } else {\n throw new IllegalArgumentException('time must be an instance of LocalTime or OffsetTime' + (time && time.constructor && time.constructor.name ? ', but is ' + time.constructor.name : ''));\n }\n };\n\n _proto.atTime4 = function atTime4(hour, minute, second, nanoOfSecond) {\n if (second === void 0) {\n second = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n return this.atTime1(LocalTime.of(hour, minute, second, nanoOfSecond));\n };\n\n _proto._atTimeOffsetTime = function _atTimeOffsetTime(time) {\n return OffsetDateTime.of(LocalDateTime.of(this, time.toLocalTime()), time.offset());\n };\n\n _proto.atStartOfDay = function atStartOfDay(zone) {\n if (zone != null) {\n return this.atStartOfDayWithZone(zone);\n } else {\n return LocalDateTime.of(this, LocalTime.MIDNIGHT);\n }\n };\n\n _proto.atStartOfDayWithZone = function atStartOfDayWithZone(zone) {\n requireNonNull(zone, 'zone');\n var ldt = this.atTime(LocalTime.MIDNIGHT);\n\n if (zone instanceof ZoneOffset === false) {\n var trans = zone.rules().transition(ldt);\n\n if (trans != null && trans.isGap()) {\n ldt = trans.dateTimeAfter();\n }\n }\n\n return ZonedDateTime.of(ldt, zone);\n };\n\n _proto.toEpochDay = function toEpochDay() {\n var y = this._year;\n var m = this._month;\n var total = 0;\n total += 365 * y;\n\n if (y >= 0) {\n total += MathUtil.intDiv(y + 3, 4) - MathUtil.intDiv(y + 99, 100) + MathUtil.intDiv(y + 399, 400);\n } else {\n total -= MathUtil.intDiv(y, -4) - MathUtil.intDiv(y, -100) + MathUtil.intDiv(y, -400);\n }\n\n total += MathUtil.intDiv(367 * m - 362, 12);\n total += this.dayOfMonth() - 1;\n\n if (m > 2) {\n total--;\n\n if (!IsoChronology.isLeapYear(y)) {\n total--;\n }\n }\n\n return total - DAYS_0000_TO_1970;\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDate, 'other');\n return this._compareTo0(other);\n };\n\n _proto._compareTo0 = function _compareTo0(otherDate) {\n var cmp = this._year - otherDate._year;\n\n if (cmp === 0) {\n cmp = this._month - otherDate._month;\n\n if (cmp === 0) {\n cmp = this._day - otherDate._day;\n }\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n return this.compareTo(other) > 0;\n };\n\n _proto.isBefore = function isBefore(other) {\n return this.compareTo(other) < 0;\n };\n\n _proto.isEqual = function isEqual(other) {\n return this.compareTo(other) === 0;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof LocalDate) {\n return this._compareTo0(other) === 0;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n var yearValue = this._year;\n var monthValue = this._month;\n var dayValue = this._day;\n return MathUtil.hash(yearValue & 0xFFFFF800 ^ (yearValue << 11) + (monthValue << 6) + dayValue);\n };\n\n _proto.toString = function toString() {\n var dayString, monthString, yearString;\n var yearValue = this._year;\n var monthValue = this._month;\n var dayValue = this._day;\n var absYear = Math.abs(yearValue);\n\n if (absYear < 1000) {\n if (yearValue < 0) {\n yearString = '-' + ('' + (yearValue - 10000)).slice(-4);\n } else {\n yearString = ('' + (yearValue + 10000)).slice(-4);\n }\n } else {\n if (yearValue > 9999) {\n yearString = '+' + yearValue;\n } else {\n yearString = '' + yearValue;\n }\n }\n\n if (monthValue < 10) {\n monthString = '-0' + monthValue;\n } else {\n monthString = '-' + monthValue;\n }\n\n if (dayValue < 10) {\n dayString = '-0' + dayValue;\n } else {\n dayString = '-' + dayValue;\n }\n\n return yearString + monthString + dayString;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n requireInstance(formatter, DateTimeFormatter, 'formatter');\n return _ChronoLocalDate.prototype.format.call(this, formatter);\n };\n\n return LocalDate;\n}(ChronoLocalDate);\nfunction _init$i() {\n LocalDate.MIN = LocalDate.of(YearConstants.MIN_VALUE, 1, 1);\n LocalDate.MAX = LocalDate.of(YearConstants.MAX_VALUE, 12, 31);\n LocalDate.EPOCH_0 = LocalDate.ofEpochDay(0);\n LocalDate.FROM = createTemporalQuery('LocalDate.FROM', function (temporal) {\n return LocalDate.from(temporal);\n });\n}\n\nvar ChronoLocalDateTime = function (_DefaultInterfaceTemp) {\n _inheritsLoose(ChronoLocalDateTime, _DefaultInterfaceTemp);\n\n function ChronoLocalDateTime() {\n return _DefaultInterfaceTemp.apply(this, arguments) || this;\n }\n\n var _proto = ChronoLocalDateTime.prototype;\n\n _proto.chronology = function chronology() {\n return this.toLocalDate().chronology();\n };\n\n _proto.query = function query(_query) {\n if (_query === TemporalQueries.chronology()) {\n return this.chronology();\n } else if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (_query === TemporalQueries.localDate()) {\n return LocalDate.ofEpochDay(this.toLocalDate().toEpochDay());\n } else if (_query === TemporalQueries.localTime()) {\n return this.toLocalTime();\n } else if (_query === TemporalQueries.zone() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n return _DefaultInterfaceTemp.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(ChronoField.EPOCH_DAY, this.toLocalDate().toEpochDay()).with(ChronoField.NANO_OF_DAY, this.toLocalTime().toNanoOfDay());\n };\n\n _proto.toInstant = function toInstant(offset) {\n requireInstance(offset, ZoneOffset, 'zoneId');\n return Instant.ofEpochSecond(this.toEpochSecond(offset), this.toLocalTime().nano());\n };\n\n _proto.toEpochSecond = function toEpochSecond(offset) {\n requireNonNull(offset, 'offset');\n var epochDay = this.toLocalDate().toEpochDay();\n var secs = epochDay * 86400 + this.toLocalTime().toSecondOfDay();\n secs -= offset.totalSeconds();\n return MathUtil.safeToInt(secs);\n };\n\n return ChronoLocalDateTime;\n}(DefaultInterfaceTemporal);\n\nvar LocalDateTime = function (_ChronoLocalDateTime) {\n _inheritsLoose(LocalDateTime, _ChronoLocalDateTime);\n\n LocalDateTime.now = function now(clockOrZone) {\n if (clockOrZone == null) {\n return LocalDateTime._now(Clock.systemDefaultZone());\n } else if (clockOrZone instanceof Clock) {\n return LocalDateTime._now(clockOrZone);\n } else {\n return LocalDateTime._now(Clock.system(clockOrZone));\n }\n };\n\n LocalDateTime._now = function _now(clock) {\n requireNonNull(clock, 'clock');\n return LocalDateTime.ofInstant(clock.instant(), clock.zone());\n };\n\n LocalDateTime._ofEpochMillis = function _ofEpochMillis(epochMilli, offset) {\n var localSecond = MathUtil.floorDiv(epochMilli, 1000) + offset.totalSeconds();\n var localEpochDay = MathUtil.floorDiv(localSecond, LocalTime.SECONDS_PER_DAY);\n var secsOfDay = MathUtil.floorMod(localSecond, LocalTime.SECONDS_PER_DAY);\n var nanoOfSecond = MathUtil.floorMod(epochMilli, 1000) * 1000000;\n var date = LocalDate.ofEpochDay(localEpochDay);\n var time = LocalTime.ofSecondOfDay(secsOfDay, nanoOfSecond);\n return new LocalDateTime(date, time);\n };\n\n LocalDateTime.of = function of() {\n if (arguments.length <= 2) {\n return LocalDateTime.ofDateAndTime.apply(this, arguments);\n } else {\n return LocalDateTime.ofNumbers.apply(this, arguments);\n }\n };\n\n LocalDateTime.ofNumbers = function ofNumbers(year, month, dayOfMonth, hour, minute, second, nanoOfSecond) {\n if (hour === void 0) {\n hour = 0;\n }\n\n if (minute === void 0) {\n minute = 0;\n }\n\n if (second === void 0) {\n second = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n var date = LocalDate.of(year, month, dayOfMonth);\n var time = LocalTime.of(hour, minute, second, nanoOfSecond);\n return new LocalDateTime(date, time);\n };\n\n LocalDateTime.ofDateAndTime = function ofDateAndTime(date, time) {\n requireNonNull(date, 'date');\n requireNonNull(time, 'time');\n return new LocalDateTime(date, time);\n };\n\n LocalDateTime.ofInstant = function ofInstant(instant, zone) {\n if (zone === void 0) {\n zone = ZoneId.systemDefault();\n }\n\n requireNonNull(instant, 'instant');\n requireInstance(instant, Instant, 'instant');\n requireNonNull(zone, 'zone');\n var offset = zone.rules().offset(instant);\n return LocalDateTime.ofEpochSecond(instant.epochSecond(), instant.nano(), offset);\n };\n\n LocalDateTime.ofEpochSecond = function ofEpochSecond(epochSecond, nanoOfSecond, offset) {\n if (epochSecond === void 0) {\n epochSecond = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n if (arguments.length === 2 && nanoOfSecond instanceof ZoneOffset) {\n offset = nanoOfSecond;\n nanoOfSecond = 0;\n }\n\n requireNonNull(offset, 'offset');\n var localSecond = epochSecond + offset.totalSeconds();\n var localEpochDay = MathUtil.floorDiv(localSecond, LocalTime.SECONDS_PER_DAY);\n var secsOfDay = MathUtil.floorMod(localSecond, LocalTime.SECONDS_PER_DAY);\n var date = LocalDate.ofEpochDay(localEpochDay);\n var time = LocalTime.ofSecondOfDay(secsOfDay, nanoOfSecond);\n return new LocalDateTime(date, time);\n };\n\n LocalDateTime.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n\n if (temporal instanceof LocalDateTime) {\n return temporal;\n } else if (temporal instanceof ZonedDateTime) {\n return temporal.toLocalDateTime();\n }\n\n try {\n var date = LocalDate.from(temporal);\n var time = LocalTime.from(temporal);\n return new LocalDateTime(date, time);\n } catch (ex) {\n throw new DateTimeException(\"Unable to obtain LocalDateTime TemporalAccessor: \" + temporal + \", type \" + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n };\n\n LocalDateTime.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;\n }\n\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, LocalDateTime.FROM);\n };\n\n function LocalDateTime(date, time) {\n var _this;\n\n _this = _ChronoLocalDateTime.call(this) || this;\n requireInstance(date, LocalDate, 'date');\n requireInstance(time, LocalTime, 'time');\n _this._date = date;\n _this._time = time;\n return _this;\n }\n\n var _proto = LocalDateTime.prototype;\n\n _proto._withDateTime = function _withDateTime(newDate, newTime) {\n if (this._date.equals(newDate) && this._time.equals(newTime)) {\n return this;\n }\n\n return new LocalDateTime(newDate, newTime);\n };\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n if (field instanceof ChronoField) {\n return field.isTimeBased() ? this._time.range(field) : this._date.range(field);\n }\n\n return field.rangeRefinedBy(this);\n };\n\n _proto.get = function get(field) {\n if (field instanceof ChronoField) {\n return field.isTimeBased() ? this._time.get(field) : this._date.get(field);\n }\n\n return _ChronoLocalDateTime.prototype.get.call(this, field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n return field.isTimeBased() ? this._time.getLong(field) : this._date.getLong(field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.year = function year() {\n return this._date.year();\n };\n\n _proto.monthValue = function monthValue() {\n return this._date.monthValue();\n };\n\n _proto.month = function month() {\n return this._date.month();\n };\n\n _proto.dayOfMonth = function dayOfMonth() {\n return this._date.dayOfMonth();\n };\n\n _proto.dayOfYear = function dayOfYear() {\n return this._date.dayOfYear();\n };\n\n _proto.dayOfWeek = function dayOfWeek() {\n return this._date.dayOfWeek();\n };\n\n _proto.hour = function hour() {\n return this._time.hour();\n };\n\n _proto.minute = function minute() {\n return this._time.minute();\n };\n\n _proto.second = function second() {\n return this._time.second();\n };\n\n _proto.nano = function nano() {\n return this._time.nano();\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n\n if (adjuster instanceof LocalDate) {\n return this._withDateTime(adjuster, this._time);\n } else if (adjuster instanceof LocalTime) {\n return this._withDateTime(this._date, adjuster);\n } else if (adjuster instanceof LocalDateTime) {\n return adjuster;\n }\n\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n if (field.isTimeBased()) {\n return this._withDateTime(this._date, this._time.with(field, newValue));\n } else {\n return this._withDateTime(this._date.with(field, newValue), this._time);\n }\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.withYear = function withYear(year) {\n return this._withDateTime(this._date.withYear(year), this._time);\n };\n\n _proto.withMonth = function withMonth(month) {\n return this._withDateTime(this._date.withMonth(month), this._time);\n };\n\n _proto.withDayOfMonth = function withDayOfMonth(dayOfMonth) {\n return this._withDateTime(this._date.withDayOfMonth(dayOfMonth), this._time);\n };\n\n _proto.withDayOfYear = function withDayOfYear(dayOfYear) {\n return this._withDateTime(this._date.withDayOfYear(dayOfYear), this._time);\n };\n\n _proto.withHour = function withHour(hour) {\n var newTime = this._time.withHour(hour);\n\n return this._withDateTime(this._date, newTime);\n };\n\n _proto.withMinute = function withMinute(minute) {\n var newTime = this._time.withMinute(minute);\n\n return this._withDateTime(this._date, newTime);\n };\n\n _proto.withSecond = function withSecond(second) {\n var newTime = this._time.withSecond(second);\n\n return this._withDateTime(this._date, newTime);\n };\n\n _proto.withNano = function withNano(nanoOfSecond) {\n var newTime = this._time.withNano(nanoOfSecond);\n\n return this._withDateTime(this._date, newTime);\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n return this._withDateTime(this._date, this._time.truncatedTo(unit));\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS:\n return this.plusNanos(amountToAdd);\n\n case ChronoUnit.MICROS:\n return this.plusDays(MathUtil.intDiv(amountToAdd, LocalTime.MICROS_PER_DAY)).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n\n case ChronoUnit.MILLIS:\n return this.plusDays(MathUtil.intDiv(amountToAdd, LocalTime.MILLIS_PER_DAY)).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n\n case ChronoUnit.SECONDS:\n return this.plusSeconds(amountToAdd);\n\n case ChronoUnit.MINUTES:\n return this.plusMinutes(amountToAdd);\n\n case ChronoUnit.HOURS:\n return this.plusHours(amountToAdd);\n\n case ChronoUnit.HALF_DAYS:\n return this.plusDays(MathUtil.intDiv(amountToAdd, 256)).plusHours(MathUtil.intMod(amountToAdd, 256) * 12);\n }\n\n return this._withDateTime(this._date.plus(amountToAdd, unit), this._time);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusYears = function plusYears(years) {\n var newDate = this._date.plusYears(years);\n\n return this._withDateTime(newDate, this._time);\n };\n\n _proto.plusMonths = function plusMonths(months) {\n var newDate = this._date.plusMonths(months);\n\n return this._withDateTime(newDate, this._time);\n };\n\n _proto.plusWeeks = function plusWeeks(weeks) {\n var newDate = this._date.plusWeeks(weeks);\n\n return this._withDateTime(newDate, this._time);\n };\n\n _proto.plusDays = function plusDays(days) {\n var newDate = this._date.plusDays(days);\n\n return this._withDateTime(newDate, this._time);\n };\n\n _proto.plusHours = function plusHours(hours) {\n return this._plusWithOverflow(this._date, hours, 0, 0, 0, 1);\n };\n\n _proto.plusMinutes = function plusMinutes(minutes) {\n return this._plusWithOverflow(this._date, 0, minutes, 0, 0, 1);\n };\n\n _proto.plusSeconds = function plusSeconds(seconds) {\n return this._plusWithOverflow(this._date, 0, 0, seconds, 0, 1);\n };\n\n _proto.plusNanos = function plusNanos(nanos) {\n return this._plusWithOverflow(this._date, 0, 0, 0, nanos, 1);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(unit, 'unit');\n return this.plusAmountUnit(-1 * amountToSubtract, unit);\n };\n\n _proto.minusYears = function minusYears(years) {\n return this.plusYears(-1 * years);\n };\n\n _proto.minusMonths = function minusMonths(months) {\n return this.plusMonths(-1 * months);\n };\n\n _proto.minusWeeks = function minusWeeks(weeks) {\n return this.plusWeeks(-1 * weeks);\n };\n\n _proto.minusDays = function minusDays(days) {\n return this.plusDays(-1 * days);\n };\n\n _proto.minusHours = function minusHours(hours) {\n return this._plusWithOverflow(this._date, hours, 0, 0, 0, -1);\n };\n\n _proto.minusMinutes = function minusMinutes(minutes) {\n return this._plusWithOverflow(this._date, 0, minutes, 0, 0, -1);\n };\n\n _proto.minusSeconds = function minusSeconds(seconds) {\n return this._plusWithOverflow(this._date, 0, 0, seconds, 0, -1);\n };\n\n _proto.minusNanos = function minusNanos(nanos) {\n return this._plusWithOverflow(this._date, 0, 0, 0, nanos, -1);\n };\n\n _proto._plusWithOverflow = function _plusWithOverflow(newDate, hours, minutes, seconds, nanos, sign) {\n if (hours === 0 && minutes === 0 && seconds === 0 && nanos === 0) {\n return this._withDateTime(newDate, this._time);\n }\n\n var totDays = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_DAY) + MathUtil.intDiv(seconds, LocalTime.SECONDS_PER_DAY) + MathUtil.intDiv(minutes, LocalTime.MINUTES_PER_DAY) + MathUtil.intDiv(hours, LocalTime.HOURS_PER_DAY);\n totDays *= sign;\n var totNanos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_DAY) + MathUtil.intMod(seconds, LocalTime.SECONDS_PER_DAY) * LocalTime.NANOS_PER_SECOND + MathUtil.intMod(minutes, LocalTime.MINUTES_PER_DAY) * LocalTime.NANOS_PER_MINUTE + MathUtil.intMod(hours, LocalTime.HOURS_PER_DAY) * LocalTime.NANOS_PER_HOUR;\n\n var curNoD = this._time.toNanoOfDay();\n\n totNanos = totNanos * sign + curNoD;\n totDays += MathUtil.floorDiv(totNanos, LocalTime.NANOS_PER_DAY);\n var newNoD = MathUtil.floorMod(totNanos, LocalTime.NANOS_PER_DAY);\n var newTime = newNoD === curNoD ? this._time : LocalTime.ofNanoOfDay(newNoD);\n return this._withDateTime(newDate.plusDays(totDays), newTime);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.localDate()) {\n return this.toLocalDate();\n }\n\n return _ChronoLocalDateTime.prototype.query.call(this, _query);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return _ChronoLocalDateTime.prototype.adjustInto.call(this, temporal);\n };\n\n _proto.until = function until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n var end = LocalDateTime.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n if (unit.isTimeBased()) {\n var daysUntil = this._date.daysUntil(end._date);\n\n var timeUntil = end._time.toNanoOfDay() - this._time.toNanoOfDay();\n\n if (daysUntil > 0 && timeUntil < 0) {\n daysUntil--;\n timeUntil += LocalTime.NANOS_PER_DAY;\n } else if (daysUntil < 0 && timeUntil > 0) {\n daysUntil++;\n timeUntil -= LocalTime.NANOS_PER_DAY;\n }\n\n var amount = daysUntil;\n\n switch (unit) {\n case ChronoUnit.NANOS:\n amount = MathUtil.safeMultiply(amount, LocalTime.NANOS_PER_DAY);\n return MathUtil.safeAdd(amount, timeUntil);\n\n case ChronoUnit.MICROS:\n amount = MathUtil.safeMultiply(amount, LocalTime.MICROS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000));\n\n case ChronoUnit.MILLIS:\n amount = MathUtil.safeMultiply(amount, LocalTime.MILLIS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000000));\n\n case ChronoUnit.SECONDS:\n amount = MathUtil.safeMultiply(amount, LocalTime.SECONDS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_SECOND));\n\n case ChronoUnit.MINUTES:\n amount = MathUtil.safeMultiply(amount, LocalTime.MINUTES_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_MINUTE));\n\n case ChronoUnit.HOURS:\n amount = MathUtil.safeMultiply(amount, LocalTime.HOURS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_HOUR));\n\n case ChronoUnit.HALF_DAYS:\n amount = MathUtil.safeMultiply(amount, 2);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_HOUR * 12));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n var endDate = end._date;\n var endTime = end._time;\n\n if (endDate.isAfter(this._date) && endTime.isBefore(this._time)) {\n endDate = endDate.minusDays(1);\n } else if (endDate.isBefore(this._date) && endTime.isAfter(this._time)) {\n endDate = endDate.plusDays(1);\n }\n\n return this._date.until(endDate, unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.atOffset = function atOffset(offset) {\n return OffsetDateTime.of(this, offset);\n };\n\n _proto.atZone = function atZone(zone) {\n return ZonedDateTime.of(this, zone);\n };\n\n _proto.toLocalDate = function toLocalDate() {\n return this._date;\n };\n\n _proto.toLocalTime = function toLocalTime() {\n return this._time;\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDateTime, 'other');\n return this._compareTo0(other);\n };\n\n _proto._compareTo0 = function _compareTo0(other) {\n var cmp = this._date.compareTo(other.toLocalDate());\n\n if (cmp === 0) {\n cmp = this._time.compareTo(other.toLocalTime());\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n return this.compareTo(other) > 0;\n };\n\n _proto.isBefore = function isBefore(other) {\n return this.compareTo(other) < 0;\n };\n\n _proto.isEqual = function isEqual(other) {\n return this.compareTo(other) === 0;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof LocalDateTime) {\n return this._date.equals(other._date) && this._time.equals(other._time);\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._date.hashCode() ^ this._time.hashCode();\n };\n\n _proto.toString = function toString() {\n return this._date.toString() + 'T' + this._time.toString();\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n };\n\n return LocalDateTime;\n}(ChronoLocalDateTime);\nfunction _init$j() {\n LocalDateTime.MIN = LocalDateTime.of(LocalDate.MIN, LocalTime.MIN);\n LocalDateTime.MAX = LocalDateTime.of(LocalDate.MAX, LocalTime.MAX);\n LocalDateTime.FROM = createTemporalQuery('LocalDateTime.FROM', function (temporal) {\n return LocalDateTime.from(temporal);\n });\n}\n\nvar LocalTime = function (_Temporal) {\n _inheritsLoose(LocalTime, _Temporal);\n\n LocalTime.now = function now(clockOrZone) {\n if (clockOrZone == null) {\n return LocalTime._now(Clock.systemDefaultZone());\n } else if (clockOrZone instanceof Clock) {\n return LocalTime._now(clockOrZone);\n } else {\n return LocalTime._now(Clock.system(clockOrZone));\n }\n };\n\n LocalTime._now = function _now(clock) {\n if (clock === void 0) {\n clock = Clock.systemDefaultZone();\n }\n\n requireNonNull(clock, 'clock');\n return LocalTime.ofInstant(clock.instant(), clock.zone());\n };\n\n LocalTime.ofInstant = function ofInstant(instant, zone) {\n if (zone === void 0) {\n zone = ZoneId.systemDefault();\n }\n\n var offset = zone.rules().offset(instant);\n var secsOfDay = MathUtil.intMod(instant.epochSecond(), LocalTime.SECONDS_PER_DAY);\n secsOfDay = MathUtil.intMod(secsOfDay + offset.totalSeconds(), LocalTime.SECONDS_PER_DAY);\n\n if (secsOfDay < 0) {\n secsOfDay += LocalTime.SECONDS_PER_DAY;\n }\n\n return LocalTime.ofSecondOfDay(secsOfDay, instant.nano());\n };\n\n LocalTime.of = function of(hour, minute, second, nanoOfSecond) {\n return new LocalTime(hour, minute, second, nanoOfSecond);\n };\n\n LocalTime.ofSecondOfDay = function ofSecondOfDay(secondOfDay, nanoOfSecond) {\n if (secondOfDay === void 0) {\n secondOfDay = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n ChronoField.SECOND_OF_DAY.checkValidValue(secondOfDay);\n ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n var hours = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_HOUR);\n secondOfDay -= hours * LocalTime.SECONDS_PER_HOUR;\n var minutes = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_MINUTE);\n secondOfDay -= minutes * LocalTime.SECONDS_PER_MINUTE;\n return new LocalTime(hours, minutes, secondOfDay, nanoOfSecond);\n };\n\n LocalTime.ofNanoOfDay = function ofNanoOfDay(nanoOfDay) {\n if (nanoOfDay === void 0) {\n nanoOfDay = 0;\n }\n\n ChronoField.NANO_OF_DAY.checkValidValue(nanoOfDay);\n var hours = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_HOUR);\n nanoOfDay -= hours * LocalTime.NANOS_PER_HOUR;\n var minutes = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_MINUTE);\n nanoOfDay -= minutes * LocalTime.NANOS_PER_MINUTE;\n var seconds = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_SECOND);\n nanoOfDay -= seconds * LocalTime.NANOS_PER_SECOND;\n return new LocalTime(hours, minutes, seconds, nanoOfDay);\n };\n\n LocalTime.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n var time = temporal.query(TemporalQueries.localTime());\n\n if (time == null) {\n throw new DateTimeException(\"Unable to obtain LocalTime TemporalAccessor: \" + temporal + \", type \" + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n\n return time;\n };\n\n LocalTime.parse = function parse(text, formatter) {\n if (formatter === void 0) {\n formatter = DateTimeFormatter.ISO_LOCAL_TIME;\n }\n\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, LocalTime.FROM);\n };\n\n function LocalTime(hour, minute, second, nanoOfSecond) {\n var _this;\n\n if (hour === void 0) {\n hour = 0;\n }\n\n if (minute === void 0) {\n minute = 0;\n }\n\n if (second === void 0) {\n second = 0;\n }\n\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n _this = _Temporal.call(this) || this;\n\n var _hour = MathUtil.safeToInt(hour);\n\n var _minute = MathUtil.safeToInt(minute);\n\n var _second = MathUtil.safeToInt(second);\n\n var _nanoOfSecond = MathUtil.safeToInt(nanoOfSecond);\n\n LocalTime._validate(_hour, _minute, _second, _nanoOfSecond);\n\n if (_minute === 0 && _second === 0 && _nanoOfSecond === 0) {\n if (!LocalTime.HOURS[_hour]) {\n _this._hour = _hour;\n _this._minute = _minute;\n _this._second = _second;\n _this._nano = _nanoOfSecond;\n LocalTime.HOURS[_hour] = _assertThisInitialized(_this);\n }\n\n return LocalTime.HOURS[_hour] || _assertThisInitialized(_this);\n }\n\n _this._hour = _hour;\n _this._minute = _minute;\n _this._second = _second;\n _this._nano = _nanoOfSecond;\n return _this;\n }\n\n LocalTime._validate = function _validate(hour, minute, second, nanoOfSecond) {\n ChronoField.HOUR_OF_DAY.checkValidValue(hour);\n ChronoField.MINUTE_OF_HOUR.checkValidValue(minute);\n ChronoField.SECOND_OF_MINUTE.checkValidValue(second);\n ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n };\n\n var _proto = LocalTime.prototype;\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isTimeBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isTimeBased();\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n requireNonNull(field);\n return _Temporal.prototype.range.call(this, field);\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n return this._get0(field);\n }\n\n return field.getFrom(this);\n };\n\n _proto._get0 = function _get0(field) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND:\n return this._nano;\n\n case ChronoField.NANO_OF_DAY:\n return this.toNanoOfDay();\n\n case ChronoField.MICRO_OF_SECOND:\n return MathUtil.intDiv(this._nano, 1000);\n\n case ChronoField.MICRO_OF_DAY:\n return MathUtil.intDiv(this.toNanoOfDay(), 1000);\n\n case ChronoField.MILLI_OF_SECOND:\n return MathUtil.intDiv(this._nano, 1000000);\n\n case ChronoField.MILLI_OF_DAY:\n return MathUtil.intDiv(this.toNanoOfDay(), 1000000);\n\n case ChronoField.SECOND_OF_MINUTE:\n return this._second;\n\n case ChronoField.SECOND_OF_DAY:\n return this.toSecondOfDay();\n\n case ChronoField.MINUTE_OF_HOUR:\n return this._minute;\n\n case ChronoField.MINUTE_OF_DAY:\n return this._hour * 60 + this._minute;\n\n case ChronoField.HOUR_OF_AMPM:\n return MathUtil.intMod(this._hour, 12);\n\n case ChronoField.CLOCK_HOUR_OF_AMPM:\n {\n var ham = MathUtil.intMod(this._hour, 12);\n return ham % 12 === 0 ? 12 : ham;\n }\n\n case ChronoField.HOUR_OF_DAY:\n return this._hour;\n\n case ChronoField.CLOCK_HOUR_OF_DAY:\n return this._hour === 0 ? 24 : this._hour;\n\n case ChronoField.AMPM_OF_DAY:\n return MathUtil.intDiv(this._hour, 12);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n };\n\n _proto.hour = function hour() {\n return this._hour;\n };\n\n _proto.minute = function minute() {\n return this._minute;\n };\n\n _proto.second = function second() {\n return this._second;\n };\n\n _proto.nano = function nano() {\n return this._nano;\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n\n if (adjuster instanceof LocalTime) {\n return adjuster;\n }\n\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n requireInstance(field, TemporalField, 'field');\n\n if (field instanceof ChronoField) {\n field.checkValidValue(newValue);\n\n switch (field) {\n case ChronoField.NANO_OF_SECOND:\n return this.withNano(newValue);\n\n case ChronoField.NANO_OF_DAY:\n return LocalTime.ofNanoOfDay(newValue);\n\n case ChronoField.MICRO_OF_SECOND:\n return this.withNano(newValue * 1000);\n\n case ChronoField.MICRO_OF_DAY:\n return LocalTime.ofNanoOfDay(newValue * 1000);\n\n case ChronoField.MILLI_OF_SECOND:\n return this.withNano(newValue * 1000000);\n\n case ChronoField.MILLI_OF_DAY:\n return LocalTime.ofNanoOfDay(newValue * 1000000);\n\n case ChronoField.SECOND_OF_MINUTE:\n return this.withSecond(newValue);\n\n case ChronoField.SECOND_OF_DAY:\n return this.plusSeconds(newValue - this.toSecondOfDay());\n\n case ChronoField.MINUTE_OF_HOUR:\n return this.withMinute(newValue);\n\n case ChronoField.MINUTE_OF_DAY:\n return this.plusMinutes(newValue - (this._hour * 60 + this._minute));\n\n case ChronoField.HOUR_OF_AMPM:\n return this.plusHours(newValue - MathUtil.intMod(this._hour, 12));\n\n case ChronoField.CLOCK_HOUR_OF_AMPM:\n return this.plusHours((newValue === 12 ? 0 : newValue) - MathUtil.intMod(this._hour, 12));\n\n case ChronoField.HOUR_OF_DAY:\n return this.withHour(newValue);\n\n case ChronoField.CLOCK_HOUR_OF_DAY:\n return this.withHour(newValue === 24 ? 0 : newValue);\n\n case ChronoField.AMPM_OF_DAY:\n return this.plusHours((newValue - MathUtil.intDiv(this._hour, 12)) * 12);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.withHour = function withHour(hour) {\n if (hour === void 0) {\n hour = 0;\n }\n\n if (this._hour === hour) {\n return this;\n }\n\n return new LocalTime(hour, this._minute, this._second, this._nano);\n };\n\n _proto.withMinute = function withMinute(minute) {\n if (minute === void 0) {\n minute = 0;\n }\n\n if (this._minute === minute) {\n return this;\n }\n\n return new LocalTime(this._hour, minute, this._second, this._nano);\n };\n\n _proto.withSecond = function withSecond(second) {\n if (second === void 0) {\n second = 0;\n }\n\n if (this._second === second) {\n return this;\n }\n\n return new LocalTime(this._hour, this._minute, second, this._nano);\n };\n\n _proto.withNano = function withNano(nanoOfSecond) {\n if (nanoOfSecond === void 0) {\n nanoOfSecond = 0;\n }\n\n if (this._nano === nanoOfSecond) {\n return this;\n }\n\n return new LocalTime(this._hour, this._minute, this._second, nanoOfSecond);\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n requireNonNull(unit, 'unit');\n\n if (unit === ChronoUnit.NANOS) {\n return this;\n }\n\n var unitDur = unit.duration();\n\n if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n throw new DateTimeException('Unit is too large to be used for truncation');\n }\n\n var dur = unitDur.toNanos();\n\n if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n throw new DateTimeException('Unit must divide into a standard day without remainder');\n }\n\n var nod = this.toNanoOfDay();\n return LocalTime.ofNanoOfDay(MathUtil.intDiv(nod, dur) * dur);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS:\n return this.plusNanos(amountToAdd);\n\n case ChronoUnit.MICROS:\n return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n\n case ChronoUnit.MILLIS:\n return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n\n case ChronoUnit.SECONDS:\n return this.plusSeconds(amountToAdd);\n\n case ChronoUnit.MINUTES:\n return this.plusMinutes(amountToAdd);\n\n case ChronoUnit.HOURS:\n return this.plusHours(amountToAdd);\n\n case ChronoUnit.HALF_DAYS:\n return this.plusHours(MathUtil.intMod(amountToAdd, 2) * 12);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusHours = function plusHours(hoursToAdd) {\n if (hoursToAdd === 0) {\n return this;\n }\n\n var newHour = MathUtil.intMod(MathUtil.intMod(hoursToAdd, LocalTime.HOURS_PER_DAY) + this._hour + LocalTime.HOURS_PER_DAY, LocalTime.HOURS_PER_DAY);\n return new LocalTime(newHour, this._minute, this._second, this._nano);\n };\n\n _proto.plusMinutes = function plusMinutes(minutesToAdd) {\n if (minutesToAdd === 0) {\n return this;\n }\n\n var mofd = this._hour * LocalTime.MINUTES_PER_HOUR + this._minute;\n var newMofd = MathUtil.intMod(MathUtil.intMod(minutesToAdd, LocalTime.MINUTES_PER_DAY) + mofd + LocalTime.MINUTES_PER_DAY, LocalTime.MINUTES_PER_DAY);\n\n if (mofd === newMofd) {\n return this;\n }\n\n var newHour = MathUtil.intDiv(newMofd, LocalTime.MINUTES_PER_HOUR);\n var newMinute = MathUtil.intMod(newMofd, LocalTime.MINUTES_PER_HOUR);\n return new LocalTime(newHour, newMinute, this._second, this._nano);\n };\n\n _proto.plusSeconds = function plusSeconds(secondsToAdd) {\n if (secondsToAdd === 0) {\n return this;\n }\n\n var sofd = this._hour * LocalTime.SECONDS_PER_HOUR + this._minute * LocalTime.SECONDS_PER_MINUTE + this._second;\n var newSofd = MathUtil.intMod(MathUtil.intMod(secondsToAdd, LocalTime.SECONDS_PER_DAY) + sofd + LocalTime.SECONDS_PER_DAY, LocalTime.SECONDS_PER_DAY);\n\n if (sofd === newSofd) {\n return this;\n }\n\n var newHour = MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_HOUR);\n var newMinute = MathUtil.intMod(MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n var newSecond = MathUtil.intMod(newSofd, LocalTime.SECONDS_PER_MINUTE);\n return new LocalTime(newHour, newMinute, newSecond, this._nano);\n };\n\n _proto.plusNanos = function plusNanos(nanosToAdd) {\n if (nanosToAdd === 0) {\n return this;\n }\n\n var nofd = this.toNanoOfDay();\n var newNofd = MathUtil.intMod(MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_DAY) + nofd + LocalTime.NANOS_PER_DAY, LocalTime.NANOS_PER_DAY);\n\n if (nofd === newNofd) {\n return this;\n }\n\n var newHour = MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_HOUR);\n var newMinute = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n var newSecond = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_SECOND), LocalTime.SECONDS_PER_MINUTE);\n var newNano = MathUtil.intMod(newNofd, LocalTime.NANOS_PER_SECOND);\n return new LocalTime(newHour, newMinute, newSecond, newNano);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n requireNonNull(unit, 'unit');\n return this.plusAmountUnit(-1 * amountToSubtract, unit);\n };\n\n _proto.minusHours = function minusHours(hoursToSubtract) {\n return this.plusHours(-1 * MathUtil.intMod(hoursToSubtract, LocalTime.HOURS_PER_DAY));\n };\n\n _proto.minusMinutes = function minusMinutes(minutesToSubtract) {\n return this.plusMinutes(-1 * MathUtil.intMod(minutesToSubtract, LocalTime.MINUTES_PER_DAY));\n };\n\n _proto.minusSeconds = function minusSeconds(secondsToSubtract) {\n return this.plusSeconds(-1 * MathUtil.intMod(secondsToSubtract, LocalTime.SECONDS_PER_DAY));\n };\n\n _proto.minusNanos = function minusNanos(nanosToSubtract) {\n return this.plusNanos(-1 * MathUtil.intMod(nanosToSubtract, LocalTime.NANOS_PER_DAY));\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (_query === TemporalQueries.localTime()) {\n return this;\n }\n\n if (_query === TemporalQueries.chronology() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.zone() || _query === TemporalQueries.offset() || _query === TemporalQueries.localDate()) {\n return null;\n }\n\n return _query.queryFrom(this);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n return temporal.with(LocalTime.NANO_OF_DAY, this.toNanoOfDay());\n };\n\n _proto.until = function until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n var end = LocalTime.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n var nanosUntil = end.toNanoOfDay() - this.toNanoOfDay();\n\n switch (unit) {\n case ChronoUnit.NANOS:\n return nanosUntil;\n\n case ChronoUnit.MICROS:\n return MathUtil.intDiv(nanosUntil, 1000);\n\n case ChronoUnit.MILLIS:\n return MathUtil.intDiv(nanosUntil, 1000000);\n\n case ChronoUnit.SECONDS:\n return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_SECOND);\n\n case ChronoUnit.MINUTES:\n return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_MINUTE);\n\n case ChronoUnit.HOURS:\n return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_HOUR);\n\n case ChronoUnit.HALF_DAYS:\n return MathUtil.intDiv(nanosUntil, 12 * LocalTime.NANOS_PER_HOUR);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto.atDate = function atDate(date) {\n return LocalDateTime.of(date, this);\n };\n\n _proto.toSecondOfDay = function toSecondOfDay() {\n var total = this._hour * LocalTime.SECONDS_PER_HOUR;\n total += this._minute * LocalTime.SECONDS_PER_MINUTE;\n total += this._second;\n return total;\n };\n\n _proto.toNanoOfDay = function toNanoOfDay() {\n var total = this._hour * LocalTime.NANOS_PER_HOUR;\n total += this._minute * LocalTime.NANOS_PER_MINUTE;\n total += this._second * LocalTime.NANOS_PER_SECOND;\n total += this._nano;\n return total;\n };\n\n _proto.compareTo = function compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalTime, 'other');\n var cmp = MathUtil.compareNumbers(this._hour, other._hour);\n\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._minute, other._minute);\n\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._second, other._second);\n\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._nano, other._nano);\n }\n }\n }\n\n return cmp;\n };\n\n _proto.isAfter = function isAfter(other) {\n return this.compareTo(other) > 0;\n };\n\n _proto.isBefore = function isBefore(other) {\n return this.compareTo(other) < 0;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof LocalTime) {\n return this._hour === other._hour && this._minute === other._minute && this._second === other._second && this._nano === other._nano;\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n var nod = this.toNanoOfDay();\n return MathUtil.hash(nod);\n };\n\n _proto.toString = function toString() {\n var buf = '';\n var hourValue = this._hour;\n var minuteValue = this._minute;\n var secondValue = this._second;\n var nanoValue = this._nano;\n buf += hourValue < 10 ? '0' : '';\n buf += hourValue;\n buf += minuteValue < 10 ? ':0' : ':';\n buf += minuteValue;\n\n if (secondValue > 0 || nanoValue > 0) {\n buf += secondValue < 10 ? ':0' : ':';\n buf += secondValue;\n\n if (nanoValue > 0) {\n buf += '.';\n\n if (MathUtil.intMod(nanoValue, 1000000) === 0) {\n buf += ('' + (MathUtil.intDiv(nanoValue, 1000000) + 1000)).substring(1);\n } else if (MathUtil.intMod(nanoValue, 1000) === 0) {\n buf += ('' + (MathUtil.intDiv(nanoValue, 1000) + 1000000)).substring(1);\n } else {\n buf += ('' + (nanoValue + 1000000000)).substring(1);\n }\n }\n }\n\n return buf;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n _proto.format = function format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n };\n\n return LocalTime;\n}(Temporal);\nfunction _init$k() {\n LocalTime.HOURS = [];\n\n for (var hour = 0; hour < 24; hour++) {\n LocalTime.of(hour, 0, 0, 0);\n }\n\n LocalTime.MIN = LocalTime.HOURS[0];\n LocalTime.MAX = new LocalTime(23, 59, 59, 999999999);\n LocalTime.MIDNIGHT = LocalTime.HOURS[0];\n LocalTime.NOON = LocalTime.HOURS[12];\n LocalTime.FROM = createTemporalQuery('LocalTime.FROM', function (temporal) {\n return LocalTime.from(temporal);\n });\n}\nLocalTime.HOURS_PER_DAY = 24;\nLocalTime.MINUTES_PER_HOUR = 60;\nLocalTime.MINUTES_PER_DAY = LocalTime.MINUTES_PER_HOUR * LocalTime.HOURS_PER_DAY;\nLocalTime.SECONDS_PER_MINUTE = 60;\nLocalTime.SECONDS_PER_HOUR = LocalTime.SECONDS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\nLocalTime.SECONDS_PER_DAY = LocalTime.SECONDS_PER_HOUR * LocalTime.HOURS_PER_DAY;\nLocalTime.MILLIS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000;\nLocalTime.MICROS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000000;\nLocalTime.NANOS_PER_SECOND = 1000000000;\nLocalTime.NANOS_PER_MINUTE = LocalTime.NANOS_PER_SECOND * LocalTime.SECONDS_PER_MINUTE;\nLocalTime.NANOS_PER_HOUR = LocalTime.NANOS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\nLocalTime.NANOS_PER_DAY = LocalTime.NANOS_PER_HOUR * LocalTime.HOURS_PER_DAY;\n\nvar NANOS_PER_MILLI = 1000000;\nvar Instant = function (_Temporal) {\n _inheritsLoose(Instant, _Temporal);\n\n Instant.now = function now(clock) {\n if (clock === void 0) {\n clock = Clock.systemUTC();\n }\n\n return clock.instant();\n };\n\n Instant.ofEpochSecond = function ofEpochSecond(epochSecond, nanoAdjustment) {\n if (nanoAdjustment === void 0) {\n nanoAdjustment = 0;\n }\n\n var secs = epochSecond + MathUtil.floorDiv(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n var nos = MathUtil.floorMod(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n return Instant._create(secs, nos);\n };\n\n Instant.ofEpochMilli = function ofEpochMilli(epochMilli) {\n var secs = MathUtil.floorDiv(epochMilli, 1000);\n var mos = MathUtil.floorMod(epochMilli, 1000);\n return Instant._create(secs, mos * 1000000);\n };\n\n Instant.from = function from(temporal) {\n try {\n var instantSecs = temporal.getLong(ChronoField.INSTANT_SECONDS);\n var nanoOfSecond = temporal.get(ChronoField.NANO_OF_SECOND);\n return Instant.ofEpochSecond(instantSecs, nanoOfSecond);\n } catch (ex) {\n throw new DateTimeException('Unable to obtain Instant from TemporalAccessor: ' + temporal + ', type ' + typeof temporal, ex);\n }\n };\n\n Instant.parse = function parse(text) {\n return DateTimeFormatter.ISO_INSTANT.parse(text, Instant.FROM);\n };\n\n Instant._create = function _create(seconds, nanoOfSecond) {\n if (seconds === 0 && nanoOfSecond === 0) {\n return Instant.EPOCH;\n }\n\n return new Instant(seconds, nanoOfSecond);\n };\n\n Instant._validate = function _validate(seconds, nanoOfSecond) {\n if (seconds < Instant.MIN_SECONDS || seconds > Instant.MAX_SECONDS) {\n throw new DateTimeException('Instant exceeds minimum or maximum instant');\n }\n\n if (nanoOfSecond < 0 || nanoOfSecond > LocalTime.NANOS_PER_SECOND) {\n throw new DateTimeException('Instant exceeds minimum or maximum instant');\n }\n };\n\n function Instant(seconds, nanoOfSecond) {\n var _this;\n\n _this = _Temporal.call(this) || this;\n\n Instant._validate(seconds, nanoOfSecond);\n\n _this._seconds = MathUtil.safeToInt(seconds);\n _this._nanos = MathUtil.safeToInt(nanoOfSecond);\n return _this;\n }\n\n var _proto = Instant.prototype;\n\n _proto.isSupported = function isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit === ChronoField.INSTANT_SECONDS || fieldOrUnit === ChronoField.NANO_OF_SECOND || fieldOrUnit === ChronoField.MICRO_OF_SECOND || fieldOrUnit === ChronoField.MILLI_OF_SECOND;\n }\n\n if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isTimeBased() || fieldOrUnit === ChronoUnit.DAYS;\n }\n\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n };\n\n _proto.range = function range(field) {\n return _Temporal.prototype.range.call(this, field);\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND:\n return this._nanos;\n\n case ChronoField.MICRO_OF_SECOND:\n return MathUtil.intDiv(this._nanos, 1000);\n\n case ChronoField.MILLI_OF_SECOND:\n return MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n\n case ChronoField.INSTANT_SECONDS:\n return this._seconds;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.epochSecond = function epochSecond() {\n return this._seconds;\n };\n\n _proto.nano = function nano() {\n return this._nanos;\n };\n\n _proto.withAdjuster = function withAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n return adjuster.adjustInto(this);\n };\n\n _proto.withFieldValue = function withFieldValue(field, newValue) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n field.checkValidValue(newValue);\n\n switch (field) {\n case ChronoField.MILLI_OF_SECOND:\n {\n var nval = newValue * NANOS_PER_MILLI;\n return nval !== this._nanos ? Instant._create(this._seconds, nval) : this;\n }\n\n case ChronoField.MICRO_OF_SECOND:\n {\n var _nval = newValue * 1000;\n\n return _nval !== this._nanos ? Instant._create(this._seconds, _nval) : this;\n }\n\n case ChronoField.NANO_OF_SECOND:\n return newValue !== this._nanos ? Instant._create(this._seconds, newValue) : this;\n\n case ChronoField.INSTANT_SECONDS:\n return newValue !== this._seconds ? Instant._create(newValue, this._nanos) : this;\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.adjustInto(this, newValue);\n };\n\n _proto.truncatedTo = function truncatedTo(unit) {\n requireNonNull(unit, 'unit');\n\n if (unit === ChronoUnit.NANOS) {\n return this;\n }\n\n var unitDur = unit.duration();\n\n if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n throw new DateTimeException('Unit is too large to be used for truncation');\n }\n\n var dur = unitDur.toNanos();\n\n if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n throw new DateTimeException('Unit must divide into a standard day without remainder');\n }\n\n var nod = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_DAY) * LocalTime.NANOS_PER_SECOND + this._nanos;\n\n var result = MathUtil.intDiv(nod, dur) * dur;\n return this.plusNanos(result - nod);\n };\n\n _proto.plusAmount = function plusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n };\n\n _proto.plusAmountUnit = function plusAmountUnit(amountToAdd, unit) {\n requireNonNull(amountToAdd, 'amountToAdd');\n requireNonNull(unit, 'unit');\n requireInstance(unit, TemporalUnit);\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS:\n return this.plusNanos(amountToAdd);\n\n case ChronoUnit.MICROS:\n return this._plus(MathUtil.intDiv(amountToAdd, 1000000), MathUtil.intMod(amountToAdd, 1000000) * 1000);\n\n case ChronoUnit.MILLIS:\n return this.plusMillis(amountToAdd);\n\n case ChronoUnit.SECONDS:\n return this.plusSeconds(amountToAdd);\n\n case ChronoUnit.MINUTES:\n return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_MINUTE));\n\n case ChronoUnit.HOURS:\n return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_HOUR));\n\n case ChronoUnit.HALF_DAYS:\n return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY / 2));\n\n case ChronoUnit.DAYS:\n return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY));\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.addTo(this, amountToAdd);\n };\n\n _proto.plusSeconds = function plusSeconds(secondsToAdd) {\n return this._plus(secondsToAdd, 0);\n };\n\n _proto.plusMillis = function plusMillis(millisToAdd) {\n return this._plus(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * NANOS_PER_MILLI);\n };\n\n _proto.plusNanos = function plusNanos(nanosToAdd) {\n return this._plus(0, nanosToAdd);\n };\n\n _proto._plus = function _plus(secondsToAdd, nanosToAdd) {\n if (secondsToAdd === 0 && nanosToAdd === 0) {\n return this;\n }\n\n var epochSec = this._seconds + secondsToAdd;\n epochSec = epochSec + MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n var nanoAdjustment = this._nanos + nanosToAdd % LocalTime.NANOS_PER_SECOND;\n return Instant.ofEpochSecond(epochSec, nanoAdjustment);\n };\n\n _proto.minusAmount = function minusAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n };\n\n _proto.minusAmountUnit = function minusAmountUnit(amountToSubtract, unit) {\n return this.plusAmountUnit(-1 * amountToSubtract, unit);\n };\n\n _proto.minusSeconds = function minusSeconds(secondsToSubtract) {\n return this.plusSeconds(secondsToSubtract * -1);\n };\n\n _proto.minusMillis = function minusMillis(millisToSubtract) {\n return this.plusMillis(-1 * millisToSubtract);\n };\n\n _proto.minusNanos = function minusNanos(nanosToSubtract) {\n return this.plusNanos(-1 * nanosToSubtract);\n };\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n }\n\n if (_query === TemporalQueries.localDate() || _query === TemporalQueries.localTime() || _query === TemporalQueries.chronology() || _query === TemporalQueries.zoneId() || _query === TemporalQueries.zone() || _query === TemporalQueries.offset()) {\n return null;\n }\n\n return _query.queryFrom(this);\n };\n\n _proto.adjustInto = function adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n return temporal.with(ChronoField.INSTANT_SECONDS, this._seconds).with(ChronoField.NANO_OF_SECOND, this._nanos);\n };\n\n _proto.until = function until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n var end = Instant.from(endExclusive);\n\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS:\n return this._nanosUntil(end);\n\n case ChronoUnit.MICROS:\n return MathUtil.intDiv(this._nanosUntil(end), 1000);\n\n case ChronoUnit.MILLIS:\n return MathUtil.safeSubtract(end.toEpochMilli(), this.toEpochMilli());\n\n case ChronoUnit.SECONDS:\n return this._secondsUntil(end);\n\n case ChronoUnit.MINUTES:\n return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_MINUTE);\n\n case ChronoUnit.HOURS:\n return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_HOUR);\n\n case ChronoUnit.HALF_DAYS:\n return MathUtil.intDiv(this._secondsUntil(end), 12 * LocalTime.SECONDS_PER_HOUR);\n\n case ChronoUnit.DAYS:\n return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_DAY);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n return unit.between(this, end);\n };\n\n _proto._nanosUntil = function _nanosUntil(end) {\n var secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n var totalNanos = MathUtil.safeMultiply(secsDiff, LocalTime.NANOS_PER_SECOND);\n return MathUtil.safeAdd(totalNanos, end.nano() - this.nano());\n };\n\n _proto._secondsUntil = function _secondsUntil(end) {\n var secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n var nanosDiff = end.nano() - this.nano();\n\n if (secsDiff > 0 && nanosDiff < 0) {\n secsDiff--;\n } else if (secsDiff < 0 && nanosDiff > 0) {\n secsDiff++;\n }\n\n return secsDiff;\n };\n\n _proto.atOffset = function atOffset(offset) {\n return OffsetDateTime.ofInstant(this, offset);\n };\n\n _proto.atZone = function atZone(zone) {\n return ZonedDateTime.ofInstant(this, zone);\n };\n\n _proto.toEpochMilli = function toEpochMilli() {\n var millis = MathUtil.safeMultiply(this._seconds, 1000);\n return millis + MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n };\n\n _proto.compareTo = function compareTo(otherInstant) {\n requireNonNull(otherInstant, 'otherInstant');\n requireInstance(otherInstant, Instant, 'otherInstant');\n var cmp = MathUtil.compareNumbers(this._seconds, otherInstant._seconds);\n\n if (cmp !== 0) {\n return cmp;\n }\n\n return this._nanos - otherInstant._nanos;\n };\n\n _proto.isAfter = function isAfter(otherInstant) {\n return this.compareTo(otherInstant) > 0;\n };\n\n _proto.isBefore = function isBefore(otherInstant) {\n return this.compareTo(otherInstant) < 0;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n if (other instanceof Instant) {\n return this.epochSecond() === other.epochSecond() && this.nano() === other.nano();\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return MathUtil.hashCode(this._seconds, this._nanos);\n };\n\n _proto.toString = function toString() {\n return DateTimeFormatter.ISO_INSTANT.format(this);\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n };\n\n return Instant;\n}(Temporal);\nfunction _init$l() {\n Instant.MIN_SECONDS = -31619119219200;\n Instant.MAX_SECONDS = 31494816403199;\n Instant.EPOCH = new Instant(0, 0);\n Instant.MIN = Instant.ofEpochSecond(Instant.MIN_SECONDS, 0);\n Instant.MAX = Instant.ofEpochSecond(Instant.MAX_SECONDS, 999999999);\n Instant.FROM = createTemporalQuery('Instant.FROM', function (temporal) {\n return Instant.from(temporal);\n });\n}\n\nvar Clock = function () {\n function Clock() {}\n\n Clock.systemUTC = function systemUTC() {\n return new SystemClock(ZoneOffset.UTC);\n };\n\n Clock.systemDefaultZone = function systemDefaultZone() {\n return new SystemClock(ZoneId.systemDefault());\n };\n\n Clock.system = function system(zone) {\n return new SystemClock(zone);\n };\n\n Clock.fixed = function fixed(fixedInstant, zoneId) {\n return new FixedClock(fixedInstant, zoneId);\n };\n\n Clock.offset = function offset(baseClock, duration) {\n return new OffsetClock(baseClock, duration);\n };\n\n var _proto = Clock.prototype;\n\n _proto.millis = function millis() {\n abstractMethodFail('Clock.millis');\n };\n\n _proto.instant = function instant() {\n abstractMethodFail('Clock.instant');\n };\n\n _proto.zone = function zone() {\n abstractMethodFail('Clock.zone');\n };\n\n _proto.withZone = function withZone() {\n abstractMethodFail('Clock.withZone');\n };\n\n return Clock;\n}();\n\nvar SystemClock = function (_Clock) {\n _inheritsLoose(SystemClock, _Clock);\n\n function SystemClock(zone) {\n var _this;\n\n requireNonNull(zone, 'zone');\n _this = _Clock.call(this) || this;\n _this._zone = zone;\n return _this;\n }\n\n var _proto2 = SystemClock.prototype;\n\n _proto2.zone = function zone() {\n return this._zone;\n };\n\n _proto2.millis = function millis() {\n return new Date().getTime();\n };\n\n _proto2.instant = function instant() {\n return Instant.ofEpochMilli(this.millis());\n };\n\n _proto2.equals = function equals(obj) {\n if (obj instanceof SystemClock) {\n return this._zone.equals(obj._zone);\n }\n\n return false;\n };\n\n _proto2.withZone = function withZone(zone) {\n if (zone.equals(this._zone)) {\n return this;\n }\n\n return new SystemClock(zone);\n };\n\n _proto2.toString = function toString() {\n return 'SystemClock[' + this._zone.toString() + ']';\n };\n\n return SystemClock;\n}(Clock);\n\nvar FixedClock = function (_Clock2) {\n _inheritsLoose(FixedClock, _Clock2);\n\n function FixedClock(fixedInstant, zoneId) {\n var _this2;\n\n _this2 = _Clock2.call(this) || this;\n _this2._instant = fixedInstant;\n _this2._zoneId = zoneId;\n return _this2;\n }\n\n var _proto3 = FixedClock.prototype;\n\n _proto3.instant = function instant() {\n return this._instant;\n };\n\n _proto3.millis = function millis() {\n return this._instant.toEpochMilli();\n };\n\n _proto3.zone = function zone() {\n return this._zoneId;\n };\n\n _proto3.toString = function toString() {\n return 'FixedClock[]';\n };\n\n _proto3.equals = function equals(obj) {\n if (obj instanceof FixedClock) {\n return this._instant.equals(obj._instant) && this._zoneId.equals(obj._zoneId);\n }\n\n return false;\n };\n\n _proto3.withZone = function withZone(zone) {\n if (zone.equals(this._zoneId)) {\n return this;\n }\n\n return new FixedClock(this._instant, zone);\n };\n\n return FixedClock;\n}(Clock);\n\nvar OffsetClock = function (_Clock3) {\n _inheritsLoose(OffsetClock, _Clock3);\n\n function OffsetClock(baseClock, offset) {\n var _this3;\n\n _this3 = _Clock3.call(this) || this;\n _this3._baseClock = baseClock;\n _this3._offset = offset;\n return _this3;\n }\n\n var _proto4 = OffsetClock.prototype;\n\n _proto4.zone = function zone() {\n return this._baseClock.zone();\n };\n\n _proto4.withZone = function withZone(zone) {\n if (zone.equals(this._baseClock.zone())) {\n return this;\n }\n\n return new OffsetClock(this._baseClock.withZone(zone), this._offset);\n };\n\n _proto4.millis = function millis() {\n return this._baseClock.millis() + this._offset.toMillis();\n };\n\n _proto4.instant = function instant() {\n return this._baseClock.instant().plus(this._offset);\n };\n\n _proto4.equals = function equals(obj) {\n if (obj instanceof OffsetClock) {\n return this._baseClock.equals(obj._baseClock) && this._offset.equals(obj._offset);\n }\n\n return false;\n };\n\n _proto4.toString = function toString() {\n return 'OffsetClock[' + this._baseClock + ',' + this._offset + ']';\n };\n\n return OffsetClock;\n}(Clock);\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ZoneOffsetTransition = function () {\n ZoneOffsetTransition.of = function of(transition, offsetBefore, offsetAfter) {\n return new ZoneOffsetTransition(transition, offsetBefore, offsetAfter);\n };\n\n function ZoneOffsetTransition(transition, offsetBefore, offsetAfter) {\n requireNonNull(transition, 'transition');\n requireNonNull(offsetBefore, 'offsetBefore');\n requireNonNull(offsetAfter, 'offsetAfter');\n\n if (offsetBefore.equals(offsetAfter)) {\n throw new IllegalArgumentException('Offsets must not be equal');\n }\n\n if (transition.nano() !== 0) {\n throw new IllegalArgumentException('Nano-of-second must be zero');\n }\n\n if (transition instanceof LocalDateTime) {\n this._transition = transition;\n } else {\n this._transition = LocalDateTime.ofEpochSecond(transition, 0, offsetBefore);\n }\n\n this._offsetBefore = offsetBefore;\n this._offsetAfter = offsetAfter;\n }\n\n var _proto = ZoneOffsetTransition.prototype;\n\n _proto.instant = function instant() {\n return this._transition.toInstant(this._offsetBefore);\n };\n\n _proto.toEpochSecond = function toEpochSecond() {\n return this._transition.toEpochSecond(this._offsetBefore);\n };\n\n _proto.dateTimeBefore = function dateTimeBefore() {\n return this._transition;\n };\n\n _proto.dateTimeAfter = function dateTimeAfter() {\n return this._transition.plusSeconds(this.durationSeconds());\n };\n\n _proto.offsetBefore = function offsetBefore() {\n return this._offsetBefore;\n };\n\n _proto.offsetAfter = function offsetAfter() {\n return this._offsetAfter;\n };\n\n _proto.duration = function duration() {\n return Duration.ofSeconds(this.durationSeconds());\n };\n\n _proto.durationSeconds = function durationSeconds() {\n return this._offsetAfter.totalSeconds() - this._offsetBefore.totalSeconds();\n };\n\n _proto.isGap = function isGap() {\n return this._offsetAfter.totalSeconds() > this._offsetBefore.totalSeconds();\n };\n\n _proto.isOverlap = function isOverlap() {\n return this._offsetAfter.totalSeconds() < this._offsetBefore.totalSeconds();\n };\n\n _proto.isValidOffset = function isValidOffset(offset) {\n return this.isGap() ? false : this._offsetBefore.equals(offset) || this._offsetAfter.equals(offset);\n };\n\n _proto.validOffsets = function validOffsets() {\n if (this.isGap()) {\n return [];\n } else {\n return [this._offsetBefore, this._offsetAfter];\n }\n };\n\n _proto.compareTo = function compareTo(transition) {\n return this.instant().compareTo(transition.instant());\n };\n\n _proto.equals = function equals(other) {\n if (other === this) {\n return true;\n }\n\n if (other instanceof ZoneOffsetTransition) {\n var d = other;\n return this._transition.equals(d._transition) && this._offsetBefore.equals(d.offsetBefore()) && this._offsetAfter.equals(d.offsetAfter());\n }\n\n return false;\n };\n\n _proto.hashCode = function hashCode() {\n return this._transition.hashCode() ^ this._offsetBefore.hashCode() ^ this._offsetAfter.hashCode() >>> 16;\n };\n\n _proto.toString = function toString() {\n return 'Transition[' + (this.isGap() ? 'Gap' : 'Overlap') + ' at ' + this._transition.toString() + this._offsetBefore.toString() + ' to ' + this._offsetAfter + ']';\n };\n\n return ZoneOffsetTransition;\n}();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nfunction _init$m() {\n TemporalQueries.ZONE_ID = createTemporalQuery('ZONE_ID', function (temporal) {\n return temporal.query(TemporalQueries.ZONE_ID);\n });\n TemporalQueries.CHRONO = createTemporalQuery('CHRONO', function (temporal) {\n return temporal.query(TemporalQueries.CHRONO);\n });\n TemporalQueries.PRECISION = createTemporalQuery('PRECISION', function (temporal) {\n return temporal.query(TemporalQueries.PRECISION);\n });\n TemporalQueries.OFFSET = createTemporalQuery('OFFSET', function (temporal) {\n if (temporal.isSupported(ChronoField.OFFSET_SECONDS)) {\n return ZoneOffset.ofTotalSeconds(temporal.get(ChronoField.OFFSET_SECONDS));\n }\n\n return null;\n });\n TemporalQueries.ZONE = createTemporalQuery('ZONE', function (temporal) {\n var zone = temporal.query(TemporalQueries.ZONE_ID);\n return zone != null ? zone : temporal.query(TemporalQueries.OFFSET);\n });\n TemporalQueries.LOCAL_DATE = createTemporalQuery('LOCAL_DATE', function (temporal) {\n if (temporal.isSupported(ChronoField.EPOCH_DAY)) {\n return LocalDate.ofEpochDay(temporal.getLong(ChronoField.EPOCH_DAY));\n }\n\n return null;\n });\n TemporalQueries.LOCAL_TIME = createTemporalQuery('LOCAL_TIME', function (temporal) {\n if (temporal.isSupported(ChronoField.NANO_OF_DAY)) {\n return LocalTime.ofNanoOfDay(temporal.getLong(ChronoField.NANO_OF_DAY));\n }\n\n return null;\n });\n}\n\nvar SystemDefaultZoneRules = function (_ZoneRules) {\n _inheritsLoose(SystemDefaultZoneRules, _ZoneRules);\n\n function SystemDefaultZoneRules() {\n return _ZoneRules.apply(this, arguments) || this;\n }\n\n var _proto = SystemDefaultZoneRules.prototype;\n\n _proto.isFixedOffset = function isFixedOffset() {\n return false;\n };\n\n _proto.offsetOfInstant = function offsetOfInstant(instant) {\n var offsetInMinutes = new Date(instant.toEpochMilli()).getTimezoneOffset();\n return ZoneOffset.ofTotalMinutes(offsetInMinutes * -1);\n };\n\n _proto.offsetOfEpochMilli = function offsetOfEpochMilli(epochMilli) {\n var offsetInMinutes = new Date(epochMilli).getTimezoneOffset();\n return ZoneOffset.ofTotalMinutes(offsetInMinutes * -1);\n };\n\n _proto.offsetOfLocalDateTime = function offsetOfLocalDateTime(localDateTime) {\n var epochMilli = localDateTime.toEpochSecond(ZoneOffset.UTC) * 1000;\n var offsetInMinutesBeforePossibleTransition = new Date(epochMilli).getTimezoneOffset();\n var epochMilliSystemZone = epochMilli + offsetInMinutesBeforePossibleTransition * 60000;\n var offsetInMinutesAfterPossibleTransition = new Date(epochMilliSystemZone).getTimezoneOffset();\n return ZoneOffset.ofTotalMinutes(offsetInMinutesAfterPossibleTransition * -1);\n };\n\n _proto.validOffsets = function validOffsets(localDateTime) {\n return [this.offsetOfLocalDateTime(localDateTime)];\n };\n\n _proto.transition = function transition() {\n return null;\n };\n\n _proto.standardOffset = function standardOffset(instant) {\n return this.offsetOfInstant(instant);\n };\n\n _proto.daylightSavings = function daylightSavings() {\n this._throwNotSupported();\n };\n\n _proto.isDaylightSavings = function isDaylightSavings() {\n this._throwNotSupported();\n };\n\n _proto.isValidOffset = function isValidOffset(dateTime, offset) {\n return this.offsetOfLocalDateTime(dateTime).equals(offset);\n };\n\n _proto.nextTransition = function nextTransition() {\n this._throwNotSupported();\n };\n\n _proto.previousTransition = function previousTransition() {\n this._throwNotSupported();\n };\n\n _proto.transitions = function transitions() {\n this._throwNotSupported();\n };\n\n _proto.transitionRules = function transitionRules() {\n this._throwNotSupported();\n };\n\n _proto._throwNotSupported = function _throwNotSupported() {\n throw new DateTimeException('not supported operation');\n };\n\n _proto.equals = function equals(other) {\n if (this === other || other instanceof SystemDefaultZoneRules) {\n return true;\n } else {\n return false;\n }\n };\n\n _proto.toString = function toString() {\n return 'SYSTEM';\n };\n\n return SystemDefaultZoneRules;\n}(ZoneRules);\n\nvar SystemDefaultZoneId = function (_ZoneId) {\n _inheritsLoose(SystemDefaultZoneId, _ZoneId);\n\n function SystemDefaultZoneId() {\n var _this;\n\n _this = _ZoneId.call(this) || this;\n _this._rules = new SystemDefaultZoneRules();\n return _this;\n }\n\n var _proto = SystemDefaultZoneId.prototype;\n\n _proto.rules = function rules() {\n return this._rules;\n };\n\n _proto.equals = function equals(other) {\n if (this === other) {\n return true;\n }\n\n return false;\n };\n\n _proto.id = function id() {\n return 'SYSTEM';\n };\n\n return SystemDefaultZoneId;\n}(ZoneId);\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar ZoneIdFactory = function () {\n function ZoneIdFactory() {}\n\n ZoneIdFactory.systemDefault = function systemDefault() {\n return SYSTEM_DEFAULT_ZONE_ID_INSTANCE;\n };\n\n ZoneIdFactory.getAvailableZoneIds = function getAvailableZoneIds() {\n return ZoneRulesProvider.getAvailableZoneIds();\n };\n\n ZoneIdFactory.of = function of(zoneId) {\n requireNonNull(zoneId, 'zoneId');\n\n if (zoneId === 'Z') {\n return ZoneOffset.UTC;\n }\n\n if (zoneId.length === 1) {\n throw new DateTimeException('Invalid zone: ' + zoneId);\n }\n\n if (StringUtil.startsWith(zoneId, '+') || StringUtil.startsWith(zoneId, '-')) {\n return ZoneOffset.of(zoneId);\n }\n\n if (zoneId === 'UTC' || zoneId === 'GMT' || zoneId === 'GMT0' || zoneId === 'UT') {\n return new ZoneRegion(zoneId, ZoneOffset.UTC.rules());\n }\n\n if (StringUtil.startsWith(zoneId, 'UTC+') || StringUtil.startsWith(zoneId, 'GMT+') || StringUtil.startsWith(zoneId, 'UTC-') || StringUtil.startsWith(zoneId, 'GMT-')) {\n var offset = ZoneOffset.of(zoneId.substring(3));\n\n if (offset.totalSeconds() === 0) {\n return new ZoneRegion(zoneId.substring(0, 3), offset.rules());\n }\n\n return new ZoneRegion(zoneId.substring(0, 3) + offset.id(), offset.rules());\n }\n\n if (StringUtil.startsWith(zoneId, 'UT+') || StringUtil.startsWith(zoneId, 'UT-')) {\n var _offset = ZoneOffset.of(zoneId.substring(2));\n\n if (_offset.totalSeconds() === 0) {\n return new ZoneRegion('UT', _offset.rules());\n }\n\n return new ZoneRegion('UT' + _offset.id(), _offset.rules());\n }\n\n if (zoneId === 'SYSTEM') {\n return ZoneId.systemDefault();\n }\n\n return ZoneRegion.ofId(zoneId);\n };\n\n ZoneIdFactory.ofOffset = function ofOffset(prefix, offset) {\n requireNonNull(prefix, 'prefix');\n requireNonNull(offset, 'offset');\n\n if (prefix.length === 0) {\n return offset;\n }\n\n if (prefix === 'GMT' || prefix === 'UTC' || prefix === 'UT') {\n if (offset.totalSeconds() === 0) {\n return new ZoneRegion(prefix, offset.rules());\n }\n\n return new ZoneRegion(prefix + offset.id(), offset.rules());\n }\n\n throw new IllegalArgumentException('Invalid prefix, must be GMT, UTC or UT: ' + prefix);\n };\n\n ZoneIdFactory.from = function from(temporal) {\n requireNonNull(temporal, 'temporal');\n var obj = temporal.query(TemporalQueries.zone());\n\n if (obj == null) {\n throw new DateTimeException('Unable to obtain ZoneId from TemporalAccessor: ' + temporal + ', type ' + (temporal.constructor != null ? temporal.constructor.name : ''));\n }\n\n return obj;\n };\n\n return ZoneIdFactory;\n}();\nvar SYSTEM_DEFAULT_ZONE_ID_INSTANCE = null;\nfunction _init$n() {\n SYSTEM_DEFAULT_ZONE_ID_INSTANCE = new SystemDefaultZoneId();\n ZoneId.systemDefault = ZoneIdFactory.systemDefault;\n ZoneId.getAvailableZoneIds = ZoneIdFactory.getAvailableZoneIds;\n ZoneId.of = ZoneIdFactory.of;\n ZoneId.ofOffset = ZoneIdFactory.ofOffset;\n ZoneId.from = ZoneIdFactory.from;\n ZoneOffset.from = ZoneIdFactory.from;\n ZoneId.SYSTEM = SYSTEM_DEFAULT_ZONE_ID_INSTANCE;\n ZoneId.UTC = ZoneOffset.ofTotalSeconds(0);\n}\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar isInit = false;\n\nfunction init() {\n if (isInit) {\n return;\n }\n\n isInit = true;\n _init$1();\n _init();\n _init$2();\n _init$3();\n _init$k();\n _init$8();\n _init$m();\n _init$4();\n _init$l();\n _init$i();\n _init$j();\n _init$d();\n _init$5();\n _init$c();\n _init$b();\n _init$6();\n _init$7();\n _init$g();\n _init$n();\n _init$e();\n _init$a();\n _init$9();\n _init$h();\n _init$f();\n}\n\ninit();\n\n/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nvar ToNativeJsConverter = function () {\n function ToNativeJsConverter(temporal, zone) {\n var zonedDateTime;\n\n if (temporal instanceof LocalDate) {\n zone = zone == null ? ZoneId.systemDefault() : zone;\n zonedDateTime = temporal.atStartOfDay(zone);\n } else if (temporal instanceof LocalDateTime) {\n zone = zone == null ? ZoneId.systemDefault() : zone;\n zonedDateTime = temporal.atZone(zone);\n } else if (temporal instanceof ZonedDateTime) {\n if (zone == null) {\n zonedDateTime = temporal;\n } else {\n zonedDateTime = temporal.withZoneSameInstant(zone);\n }\n } else {\n throw new IllegalArgumentException('unsupported instance for convert operation:' + temporal);\n }\n\n this.instant = zonedDateTime.toInstant();\n }\n\n var _proto = ToNativeJsConverter.prototype;\n\n _proto.toDate = function toDate() {\n return new Date(this.instant.toEpochMilli());\n };\n\n _proto.toEpochMilli = function toEpochMilli() {\n return this.instant.toEpochMilli();\n };\n\n return ToNativeJsConverter;\n}();\n\nfunction convert(temporal, zone) {\n return new ToNativeJsConverter(temporal, zone);\n}\n\nvar NativeJsTemporal = function (_TemporalAccessor) {\n _inheritsLoose(NativeJsTemporal, _TemporalAccessor);\n\n function NativeJsTemporal(date, zone) {\n var _this;\n\n if (zone === void 0) {\n zone = ZoneId.systemDefault();\n }\n\n _this = _TemporalAccessor.call(this) || this;\n _this._zone = zone;\n\n if (date instanceof Date) {\n _this._epochMilli = date.getTime();\n return _assertThisInitialized(_this);\n } else if (typeof date.toDate === 'function' && date.toDate() instanceof Date) {\n _this._epochMilli = date.toDate().getTime();\n return _assertThisInitialized(_this);\n }\n\n assert(false, 'date must be either a javascript date or a moment');\n return _this;\n }\n\n var _proto = NativeJsTemporal.prototype;\n\n _proto.query = function query(_query) {\n requireNonNull(_query, 'query');\n\n if (_query === TemporalQueries.localDate()) {\n return LocalDate.ofInstant(Instant.ofEpochMilli(this._epochMilli), this._zone);\n } else if (_query === TemporalQueries.localTime()) {\n return LocalTime.ofInstant(Instant.ofEpochMilli(this._epochMilli), this._zone);\n } else if (_query === TemporalQueries.zone()) {\n return this._zone;\n }\n\n return _TemporalAccessor.prototype.query.call(this, _query);\n };\n\n _proto.get = function get(field) {\n return this.getLong(field);\n };\n\n _proto.getLong = function getLong(field) {\n requireNonNull(field, 'field');\n\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND:\n return MathUtil.floorMod(this._epochMilli, 1000) * 1000000;\n\n case ChronoField.INSTANT_SECONDS:\n return MathUtil.floorDiv(this._epochMilli, 1000);\n }\n\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n return field.getFrom(this);\n };\n\n _proto.isSupported = function isSupported(field) {\n return field === ChronoField.INSTANT_SECONDS || field === ChronoField.NANO_OF_SECOND;\n };\n\n return NativeJsTemporal;\n}(TemporalAccessor);\n\nfunction nativeJs(date, zone) {\n return new NativeJsTemporal(date, zone);\n}\n\nfunction bindUse(jsJoda) {\n var used = [];\n return function use(fn) {\n if (!~used.indexOf(fn)) {\n fn(jsJoda);\n used.push(fn);\n }\n\n return jsJoda;\n };\n}\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nvar _ = {\n assert: assert$1,\n DateTimeBuilder: DateTimeBuilder,\n DateTimeParseContext: DateTimeParseContext,\n DateTimePrintContext: DateTimePrintContext,\n MathUtil: MathUtil,\n StringUtil: StringUtil,\n StringBuilder: StringBuilder\n};\nvar jsJodaExports = {\n _: _,\n convert: convert,\n nativeJs: nativeJs,\n ArithmeticException: ArithmeticException,\n DateTimeException: DateTimeException,\n DateTimeParseException: DateTimeParseException,\n IllegalArgumentException: IllegalArgumentException,\n IllegalStateException: IllegalStateException,\n UnsupportedTemporalTypeException: UnsupportedTemporalTypeException,\n NullPointerException: NullPointerException,\n Clock: Clock,\n DayOfWeek: DayOfWeek,\n Duration: Duration,\n Instant: Instant,\n LocalDate: LocalDate,\n LocalTime: LocalTime,\n LocalDateTime: LocalDateTime,\n OffsetTime: OffsetTime,\n OffsetDateTime: OffsetDateTime,\n Month: Month,\n MonthDay: MonthDay,\n Period: Period,\n Year: Year,\n YearConstants: YearConstants,\n YearMonth: YearMonth,\n ZonedDateTime: ZonedDateTime,\n ZoneOffset: ZoneOffset,\n ZoneId: ZoneId,\n ZoneRegion: ZoneRegion,\n ZoneOffsetTransition: ZoneOffsetTransition,\n ZoneRules: ZoneRules,\n ZoneRulesProvider: ZoneRulesProvider,\n ChronoLocalDate: ChronoLocalDate,\n ChronoLocalDateTime: ChronoLocalDateTime,\n ChronoZonedDateTime: ChronoZonedDateTime,\n IsoChronology: IsoChronology,\n ChronoField: ChronoField,\n ChronoUnit: ChronoUnit,\n IsoFields: IsoFields,\n Temporal: Temporal,\n TemporalAccessor: TemporalAccessor,\n TemporalAdjuster: TemporalAdjuster,\n TemporalAdjusters: TemporalAdjusters,\n TemporalAmount: TemporalAmount,\n TemporalField: TemporalField,\n TemporalQueries: TemporalQueries,\n TemporalQuery: TemporalQuery,\n TemporalUnit: TemporalUnit,\n ValueRange: ValueRange,\n DateTimeFormatter: DateTimeFormatter,\n DateTimeFormatterBuilder: DateTimeFormatterBuilder,\n DecimalStyle: DecimalStyle,\n ResolverStyle: ResolverStyle,\n SignStyle: SignStyle,\n TextStyle: TextStyle\n};\nvar use = bindUse(jsJodaExports);\njsJodaExports.use = use;\n\nexport { ArithmeticException, ChronoField, ChronoLocalDate, ChronoLocalDateTime, ChronoUnit, ChronoZonedDateTime, Clock, DateTimeException, DateTimeFormatter, DateTimeFormatterBuilder, DateTimeParseException, DayOfWeek, DecimalStyle, Duration, IllegalArgumentException, IllegalStateException, Instant, IsoChronology, IsoFields, LocalDate, LocalDateTime, LocalTime, Month, MonthDay, NullPointerException, OffsetDateTime, OffsetTime, Period, ResolverStyle, SignStyle, Temporal, TemporalAccessor, TemporalAdjuster, TemporalAdjusters, TemporalAmount, TemporalField, TemporalQueries, TemporalQuery, TemporalUnit, TextStyle, UnsupportedTemporalTypeException, ValueRange, Year, YearConstants, YearMonth, ZoneId, ZoneOffset, ZoneOffsetTransition, ZoneRegion, ZoneRules, ZoneRulesProvider, ZonedDateTime, _, convert, nativeJs, use };\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy\n\n/**\n * Transforms an item of type T to a String.\n *\n * @param <T> The type of the item to transform.\n</T> */\ninterface ToStringFunction<T> {\n /**\n * Transforms the input item to a string.\n *\n * @param item The item to transform.\n * @return A string to use for comparing the item.\n */\n fun apply(item: T): String\n\n companion object {\n\n /**\n * A default ToStringFunction that returns the input string;\n * used by methods that use plain strings in [FuzzySearch].\n */\n val NO_PROCESS: ToStringFunction<String> = object : ToStringFunction<String> {\n override fun apply(item: String): String {\n return item\n }\n }\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils\n\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditOp\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditType\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditType.DELETE\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditType.INSERT\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditType.KEEP\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.EditType.REPLACE\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.MatchingBlock\nimport com.willowtreeapps.fuzzywuzzy.diffutils.structs.OpCode\n\n/**\n * This is a port of all the functions needed from python-levenshtein C implementation.\n * The code was ported line by line but unfortunately it was mostly undocumented,\n * so it is mostly non readable (eg. var names)\n */\nobject DiffUtils {\n\n private fun getEditOps(s1: String, s2: String): Array<EditOp> {\n return getEditOps(s1.length, s1, s2.length, s2)\n }\n\n\n private fun getEditOps(len1: Int, s1: String, len2: Int, s2: String): Array<EditOp> {\n var len1Copy = len1\n var len2Copy = len2\n\n var len1o = 0\n var i = 0\n\n var p1 = 0\n var p2 = 0\n\n while (len1Copy > 0 && len2Copy > 0 && s1[p1] == s2[p2]) {\n len1Copy--\n len2Copy--\n\n p1++\n p2++\n\n len1o++\n }\n\n val len2o: Int = len1o\n\n /* strip common suffix */\n while (len1Copy > 0 && len2Copy > 0 && s1[p1 + len1Copy - 1] == s2[p2 + len2Copy - 1]) {\n len1Copy--\n len2Copy--\n }\n\n len1Copy++\n len2Copy++\n\n val matrix: IntArray = IntArray(len2Copy * len1Copy)\n\n while (i < len2Copy) {\n matrix[i] = i\n i++\n }\n i = 1\n while (i < len1Copy) {\n matrix[len2Copy * i] = i\n i++\n }\n\n i = 1\n while (i < len1Copy) {\n\n var ptrPrev = (i - 1) * len2Copy\n var ptrC = i * len2Copy\n val ptrEnd = ptrC + len2Copy - 1\n\n val char1 = s1[p1 + i - 1]\n var ptrChar2 = p2\n\n var x = i\n\n ptrC++\n\n while (ptrC <= ptrEnd) {\n\n var c3 = matrix[ptrPrev++] + if (char1 != s2[ptrChar2++]) 1 else 0\n x++\n\n if (x > c3) {\n x = c3\n }\n\n c3 = matrix[ptrPrev] + 1\n\n if (x > c3) {\n x = c3\n }\n\n matrix[ptrC++] = x\n }\n i++\n }\n\n\n return editOpsFromCostMatrix(len1Copy, s1, p1, len1o, len2Copy, s2, p2, len2o, matrix)\n }\n\n\n private fun editOpsFromCostMatrix(len1: Int, c1: String, p1: Int, o1: Int,\n len2: Int, c2: String, p2: Int, o2: Int,\n matrix: IntArray): Array<EditOp> {\n\n var i: Int = len1 - 1\n var j: Int = len2 - 1\n var pos: Int = matrix[len1 * len2 - 1]\n\n var ptr: Int = len1 * len2 - 1\n\n var dir = 0\n\n val ops: Array<EditOp?> = arrayOfNulls(pos)\n\n while (i > 0 || j > 0) {\n\n if (dir < 0 && j != 0 && matrix[ptr] == matrix[ptr - 1] + 1) {\n\n val eop = EditOp()\n\n pos--\n ops[pos] = eop\n eop.type = INSERT\n eop.spos = i + o1\n eop.dpos = --j + o2\n ptr--\n\n continue\n }\n\n if (dir > 0 && i != 0 && matrix[ptr] == matrix[ptr - len2] + 1) {\n\n val eop = EditOp()\n\n pos--\n ops[pos] = eop\n eop.type = DELETE\n eop.spos = --i + o1\n eop.dpos = j + o2\n ptr -= len2\n\n continue\n\n }\n\n if (i != 0 && j != 0 && matrix[ptr] == matrix[ptr - len2 - 1]\n && c1[p1 + i - 1] == c2[p2 + j - 1]) {\n\n i--\n j--\n ptr -= len2 + 1\n dir = 0\n\n continue\n\n }\n\n if (i != 0 && j != 0 && matrix[ptr] == matrix[ptr - len2 - 1] + 1) {\n\n pos--\n\n val eop = EditOp()\n ops[pos] = eop\n\n eop.type = REPLACE\n eop.spos = --i + o1\n eop.dpos = --j + o2\n\n ptr -= len2 + 1\n dir = 0\n continue\n\n }\n\n if (dir == 0 && j != 0 && matrix[ptr] == matrix[ptr - 1] + 1) {\n\n pos--\n val eop = EditOp()\n ops[pos] = eop\n eop.type = INSERT\n eop.spos = i + o1\n eop.dpos = --j + o2\n ptr--\n dir = -1\n\n continue\n }\n\n if (dir == 0 && i != 0 && matrix[ptr] == matrix[ptr - len2] + 1) {\n pos--\n val eop = EditOp()\n ops[pos] = eop\n\n eop.type = DELETE\n eop.spos = --i + o1\n eop.dpos = j + o2\n ptr -= len2\n dir = 1\n continue\n }\n\n assert(false)\n\n }\n\n return ops.requireNoNulls()\n\n }\n\n fun getMatchingBlocks(s1: String, s2: String): Array<MatchingBlock> {\n\n return getMatchingBlocks(s1.length, s2.length, getEditOps(s1, s2))\n\n }\n\n fun getMatchingBlocks(len1: Int, len2: Int, ops: Array<OpCode>): Array<MatchingBlock?> {\n\n val n = ops.size\n\n var noOfMB = 0\n var o = 0\n\n var i: Int = n\n while (i-- != 0) {\n\n if (ops[o].type === KEEP) {\n\n noOfMB++\n\n while (i != 0 && ops[o].type === KEEP) {\n i--\n o++\n }\n\n if (i == 0)\n break\n\n }\n o++\n\n }\n\n val matchingBlocks = arrayOfNulls<MatchingBlock>(noOfMB + 1)\n var mb = 0\n o = 0\n matchingBlocks[mb] = MatchingBlock()\n\n i = n\n while (i != 0) {\n\n if (ops[o].type === KEEP) {\n\n\n matchingBlocks[mb]!!.spos = ops[o].sbeg\n matchingBlocks[mb]!!.dpos = ops[o].dbeg\n\n while (i != 0 && ops[o].type === KEEP) {\n i--\n o++\n }\n\n if (i == 0) {\n matchingBlocks[mb]!!.length = len1 - matchingBlocks[mb]!!.spos\n mb++\n break\n }\n\n matchingBlocks[mb]!!.length = ops[o].sbeg - matchingBlocks[mb]!!.spos\n mb++\n matchingBlocks[mb] = MatchingBlock()\n }\n i--\n o++\n\n\n }\n\n assert(mb == noOfMB)\n\n val finalBlock = MatchingBlock()\n finalBlock.spos = len1\n finalBlock.dpos = len2\n finalBlock.length = 0\n\n matchingBlocks[mb] = finalBlock\n\n return matchingBlocks\n\n\n }\n\n\n private fun getMatchingBlocks(len1: Int, len2: Int, ops: Array<EditOp>): Array<MatchingBlock> {\n\n val n = ops.size\n\n var numberOfMatchingBlocks = 0\n var spos: Int\n var dpos: Int\n\n var o = 0\n\n dpos = 0\n spos = dpos\n\n var type: EditType\n\n var i: Int = n\n while (i != 0) {\n\n\n while (ops[o].type === KEEP && --i != 0) {\n o++\n }\n\n if (i == 0)\n break\n\n if (spos < ops[o].spos || dpos < ops[o].dpos) {\n\n numberOfMatchingBlocks++\n spos = ops[o].spos\n dpos = ops[o].dpos\n\n }\n\n type = ops[o].type!!\n\n when (type) {\n REPLACE -> do {\n spos++\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n DELETE -> do {\n spos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n INSERT -> do {\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n else -> {\n }\n }\n }\n\n if (spos < len1 || dpos < len2) {\n numberOfMatchingBlocks++\n }\n\n val matchingBlocks = arrayOfNulls<MatchingBlock>(numberOfMatchingBlocks + 1)\n\n o = 0\n dpos = 0\n spos = dpos\n var mbIndex = 0\n\n\n i = n\n while (i != 0) {\n\n while (ops[o].type === KEEP && --i != 0)\n o++\n\n if (i == 0)\n break\n\n if (spos < ops[o].spos || dpos < ops[o].dpos) {\n val mb = MatchingBlock()\n\n mb.spos = spos\n mb.dpos = dpos\n mb.length = ops[o].spos - spos\n spos = ops[o].spos\n dpos = ops[o].dpos\n\n matchingBlocks[mbIndex++] = mb\n\n }\n\n type = ops[o].type!!\n\n when (type) {\n REPLACE -> do {\n spos++\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n DELETE -> do {\n spos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n INSERT -> do {\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n else -> {\n }\n }\n }\n\n if (spos < len1 || dpos < len2) {\n assert(len1 - spos == len2 - dpos)\n\n val mb = MatchingBlock()\n mb.spos = spos\n mb.dpos = dpos\n mb.length = len1 - spos\n\n matchingBlocks[mbIndex++] = mb\n }\n\n assert(numberOfMatchingBlocks == mbIndex)\n\n val finalBlock = MatchingBlock()\n finalBlock.spos = len1\n finalBlock.dpos = len2\n finalBlock.length = 0\n\n matchingBlocks[mbIndex] = finalBlock\n\n\n return matchingBlocks.filterNotNull().toTypedArray()\n }\n\n\n private fun editOpsToOpCodes(ops: Array<EditOp>, len1: Int, len2: Int): Array<OpCode?> {\n\n val n = ops.size\n var noOfBlocks = 0\n var i: Int\n var spos: Int\n var dpos: Int\n var o = 0\n var type: EditType\n\n dpos = 0\n spos = dpos\n\n i = n\n while (i != 0) {\n\n while (ops[o].type === KEEP && --i != 0) {\n o++\n }\n\n if (i == 0)\n break\n\n if (spos < ops[o].spos || dpos < ops[o].dpos) {\n\n noOfBlocks++\n spos = ops[o].spos\n dpos = ops[o].dpos\n\n }\n\n // TODO: Is this right?\n noOfBlocks++\n type = ops[o].type!!\n\n when (type) {\n REPLACE -> do {\n spos++\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n DELETE -> do {\n spos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n INSERT -> do {\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n else -> {\n }\n }\n }\n\n if (spos < len1 || dpos < len2)\n noOfBlocks++\n\n val opCodes = arrayOfNulls<OpCode>(noOfBlocks)\n\n o = 0\n dpos = 0\n spos = dpos\n var oIndex = 0\n\n i = n\n while (i != 0) {\n\n while (ops[o].type === KEEP && --i != 0)\n o++\n\n if (i == 0)\n break\n\n val oc = OpCode()\n opCodes[oIndex] = oc\n oc.sbeg = spos\n oc.dbeg = dpos\n\n if (spos < ops[o].spos || dpos < ops[o].dpos) {\n\n oc.type = KEEP\n oc.send = ops[o].spos\n spos = oc.send\n oc.dend = ops[o].dpos\n dpos = oc.dend\n\n oIndex++\n val oc2 = OpCode()\n opCodes[oIndex] = oc2\n oc2.sbeg = spos\n oc2.dbeg = dpos\n\n }\n\n type = ops[o].type!!\n\n when (type) {\n REPLACE -> do {\n spos++\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n DELETE -> do {\n spos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n INSERT -> do {\n dpos++\n i--\n o++\n } while (i != 0 && ops[o].type === type &&\n spos == ops[o].spos && dpos == ops[o].dpos)\n\n else -> {\n }\n }\n\n opCodes[oIndex]!!.type = type\n opCodes[oIndex]!!.send = spos\n opCodes[oIndex]!!.dend = dpos\n oIndex++\n }\n\n if (spos < len1 || dpos < len2) {\n\n assert(len1 - spos == len2 - dpos)\n if (opCodes[oIndex] == null)\n opCodes[oIndex] = OpCode()\n opCodes[oIndex]!!.type = KEEP\n opCodes[oIndex]!!.sbeg = spos\n opCodes[oIndex]!!.dbeg = dpos\n opCodes[oIndex]!!.send = len1\n opCodes[oIndex]!!.dend = len2\n\n oIndex++\n\n }\n\n assert(oIndex == noOfBlocks)\n\n return opCodes\n\n }\n\n fun levEditDistance(s1: String, s2: String, xcost: Int): Int {\n\n var i: Int\n val half: Int\n\n var c1 = s1\n var c2 = s2\n\n var str1 = 0\n var str2 = 0\n\n var len1 = s1.length\n var len2 = s2.length\n\n /* strip common prefix */\n while (len1 > 0 && len2 > 0 && c1[str1] == c2[str2]) {\n\n len1--\n len2--\n str1++\n str2++\n\n }\n\n /* strip common suffix */\n while (len1 > 0 && len2 > 0 && c1[str1 + len1 - 1] == c2[str2 + len2 - 1]) {\n len1--\n len2--\n }\n\n /* catch trivial cases */\n if (len1 == 0)\n return len2\n if (len2 == 0)\n return len1\n\n /* make the inner cycle (i.e. str2) the longer one */\n if (len1 > len2) {\n\n val nx = len1\n val temp = str1\n\n len1 = len2\n len2 = nx\n\n str1 = str2\n str2 = temp\n\n val t = c2\n c2 = c1\n c1 = t\n\n }\n\n /* check len1 == 1 separately */\n if (len1 == 1) {\n return if (xcost != 0) {\n len2 + 1 - 2 * memchr(c2, str2, c1[str1], len2)\n } else {\n len2 - memchr(c2, str2, c1[str1], len2)\n }\n }\n\n len1++\n len2++\n half = len1 shr 1\n\n val row = IntArray(len2)\n var end = len2 - 1\n\n i = 0\n while (i < len2 - if (xcost != 0) 0 else half) {\n row[i] = i\n i++\n }\n\n\n /* go through the matrix and compute the costs. yes, this is an extremely\n * obfuscated version, but also extremely memory-conservative and relatively\n * fast. */\n\n if (xcost != 0) {\n\n i = 1\n while (i < len1) {\n\n var p = 1\n\n val ch1 = c1[str1 + i - 1]\n var c2p = str2\n\n var D = i\n var x = i\n\n while (p <= end) {\n\n if (ch1 == c2[c2p++]) {\n x = --D\n } else {\n x++\n }\n D = row[p]\n D++\n\n if (x > D)\n x = D\n row[p++] = x\n\n }\n i++\n\n }\n\n } else {\n\n /* in this case we don't have to scan two corner triangles (of size len1/2)\n * in the matrix because no best path can go throught them. note this\n * breaks when len1 == len2 == 2 so the memchr() special case above is\n * necessary */\n\n row[0] = len1 - half - 1\n i = 1\n while (i < len1) {\n var p: Int\n\n val ch1 = c1[str1 + i - 1]\n var c2p: Int\n\n var D: Int\n var x: Int\n\n /* skip the upper triangle */\n if (i >= len1 - half) {\n val offset = i - (len1 - half)\n val c3: Int\n\n c2p = str2 + offset\n p = offset\n c3 = row[p++] + if (ch1 != c2[c2p++]) 1 else 0\n x = row[p]\n x++\n D = x\n if (x > c3) {\n x = c3\n }\n row[p++] = x\n } else {\n p = 1\n c2p = str2\n x = i\n D = x\n }\n /* skip the lower triangle */\n if (i <= half + 1)\n end = len2 + i - half - 2\n /* main */\n while (p <= end) {\n val c3 = --D + if (ch1 != c2[c2p++]) 1 else 0\n x++\n if (x > c3) {\n x = c3\n }\n D = row[p]\n D++\n if (x > D)\n x = D\n row[p++] = x\n\n }\n\n /* lower triangle sentinel */\n if (i <= half) {\n val c3 = --D + if (ch1 != c2[c2p]) 1 else 0\n x++\n if (x > c3) {\n x = c3\n }\n row[p] = x\n }\n i++\n }\n }\n\n i = row[end]\n\n return i\n\n }\n\n private fun memchr(haystack: String, offset: Int, needle: Char, num: Int): Int {\n var numCopy = num\n\n if (numCopy != 0) {\n var p = 0\n\n do {\n\n if (haystack[offset + p] == needle)\n return 1\n\n p++\n\n } while (--numCopy != 0)\n\n }\n return 0\n\n }\n\n\n fun getRatio(s1: String, s2: String): Double {\n\n val len1 = s1.length\n val len2 = s2.length\n val lensum = len1 + len2\n\n val editDistance = levEditDistance(s1, s2, 1)\n\n return (lensum - editDistance) / lensum.toDouble()\n\n }\n\n\n}\n\nfun assert(assertion: Boolean) {\n if (!assertion)\n throw AssertionError()\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils\n\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.algorithms.Utils\nimport com.willowtreeapps.fuzzywuzzy.diffutils.model.BoundExtractedResult\nimport com.willowtreeapps.fuzzywuzzy.diffutils.model.ExtractedResult\n\n\nclass Extractor(private var cutoff: Int = 0) {\n\n fun with(cutoff: Int): Extractor {\n this.cutoff = cutoff\n return this\n }\n\n /**\n * Returns the list of choices with their associated scores of similarity in a list\n * of [ExtractedResult]\n *\n * @param query The query string\n * @param choices The list of choices\n * @param func The function to apply\n * @return The list of results\n */\n fun extractWithoutOrder(query: String, choices: Collection<String>,\n func: Applicable): List<ExtractedResult> {\n val yields = ArrayList<ExtractedResult>()\n\n for ((index, s) in choices.withIndex()) {\n\n val score = func.apply(query, s)\n\n if (score >= cutoff) {\n yields.add(ExtractedResult(s, score, index))\n }\n }\n\n return yields\n }\n\n /**\n * Returns the list of choices with their associated scores of similarity in a list\n * of [ExtractedResult]\n *\n * @param query The query string\n * @param choices The list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The function to apply\n * @return The list of results\n */\n fun <T> extractWithoutOrder(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable): List<BoundExtractedResult<T>> {\n\n val yields = ArrayList<BoundExtractedResult<T>>()\n\n for ((index, t) in choices.withIndex()) {\n\n val s = toStringFunction.apply(t)\n val score = func.apply(query, s)\n\n if (score >= cutoff) {\n yields.add(BoundExtractedResult(t, s, score, index))\n }\n }\n\n return yields\n\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @param func Scoring function\n * @return An object containing the best match and it's score\n */\n fun extractOne(query: String, choices: Collection<String>, func: Applicable): ExtractedResult {\n val extracted = extractWithoutOrder(query, choices, func)\n\n return extracted.maxOrNull()!!\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func Scoring function\n * @return An object containing the best match and it's score\n */\n fun <T> extractOne(query: String, choices: Collection<T>, toStringFunction: ToStringFunction<T>,\n func: Applicable): BoundExtractedResult<T> {\n\n val extracted = extractWithoutOrder(query, choices, toStringFunction, func)\n\n return extracted.maxOrNull()!!\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>, func: Applicable): List<ExtractedResult> {\n val best = extractWithoutOrder(query, choices, func)\n\n return best.sortedDescending()\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable): List<BoundExtractedResult<T>> {\n\n val best = extractWithoutOrder(query, choices, toStringFunction, func)\n return best.sortedDescending()\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param limit Limits the number of results and speeds up\n * the search (k-top heap sort) is used\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>, func: Applicable, limit: Int): List<ExtractedResult> {\n val best = extractWithoutOrder(query, choices, func)\n\n val results = Utils.findTopKHeap(best, limit)\n\n return results.sortedDescending()\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param limit Limits the number of results and speeds up\n * the search (k-top heap sort) is used\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable, limit: Int): List<BoundExtractedResult<T>> {\n\n val best = extractWithoutOrder(query, choices, toStringFunction, func)\n\n val results = Utils.findTopKHeap(best, limit)\n return results.sortedDescending()\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils\n\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.algorithms.TokenSet\nimport com.willowtreeapps.fuzzywuzzy.diffutils.algorithms.TokenSort\nimport com.willowtreeapps.fuzzywuzzy.diffutils.algorithms.WeightedRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.model.BoundExtractedResult\nimport com.willowtreeapps.fuzzywuzzy.diffutils.model.ExtractedResult\nimport com.willowtreeapps.fuzzywuzzy.diffutils.ratio.PartialRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.ratio.SimpleRatio\n\n/**\n * FuzzySearch facade class\n */\n@Suppress(\"unused\")\nobject FuzzySearch {\n\n /**\n * Calculates a Levenshtein simple ratio between the strings.\n * This is indicates a measure of similarity\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The simple ratio\n */\n fun ratio(s1: String, s2: String): Int {\n\n return SimpleRatio().apply(s1, s2)\n\n }\n\n /**\n * Calculates a Levenshtein simple ratio between the strings.\n * This is indicates a measure of similarity\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The simple ratio\n */\n fun ratio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return SimpleRatio().apply(s1, s2, stringFunction)\n\n }\n\n /**\n * Inconsistent substrings lead to problems in matching. This ratio\n * uses a heuristic called \"best partial\" for when two strings\n * are of noticeably different lengths.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The partial ratio\n */\n fun partialRatio(s1: String, s2: String): Int {\n\n return PartialRatio().apply(s1, s2)\n\n }\n\n /**\n * Inconsistent substrings lead to problems in matching. This ratio\n * uses a heuristic called \"best partial\" for when two strings\n * are of noticeably different lengths.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The partial ratio\n */\n fun partialRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return PartialRatio().apply(s1, s2, stringFunction)\n\n }\n\n /**\n * Find all alphanumeric tokens in the string and sort\n * those tokens and then take ratio of resulting\n * joined strings.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The partial ratio of the strings\n */\n fun tokenSortPartialRatio(s1: String, s2: String): Int {\n\n return TokenSort().apply(s1, s2, PartialRatio())\n\n }\n\n /**\n * Find all alphanumeric tokens in the string and sort\n * those tokens and then take ratio of resulting\n * joined strings.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The partial ratio of the strings\n */\n fun tokenSortPartialRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return TokenSort().apply(s1, s2, PartialRatio(), stringFunction)\n\n }\n\n /**\n * Find all alphanumeric tokens in the string and sort\n * those tokens and then take ratio of resulting\n * joined strings.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The full ratio of the strings\n */\n fun tokenSortRatio(s1: String, s2: String): Int {\n\n return TokenSort().apply(s1, s2, SimpleRatio())\n\n }\n\n /**\n * Find all alphanumeric tokens in the string and sort\n * those tokens and then take ratio of resulting\n * joined strings.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The full ratio of the strings\n */\n fun tokenSortRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return TokenSort().apply(s1, s2, SimpleRatio(), stringFunction)\n\n }\n\n\n /**\n * Splits the strings into tokens and computes intersections and remainders\n * between the tokens of the two strings. A comparison string is then\n * built up and is compared using the simple ratio algorithm.\n * Useful for strings where words appear redundantly.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The ratio of similarity\n */\n fun tokenSetRatio(s1: String, s2: String): Int {\n\n return TokenSet().apply(s1, s2, SimpleRatio())\n\n }\n\n /**\n * Splits the strings into tokens and computes intersections and remainders\n * between the tokens of the two strings. A comparison string is then\n * built up and is compared using the simple ratio algorithm.\n * Useful for strings where words appear redundantly.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The ratio of similarity\n */\n fun tokenSetRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return TokenSet().apply(s1, s2, SimpleRatio(), stringFunction)\n\n }\n\n /**\n * Splits the strings into tokens and computes intersections and remainders\n * between the tokens of the two strings. A comparison string is then\n * built up and is compared using the simple ratio algorithm.\n * Useful for strings where words appear redundantly.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The ratio of similarity\n */\n fun tokenSetPartialRatio(s1: String, s2: String): Int {\n\n return TokenSet().apply(s1, s2, PartialRatio())\n\n }\n\n /**\n * Splits the strings into tokens and computes intersections and remainders\n * between the tokens of the two strings. A comparison string is then\n * built up and is compared using the simple ratio algorithm.\n * Useful for strings where words appear redundantly.\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The ratio of similarity\n */\n fun tokenSetPartialRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return TokenSet().apply(s1, s2, PartialRatio(), stringFunction)\n\n }\n\n /**\n * Calculates a weighted ratio between the different algorithms for best results\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The ratio of similarity\n */\n fun weightedRatio(s1: String, s2: String): Int {\n\n return WeightedRatio().apply(s1, s2)\n\n }\n\n /**\n * Calculates a weighted ratio between the different algorithms for best results\n *\n * @param s1 Input string\n * @param s2 Input string\n * @param stringFunction Functor which transforms strings before\n * calculating the ratio\n * @return The ratio of similarity\n */\n fun weightedRatio(s1: String, s2: String, stringFunction: ToStringFunction<String>): Int {\n\n return WeightedRatio().apply(s1, s2, stringFunction)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>,\n func: Applicable, limit: Int, cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n return extractor.extractTop(query, choices, func, limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param limit Limits the number of results and speeds up\n * the search (k-top heap sort) is used\n * @param cutoff Rejects any entries with score below this\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>,\n limit: Int, cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n return extractor.extractTop(query, choices, WeightedRatio(), limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @param limit The number of results to return\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>,\n func: Applicable, limit: Int): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, func, limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param limit The number of results to return\n * @return A list of the results\n */\n fun extractTop(query: String, choices: Collection<String>,\n limit: Int): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, WeightedRatio(), limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @return A list of the results\n */\n fun extractSorted(query: String, choices: Collection<String>, func: Applicable): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, func)\n\n }\n\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun extractSorted(query: String, choices: Collection<String>, func: Applicable,\n cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractTop(query, choices, func)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @return A list of the results\n */\n fun extractSorted(query: String, choices: Collection<String>): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, WeightedRatio())\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun extractSorted(query: String, choices: Collection<String>,\n cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractTop(query, choices, WeightedRatio())\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @return A list of the results\n */\n fun extractAll(query: String, choices: Collection<String>, func: Applicable): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractWithoutOrder(query, choices, func)\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param func The scoring function\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun extractAll(query: String, choices: Collection<String>, func: Applicable,\n cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractWithoutOrder(query, choices, func)\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @return A list of the results\n */\n fun extractAll(query: String, choices: Collection<String>): List<ExtractedResult> {\n\n val extractor = Extractor()\n\n return extractor.extractWithoutOrder(query, choices, WeightedRatio())\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun extractAll(query: String, choices: Collection<String>, cutoff: Int): List<ExtractedResult> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractWithoutOrder(query, choices, WeightedRatio())\n\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @param func Scoring function\n * @return An object containing the best match and it's score\n */\n fun extractOne(query: String, choices: Collection<String>, func: Applicable): ExtractedResult {\n\n val extractor = Extractor()\n\n return extractor.extractOne(query, choices, func)\n\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @return An object containing the best match and it's score\n */\n fun extractOne(query: String, choices: Collection<String>): ExtractedResult {\n\n val extractor = Extractor()\n\n return extractor.extractOne(query, choices, WeightedRatio())\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable,\n limit: Int, cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n return extractor.extractTop(query, choices, toStringFunction, func, limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param limit Limits the number of results and speeds up\n * the search (k-top heap sort) is used\n * @param cutoff Rejects any entries with score below this\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, limit: Int, cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n return extractor.extractTop(query, choices, toStringFunction, WeightedRatio(), limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @param limit The number of results to return\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable,\n limit: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, toStringFunction, func, limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain the\n * top @param limit most similar choices\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param limit The number of results to return\n * @return A list of the results\n */\n fun <T> extractTop(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, limit: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, toStringFunction, WeightedRatio(), limit)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @return A list of the results\n */\n fun <T> extractSorted(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, toStringFunction, func)\n\n }\n\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun <T> extractSorted(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable,\n cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractTop(query, choices, toStringFunction, func)\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @return A list of the results\n */\n fun <T> extractSorted(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractTop(query, choices, toStringFunction, WeightedRatio())\n\n }\n\n /**\n * Creates a **sorted** list of [ExtractedResult] which contain all the choices\n * with their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun <T> extractSorted(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractTop(query, choices, toStringFunction, WeightedRatio())\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @return A list of the results\n */\n fun <T> extractAll(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractWithoutOrder(query, choices, toStringFunction, func)\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func The scoring function\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun <T> extractAll(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable,\n cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractWithoutOrder(query, choices, toStringFunction, func)\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @return A list of the results\n */\n fun <T> extractAll(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor()\n\n return extractor.extractWithoutOrder(query, choices, toStringFunction, WeightedRatio())\n\n }\n\n /**\n * Creates a list of [ExtractedResult] which contain all the choices with\n * their corresponding score where higher is more similar\n *\n * @param query The query string\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param cutoff Keep only scores above cutoff\n * @return A list of the results\n */\n fun <T> extractAll(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, cutoff: Int): List<BoundExtractedResult<T>> {\n\n val extractor = Extractor(cutoff)\n\n return extractor.extractWithoutOrder(query, choices, toStringFunction, WeightedRatio())\n\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @param func Scoring function\n * @return An object containing the best match and it's score\n */\n fun <T> extractOne(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>, func: Applicable): BoundExtractedResult<T> {\n\n val extractor = Extractor()\n\n return extractor.extractOne(query, choices, toStringFunction, func)\n\n }\n\n /**\n * Find the single best match above a score in a list of choices.\n *\n * @param query A string to match against\n * @param choices A list of choices\n * @param toStringFunction The ToStringFunction to be applied to all choices.\n * @return An object containing the best match and it's score\n */\n fun <T> extractOne(query: String, choices: Collection<T>,\n toStringFunction: ToStringFunction<T>): BoundExtractedResult<T> {\n\n val extractor = Extractor()\n\n return extractor.extractOne(query, choices, toStringFunction, WeightedRatio())\n\n }\n\n\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\n@file:Suppress(\"UNCHECKED_CAST\")\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils\n/*\n * Copyright (c) 2017 Kotlin Algorithm Club\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nimport kotlin.Comparator\n\nclass PriorityQueue<T>(size: Int, private val comparator: Comparator<T?>? = null) : Collection<T> {\n override var size: Int = 0\n private set\n private var arr: Array<T?> = Array<Comparable<T>?>(size) { null } as Array<T?>\n\n fun add(element: T) {\n if (size + 1 == arr.size) {\n resize()\n }\n arr[++size] = element\n swim(size)\n }\n\n fun peek(): T {\n if (size == 0) throw NoSuchElementException()\n return arr[1]!!\n }\n\n fun poll(): T {\n if (size == 0) throw NoSuchElementException()\n val res = peek()\n arr.swap(1, size--)\n sink(1)\n arr[size + 1] = null\n if ((size > 0) && (size == (arr.size - 1) / 4)) {\n resize()\n }\n return res\n }\n\n private fun swim(n: Int) {\n Companion.swim(arr, n, comparator)\n }\n\n private fun sink(n: Int) {\n Companion.sink(arr, n, size, comparator)\n }\n\n private fun resize() {\n val old = arr\n// arr = Array<Comparable<T>?>(size * 2, { null }) as Array<T?>\n arr = old.copyOf(old.size + 1)\n// System.arraycopy(old, 0, arr, 0, size + 1)\n }\n\n override fun isEmpty(): Boolean {\n return size == 0\n }\n\n override fun contains(element: T): Boolean {\n for (obj in this) {\n if (obj == element) return true\n }\n return false\n }\n\n override fun containsAll(elements: Collection<T>): Boolean {\n for (element in elements) {\n if (!contains(element)) return false\n }\n return true\n }\n\n override fun iterator(): Iterator<T> {\n return arr.copyOfRange(1, size + 1).map { it!! }.iterator()\n }\n\n companion object {\n private fun<T> greater(arr: Array<T>, i: Int, j: Int, comparator: Comparator<T>? = null): Boolean {\n return if (comparator != null) {\n comparator.compare(arr[i], arr[j]) > 0\n } else {\n val left = arr[i]!! as Comparable<T>\n left > arr[j]!!\n }\n }\n\n fun<T> sink(arr: Array<T>, a: Int, size: Int, comparator: Comparator<T>? = null ) {\n var k = a\n while (2 * k <= size) {\n var j = 2 * k\n if (j < size && greater(arr, j, j + 1, comparator)) j++\n if (!greater(arr, k, j, comparator)) break\n arr.swap(k, j)\n k = j\n }\n }\n\n fun<T> swim(arr: Array<T?>, size: Int, comparator: Comparator<T?>? = null) {\n var n = size\n while (n > 1 && greater(arr, n / 2, n, comparator)) {\n arr.swap(n, n / 2)\n n /= 2\n }\n }\n }\n}\n\nfun <T> Array<T>.swap(i: Int, j: Int) {\n val tmp = this[i]\n this[i] = this[j]\n this[j] = tmp\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.Applicable\n\nabstract class BasicAlgorithm : Applicable {\n\n var stringFunction: ToStringFunction<String>? = null\n internal set\n\n constructor() {\n this.stringFunction = DefaultStringFunction()\n }\n\n constructor(stringFunction: ToStringFunction<String>) {\n this.stringFunction = stringFunction\n }\n\n abstract fun apply(s1: String, s2: String, stringProcessor: ToStringFunction<String>): Int\n\n override fun apply(s1: String, s2: String): Int {\n\n return apply(s1, s2, this.stringFunction!!)\n\n }\n\n fun with(stringFunction: ToStringFunction<String>): BasicAlgorithm {\n this.stringFunction = stringFunction\n return this\n }\n\n fun noProcessor(): BasicAlgorithm {\n this.stringFunction = ToStringFunction.NO_PROCESS\n return this\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\n\nexpect val pattern: String\n\nclass DefaultStringFunction : ToStringFunction<String> {\n\n /**\n * Performs the default string processing on the item string\n *\n * @param `item` Input string\n * @return The processed string\n */\n override fun apply(item: String) = subNonAlphaNumeric(item, \" \").toLowerCase().trim { it <= ' ' }\n\n companion object {\n\n private const val nonUnicodePattern = \"[^\\\\p{Alnum}]\"\n private val r by lazy {\n try {\n Regex(pattern)\n } catch (e: IllegalArgumentException) {\n // Even though Android supports the unicode pattern class\n // for some reason it throws an IllegalArgumentException\n // if we pass the flag like on standard Java runtime\n //\n // We catch this and recompile without the flag (unicode should still work)\n Regex(nonUnicodePattern)\n }\n }\n\n\n /**\n * Substitute non alphanumeric characters.\n *\n * @param in The input string\n * @param sub The string to substitute with\n * @return The replaced string\n */\n fun subNonAlphaNumeric(`in`: String, sub: String): String {\n val m = r.find(`in`)\n return if (m != null) {\n r.replace(`in`, sub)\n } else {\n `in`\n }\n\n }\n }\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.Ratio\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.ratio.SimpleRatio\n\nabstract class RatioAlgorithm : BasicAlgorithm {\n\n var ratio: Ratio? = null\n\n constructor() : super() {\n this.ratio = SimpleRatio()\n }\n\n constructor(stringFunction: ToStringFunction<String>) : super(stringFunction) {}\n\n constructor(ratio: Ratio) : super() {\n this.ratio = ratio\n }\n\n\n constructor(stringFunction: ToStringFunction<String>, ratio: Ratio) : super(stringFunction) {\n this.ratio = ratio\n }\n\n abstract fun apply(s1: String, s2: String, ratio: Ratio, stringFunction: ToStringFunction<String>): Int\n\n fun with(ratio: Ratio): RatioAlgorithm {\n this.ratio = ratio\n return this\n }\n\n fun apply(s1: String, s2: String, ratio: Ratio): Int {\n return apply(s1, s2, ratio, stringFunction!!)\n }\n\n override fun apply(s1: String, s2: String, stringProcessor: ToStringFunction<String>): Int {\n return apply(s1, s2, ratio!!, stringProcessor)\n }\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\ninternal object SetUtils {\n\n fun <T> intersection(s1: Set<T>, s2: Set<T>): Set<T> {\n\n val intersection = HashSet(s1)\n intersection.retainAll(s2)\n\n return intersection\n\n }\n\n fun <T> difference(s1: Set<T>, s2: Set<T>): Set<T> {\n\n val difference = HashSet(s1)\n difference.removeAll(s2)\n\n return difference\n\n }\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.Ratio\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\n\nclass TokenSet : RatioAlgorithm() {\n\n override fun apply(s1: String, s2: String, ratio: Ratio, stringFunction: ToStringFunction<String>): Int {\n var s1Copy = s1\n var s2Copy = s2\n\n s1Copy = stringFunction.apply(s1Copy)\n s2Copy = stringFunction.apply(s2Copy)\n\n val tokens1 = Utils.tokenizeSet(s1Copy)\n val tokens2 = Utils.tokenizeSet(s2Copy)\n\n val intersection = SetUtils.intersection(tokens1, tokens2)\n val diff1to2 = SetUtils.difference(tokens1, tokens2)\n val diff2to1 = SetUtils.difference(tokens2, tokens1)\n\n val sortedInter = Utils.sortAndJoin(intersection, \" \").trim()\n val sorted1to2 = (sortedInter + \" \" + Utils.sortAndJoin(diff1to2, \" \")).trim { it <= ' ' }\n val sorted2to1 = (sortedInter + \" \" + Utils.sortAndJoin(diff2to1, \" \")).trim { it <= ' ' }\n\n val results = ArrayList<Int>()\n\n results.add(ratio.apply(sortedInter, sorted1to2))\n results.add(ratio.apply(sortedInter, sorted2to1))\n results.add(ratio.apply(sorted1to2, sorted2to1))\n\n return results.maxOrNull()!!\n\n }\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.Ratio\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\n\n\nclass TokenSort : RatioAlgorithm() {\n\n override fun apply(s1: String, s2: String, ratio: Ratio, stringFunction: ToStringFunction<String>): Int {\n\n val sorted1 = processAndSort(s1, stringFunction)\n val sorted2 = processAndSort(s2, stringFunction)\n\n return ratio.apply(sorted1, sorted2)\n\n }\n\n private fun processAndSort(input: String, stringProcessor: ToStringFunction<String>): String {\n var inputCopy = input\n\n inputCopy = stringProcessor.apply(inputCopy)\n val wordsArray = inputCopy.split(\"\\\\s+\".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()\n\n val words = listOf(*wordsArray)\n val joined = Utils.sortAndJoin(words, \" \")\n\n return joined.trim { it <= ' ' }\n\n }\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.diffutils.PriorityQueue\n\n\nobject Utils {\n\n\n internal fun tokenize(`in`: String): List<String> {\n\n return listOf(*`in`.split(\"\\\\s+\".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())\n\n }\n\n internal fun tokenizeSet(`in`: String): Set<String> {\n\n return HashSet(tokenize(`in`))\n\n }\n\n internal fun sortAndJoin(col: List<String>, sep: String): String {\n\n// Collections.sort(col)\n\n return join(col.sorted(), sep)\n\n }\n\n internal fun join(strings: List<String>, sep: String): String {\n val buf = StringBuilder(strings.size * 16)\n\n for (i in strings.indices) {\n\n if (i < strings.size) {\n buf.append(sep)\n }\n\n buf.append(strings[i])\n\n }\n\n return buf.toString().trim { it <= ' ' }\n }\n\n internal fun sortAndJoin(col: Set<String>, sep: String): String {\n\n return sortAndJoin(ArrayList(col), sep)\n\n }\n\n fun <T : Comparable<T>> findTopKHeap(arr: List<T>, k: Int): List<T> {\n val pq = PriorityQueue<T>(arr.size)\n\n for (x in arr) {\n if (pq.size < k)\n pq.add(x)\n else if (x > pq.peek()) {\n pq.poll()\n pq.add(x)\n }\n }\n val res = ArrayList<T>()\n try {\n for (i in k downTo 1) {\n res.add(pq.poll())\n }\n } catch (e: NoSuchElementException) {\n\n }\n return res\n\n }\n\n internal fun <T : Comparable<T>> max(vararg elems: T): T? {\n\n if (elems.isEmpty()) return null\n\n var best = elems[0]\n\n for (t in elems) {\n if (t.compareTo(best) > 0) {\n best = t\n }\n }\n\n return best\n\n }\n\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.partialRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.ratio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.tokenSetPartialRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.tokenSetRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.tokenSortPartialRatio\nimport com.willowtreeapps.fuzzywuzzy.diffutils.FuzzySearch.tokenSortRatio\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.round\n\nclass WeightedRatio : BasicAlgorithm() {\n\n\n override fun apply(s1: String, s2: String, stringProcessor: ToStringFunction<String>): Int {\n var s1Copy = s1\n var s2Copy = s2\n\n s1Copy = stringProcessor.apply(s1Copy)\n s2Copy = stringProcessor.apply(s2Copy)\n\n val len1 = s1Copy.length\n val len2 = s2Copy.length\n\n if (len1 == 0 || len2 == 0) {\n return 0\n }\n\n var tryPartials = TRY_PARTIALS\n val unbaseScale = UNBASE_SCALE\n var partialScale = PARTIAL_SCALE\n\n val base = ratio(s1Copy, s2Copy)\n val lenRatio = max(len1, len2).toDouble() / min(len1, len2)\n\n // if strings are similar length don't use partials\n if (lenRatio < 1.5) tryPartials = false\n\n // if one string is much shorter than the other\n if (lenRatio > 8) partialScale = .6\n\n if (tryPartials) {\n\n val partial = partialRatio(s1Copy, s2Copy) * partialScale\n val partialSor = tokenSortPartialRatio(s1Copy, s2Copy) * unbaseScale * partialScale\n val partialSet = tokenSetPartialRatio(s1Copy, s2Copy) * unbaseScale * partialScale\n\n return round(max(max(max(base.toDouble(), partial), partialSor), partialSet)).toInt()\n\n } else {\n\n val tokenSort = tokenSortRatio(s1Copy, s2Copy) * unbaseScale\n val tokenSet = tokenSetRatio(s1Copy, s2Copy) * unbaseScale\n\n return round(max(max(base.toDouble(), tokenSort), tokenSet)).toInt()\n\n }\n\n }\n\n companion object {\n\n const val UNBASE_SCALE = .95\n const val PARTIAL_SCALE = .90\n const val TRY_PARTIALS = true\n }\n\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.model\n\nclass BoundExtractedResult<T>(val referent: T, var string: String?, val score: Int, val index: Int) : Comparable<BoundExtractedResult<T>> {\n\n override fun toString(): String {\n return \"(string: $string, score: $score, index: $index)\"\n }\n\n override fun compareTo(other: BoundExtractedResult<T>): Int {\n return this.score.compareTo(other.score)\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.model\n\ndata class ExtractedResult(var string: String?, val score: Int, val index: Int) : Comparable<ExtractedResult> {\n\n override fun compareTo(other: ExtractedResult): Int {\n return this.score.compareTo(other.score)\n }\n\n override fun toString(): String {\n return \"(string: $string, score: $score, index: $index)\"\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.ratio\n\nimport com.willowtreeapps.fuzzywuzzy.Ratio\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.DiffUtils\nimport kotlin.math.round\n\n\n/**\n * Partial ratio of similarity\n */\nclass PartialRatio : Ratio {\n\n /**\n * Computes a partial ratio between the strings\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The partial ratio\n */\n override fun apply(s1: String, s2: String): Int {\n\n val shorter: String\n val longer: String\n\n if (s1.length < s2.length) {\n\n shorter = s1\n longer = s2\n\n } else {\n\n shorter = s2\n longer = s1\n\n }\n\n val matchingBlocks = DiffUtils.getMatchingBlocks(shorter, longer)\n\n val scores = ArrayList<Double>()\n\n for (mb in matchingBlocks) {\n\n val dist = mb.dpos - mb.spos\n\n val longStart = if (dist > 0) dist else 0\n var longEnd = longStart + shorter.length\n\n if (longEnd > longer.length) longEnd = longer.length\n\n val longSubstr = longer.substring(longStart, longEnd)\n\n val ratio = DiffUtils.getRatio(shorter, longSubstr)\n\n if (ratio > .995) {\n return 100\n } else {\n scores.add(ratio)\n }\n\n }\n\n return round(100 * scores.maxOrNull()!!).toInt()\n\n }\n\n override fun apply(s1: String, s2: String, sp: ToStringFunction<String>): Int {\n return apply(sp.apply(s1), sp.apply(s2))\n }\n\n\n}\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.ratio\n\nimport com.willowtreeapps.fuzzywuzzy.Ratio\nimport com.willowtreeapps.fuzzywuzzy.ToStringFunction\nimport com.willowtreeapps.fuzzywuzzy.diffutils.DiffUtils\nimport kotlin.math.round\n\nclass SimpleRatio : Ratio {\n\n /**\n * Computes a simple Levenshtein distance ratio between the strings\n *\n * @param s1 Input string\n * @param s2 Input string\n * @return The resulting ratio of similarity\n */\n override fun apply(s1: String, s2: String): Int {\n\n return round(100 * DiffUtils.getRatio(s1, s2)).toInt()\n\n }\n\n override fun apply(s1: String, s2: String, sp: ToStringFunction<String>): Int {\n return apply(sp.apply(s1), sp.apply(s2))\n }\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.structs\n\ndata class EditOp(\n\n var type: EditType? = null,\n var spos: Int = 0, // source block pos\n var dpos: Int = 0 // destination block pos\n) {\n\n override fun toString(): String {\n return type!!.name + \"(\" + spos + \",\" + dpos + \")\"\n }\n}\n\nclass MatchingBlock {\n var spos: Int = 0\n var dpos: Int = 0\n var length: Int = 0\n\n override fun toString(): String {\n return \"($spos,$dpos,$length)\"\n }\n}\n\nclass OpCode {\n\n var type: EditType? = null\n var sbeg: Int = 0\n var send: Int = 0\n var dbeg: Int = 0\n var dend: Int = 0\n\n override fun toString(): String {\n return (type!!.name + \"(\" + sbeg + \",\" + send + \",\"\n + dbeg + \",\" + dend + \")\")\n }\n}\n\nenum class EditType {\n DELETE,\n EQUAL,\n INSERT,\n REPLACE,\n KEEP\n}","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.willowtreeapps.fuzzywuzzy.diffutils.algorithms\n\n//actual val pattern: String =\"[\\\\W_]+/g\"\nactual val pattern = \"\"\"[^\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]\"\"\"\n\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.auth\n\nimport io.ktor.client.*\nimport io.ktor.client.features.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.http.auth.*\nimport io.ktor.util.*\n\n/**\n * Client authentication feature.\n * [providers] - list of auth providers to use.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class Auth(\n public val providers: MutableList<AuthProvider> = mutableListOf()\n) {\n private val alwaysSend by lazy { providers.filter { it.sendWithoutRequest } }\n\n public companion object Feature : HttpClientFeature<Auth, Auth> {\n override val key: AttributeKey<Auth> = AttributeKey(\"DigestAuth\")\n\n override fun prepare(block: Auth.() -> Unit): Auth {\n return Auth().apply(block)\n }\n\n override fun install(feature: Auth, scope: HttpClient) {\n scope.requestPipeline.intercept(HttpRequestPipeline.State) {\n for (provider in feature.alwaysSend) {\n provider.addRequestHeaders(context)\n }\n }\n\n val circuitBreaker = AttributeKey<Unit>(\"auth-request\")\n scope.feature(HttpSend)!!.intercept { origin, context ->\n if (origin.response.status != HttpStatusCode.Unauthorized) return@intercept origin\n if (origin.request.attributes.contains(circuitBreaker)) return@intercept origin\n\n var call = origin\n val candidateProviders = HashSet(feature.providers).apply { removeAll(feature.alwaysSend) }\n while (call.response.status == HttpStatusCode.Unauthorized) {\n val headerValue = call.response.headers[HttpHeaders.WWWAuthenticate] ?: return@intercept call\n val authHeader = parseAuthorizationHeader(headerValue) ?: return@intercept call\n val provider = candidateProviders.find { it.isApplicable(authHeader) } ?: return@intercept call\n candidateProviders.remove(provider)\n\n val request = HttpRequestBuilder()\n request.takeFromWithExecutionContext(context)\n provider.addRequestHeaders(request)\n request.attributes.put(circuitBreaker, Unit)\n\n call = execute(request)\n }\n return@intercept call\n }\n }\n }\n}\n\n/**\n * Install [Auth] feature.\n */\npublic fun HttpClientConfig<*>.Auth(block: Auth.() -> Unit) {\n install(Auth, block)\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.auth.providers\n\nimport io.ktor.client.features.auth.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.http.auth.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\n\n/**\n * Add [BasicAuthProvider] to client [Auth] providers.\n */\npublic fun Auth.basic(block: BasicAuthConfig.() -> Unit) {\n with(BasicAuthConfig().apply(block)) {\n providers.add(BasicAuthProvider(username, password, realm, sendWithoutRequest))\n }\n}\n\n/**\n * [BasicAuthProvider] configuration.\n */\npublic class BasicAuthConfig {\n /**\n * Required: The username of the basic auth.\n */\n public lateinit var username: String\n\n /**\n * Required: The password of the basic auth.\n */\n public lateinit var password: String\n\n /**\n * Optional: current provider realm\n */\n public var realm: String? = null\n\n /**\n * Send credentials in without waiting for [HttpStatusCode.Unauthorized].\n */\n public var sendWithoutRequest: Boolean = false\n}\n\n/**\n * Client basic authentication provider.\n */\npublic class BasicAuthProvider(\n private val username: String,\n private val password: String,\n private val realm: String? = null,\n override val sendWithoutRequest: Boolean = false\n) : AuthProvider {\n private val defaultCharset = Charsets.UTF_8\n\n override fun isApplicable(auth: HttpAuthHeader): Boolean {\n if (auth.authScheme != AuthScheme.Basic) return false\n\n if (realm != null) {\n if (auth !is HttpAuthHeader.Parameterized) return false\n return auth.parameter(\"realm\") == realm\n }\n\n return true\n }\n\n override suspend fun addRequestHeaders(request: HttpRequestBuilder) {\n request.headers[HttpHeaders.Authorization] = constructBasicAuthValue()\n }\n\n internal fun constructBasicAuthValue(): String {\n val authString = \"$username:$password\"\n val authBuf = authString.toByteArray(defaultCharset).encodeBase64()\n\n return \"Basic $authBuf\"\n }\n}\n","/*\n * Copyright 2014-2019 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.\n */\n\npackage io.ktor.client.features.auth.providers\n\nimport io.ktor.client.features.auth.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.http.auth.*\nimport io.ktor.util.*\nimport io.ktor.utils.io.charsets.*\nimport io.ktor.utils.io.core.*\nimport kotlinx.atomicfu.*\n\n/**\n * Install client [DigestAuthProvider].\n */\npublic fun Auth.digest(block: DigestAuthConfig.() -> Unit) {\n val config = DigestAuthConfig().apply(block)\n with(config) {\n providers += DigestAuthProvider(username, password, realm, algorithmName)\n }\n}\n\n/**\n * [DigestAuthProvider] configuration.\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class DigestAuthConfig {\n public var username: String = \"\"\n public var password: String = \"\"\n public var realm: String? = null\n public var algorithmName: String = \"MD5\"\n}\n\n/**\n * Client digest [AuthProvider].\n */\n@Suppress(\"KDocMissingDocumentation\")\npublic class DigestAuthProvider(\n public val username: String,\n public val password: String,\n public val realm: String?,\n public val algorithmName: String = \"MD5\"\n) : AuthProvider {\n override val sendWithoutRequest: Boolean = false\n\n private val serverNonce = atomic<String?>(null)\n private val qop = atomic<String?>(null)\n private val opaque = atomic<String?>(null)\n private val clientNonce = generateNonce()\n\n private val requestCounter = atomic(0)\n\n override fun isApplicable(auth: HttpAuthHeader): Boolean {\n if (auth !is HttpAuthHeader.Parameterized ||\n auth.parameter(\"realm\") != realm ||\n auth.authScheme != AuthScheme.Digest\n ) return false\n\n val newNonce = auth.parameter(\"nonce\") ?: return false\n val newQop = auth.parameter(\"qop\")\n val newOpaque = auth.parameter(\"opaque\")\n\n serverNonce.value = newNonce\n qop.value = newQop\n opaque.value = newOpaque\n\n return true\n }\n\n override suspend fun addRequestHeaders(request: HttpRequestBuilder) {\n val nonceCount = requestCounter.incrementAndGet()\n val methodName = request.method.value.toUpperCase()\n val url = URLBuilder().takeFrom(request.url).build()\n\n val nonce = serverNonce.value!!\n val serverOpaque = opaque.value\n val actualQop = qop.value\n\n val credential = makeDigest(\"$username:$realm:$password\")\n\n val start = hex(credential)\n val end = hex(makeDigest(\"$methodName:${url.fullPath}\"))\n val tokenSequence = if (actualQop == null) listOf(start, nonce, end) else listOf(\n start,\n nonce,\n nonceCount,\n clientNonce,\n actualQop,\n end\n )\n val token = makeDigest(tokenSequence.joinToString(\":\"))\n\n val auth = HttpAuthHeader.Parameterized(\n AuthScheme.Digest,\n linkedMapOf<String, String>().apply {\n realm?.let { this[\"realm\"] = it }\n serverOpaque?.let { this[\"opaque\"] = it }\n this[\"username\"] = username\n this[\"nonce\"] = nonce\n this[\"cnonce\"] = clientNonce\n this[\"response\"] = hex(token)\n this[\"uri\"] = url.fullPath\n actualQop?.let { this[\"qop\"] = it }\n this[\"nc\"] = nonceCount.toString()\n }\n )\n\n request.headers {\n append(HttpHeaders.Authorization, auth.render())\n }\n }\n\n private suspend fun makeDigest(data: String): ByteArray {\n val digest = Digest(algorithmName)\n return digest.build(data.toByteArray(Charsets.UTF_8))\n }\n}\n",null,null,"!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).ID3Writer=t()}(this,function(){\"use strict\";function a(e){return String(e).split(\"\").map(function(e){return e.charCodeAt(0)})}function o(e){return new Uint8Array(a(e))}function u(e){var t=new Uint8Array(2*e.length);return new Uint16Array(t.buffer).set(a(e)),t}return function(){var e=t.prototype;function t(e){if(!(e&&\"object\"==typeof e&&\"byteLength\"in e))throw new Error(\"First argument should be an instance of ArrayBuffer or Buffer\");this.arrayBuffer=e,this.padding=4096,this.frames=[],this.url=\"\"}return e._setIntegerFrame=function(e,t){var a=parseInt(t,10);this.frames.push({name:e,value:a,size:11+a.toString().length})},e._setStringFrame=function(e,t){var a=t.toString();this.frames.push({name:e,value:a,size:13+2*a.length})},e._setPictureFrame=function(e,t,a,r){var n,s,i,c=function(e){if(!e||!e.length)return null;if(255===e[0]&&216===e[1]&&255===e[2])return\"image/jpeg\";if(137===e[0]&&80===e[1]&&78===e[2]&&71===e[3])return\"image/png\";if(71===e[0]&&73===e[1]&&70===e[2])return\"image/gif\";if(87===e[8]&&69===e[9]&&66===e[10]&&80===e[11])return\"image/webp\";var t=73===e[0]&&73===e[1]&&42===e[2]&&0===e[3],a=77===e[0]&&77===e[1]&&0===e[2]&&42===e[3];return t||a?\"image/tiff\":66===e[0]&&77===e[1]?\"image/bmp\":0===e[0]&&0===e[1]&&1===e[2]&&0===e[3]?\"image/x-icon\":null}(new Uint8Array(t)),o=a.toString();if(!c)throw new Error(\"Unknown picture MIME type\");a||(r=!1),this.frames.push({name:\"APIC\",value:t,pictureType:e,mimeType:c,useUnicodeEncoding:r,description:o,size:(n=t.byteLength,s=c.length,i=o.length,11+s+1+1+(r?2+2*(i+1):i+1)+n)})},e._setLyricsFrame=function(e,t,a){var r,n,s=e.split(\"\").map(function(e){return e.charCodeAt(0)}),i=t.toString(),c=a.toString();this.frames.push({name:\"USLT\",value:c,language:s,description:i,size:(r=i.length,n=c.length,16+2*r+2+2+2*n)})},e._setCommentFrame=function(e,t,a){var r,n,s=e.split(\"\").map(function(e){return e.charCodeAt(0)}),i=t.toString(),c=a.toString();this.frames.push({name:\"COMM\",value:c,language:s,description:i,size:(r=i.length,n=c.length,16+2*r+2+2+2*n)})},e._setPrivateFrame=function(e,t){var a,r,n=e.toString();this.frames.push({name:\"PRIV\",value:t,id:n,size:(a=n.length,r=t.byteLength,10+a+1+r)})},e._setUserStringFrame=function(e,t){var a,r,n=e.toString(),s=t.toString();this.frames.push({name:\"TXXX\",description:n,value:s,size:(a=n.length,r=s.length,13+2*a+2+2+2*r)})},e._setUrlLinkFrame=function(e,t){var a=t.toString();this.frames.push({name:e,value:a,size:10+a.length})},e.setFrame=function(e,t){switch(e){case\"TPE1\":case\"TCOM\":case\"TCON\":if(!Array.isArray(t))throw new Error(e+\" frame value should be an array of strings\");var a=\"TCON\"===e?\";\":\"/\",r=t.join(a);this._setStringFrame(e,r);break;case\"TLAN\":case\"TIT1\":case\"TIT2\":case\"TIT3\":case\"TALB\":case\"TPE2\":case\"TPE3\":case\"TPE4\":case\"TRCK\":case\"TPOS\":case\"TMED\":case\"TPUB\":case\"TCOP\":case\"TKEY\":case\"TEXT\":case\"TSRC\":this._setStringFrame(e,t);break;case\"TBPM\":case\"TLEN\":case\"TDAT\":case\"TYER\":this._setIntegerFrame(e,t);break;case\"USLT\":if(t.language=t.language||\"eng\",!(\"object\"==typeof t&&\"description\"in t&&\"lyrics\"in t))throw new Error(\"USLT frame value should be an object with keys description and lyrics\");if(t.language&&!t.language.match(/[a-z]{3}/i))throw new Error(\"Language must be coded following the ISO 639-2 standards\");this._setLyricsFrame(t.language,t.description,t.lyrics);break;case\"APIC\":if(!(\"object\"==typeof t&&\"type\"in t&&\"data\"in t&&\"description\"in t))throw new Error(\"APIC frame value should be an object with keys type, data and description\");if(t.type<0||20<t.type)throw new Error(\"Incorrect APIC frame picture type\");this._setPictureFrame(t.type,t.data,t.description,!!t.useUnicodeEncoding);break;case\"TXXX\":if(!(\"object\"==typeof t&&\"description\"in t&&\"value\"in t))throw new Error(\"TXXX frame value should be an object with keys description and value\");this._setUserStringFrame(t.description,t.value);break;case\"WCOM\":case\"WCOP\":case\"WOAF\":case\"WOAR\":case\"WOAS\":case\"WORS\":case\"WPAY\":case\"WPUB\":this._setUrlLinkFrame(e,t);break;case\"COMM\":if(t.language=t.language||\"eng\",!(\"object\"==typeof t&&\"description\"in t&&\"text\"in t))throw new Error(\"COMM frame value should be an object with keys description and text\");if(t.language&&!t.language.match(/[a-z]{3}/i))throw new Error(\"Language must be coded following the ISO 639-2 standards\");this._setCommentFrame(t.language,t.description,t.text);break;case\"PRIV\":if(!(\"object\"==typeof t&&\"id\"in t&&\"data\"in t))throw new Error(\"PRIV frame value should be an object with keys id and data\");this._setPrivateFrame(t.id,t.data);break;default:throw new Error(\"Unsupported frame \"+e)}return this},e.removeTag=function(){if(!(this.arrayBuffer.byteLength<10)){var e,t,a=new Uint8Array(this.arrayBuffer),r=a[3],n=((e=[a[6],a[7],a[8],a[9]])[0]<<21)+(e[1]<<14)+(e[2]<<7)+e[3]+10;if(!(73!==(t=a)[0]||68!==t[1]||51!==t[2]||r<2||4<r))this.arrayBuffer=new Uint8Array(a.subarray(n)).buffer}},e.addTag=function(){this.removeTag();var e,t,r=[255,254],a=10+this.frames.reduce(function(e,t){return e+t.size},0)+this.padding,n=new ArrayBuffer(this.arrayBuffer.byteLength+a),s=new Uint8Array(n),i=0,c=[];return c=[73,68,51,3],s.set(c,i),i+=c.length,i++,i++,c=[(e=a-10)>>>21&(t=127),e>>>14&t,e>>>7&t,e&t],s.set(c,i),i+=c.length,this.frames.forEach(function(e){var t,a;switch(c=o(e.name),s.set(c,i),i+=c.length,t=e.size-10,c=[t>>>24&(a=255),t>>>16&a,t>>>8&a,t&a],s.set(c,i),i+=c.length,i+=2,e.name){case\"WCOM\":case\"WCOP\":case\"WOAF\":case\"WOAR\":case\"WOAS\":case\"WORS\":case\"WPAY\":case\"WPUB\":c=o(e.value),s.set(c,i),i+=c.length;break;case\"TPE1\":case\"TCOM\":case\"TCON\":case\"TLAN\":case\"TIT1\":case\"TIT2\":case\"TIT3\":case\"TALB\":case\"TPE2\":case\"TPE3\":case\"TPE4\":case\"TRCK\":case\"TPOS\":case\"TKEY\":case\"TMED\":case\"TPUB\":case\"TCOP\":case\"TEXT\":case\"TSRC\":c=[1].concat(r),s.set(c,i),i+=c.length,c=u(e.value),s.set(c,i),i+=c.length;break;case\"TXXX\":case\"USLT\":case\"COMM\":c=[1],\"USLT\"!==e.name&&\"COMM\"!==e.name||(c=c.concat(e.language)),c=c.concat(r),s.set(c,i),i+=c.length,c=u(e.description),s.set(c,i),i+=c.length,c=[0,0].concat(r),s.set(c,i),i+=c.length,c=u(e.value),s.set(c,i),i+=c.length;break;case\"TBPM\":case\"TLEN\":case\"TDAT\":case\"TYER\":i++,c=o(e.value),s.set(c,i),i+=c.length;break;case\"PRIV\":c=o(e.id),s.set(c,i),i+=c.length,i++,s.set(new Uint8Array(e.value),i),i+=e.value.byteLength;break;case\"APIC\":c=[e.useUnicodeEncoding?1:0],s.set(c,i),i+=c.length,c=o(e.mimeType),s.set(c,i),i+=c.length,c=[0,e.pictureType],s.set(c,i),i+=c.length,e.useUnicodeEncoding?(c=[].concat(r),s.set(c,i),i+=c.length,c=u(e.description),s.set(c,i),i+=c.length,i+=2):(c=o(e.description),s.set(c,i),i+=c.length,i++),s.set(new Uint8Array(e.value),i),i+=e.value.byteLength}}),i+=this.padding,s.set(new Uint8Array(this.arrayBuffer),i),this.arrayBuffer=n},e.getBlob=function(){return new Blob([this.arrayBuffer],{type:\"audio/mpeg\"})},e.getURL=function(){return this.url||(this.url=URL.createObjectURL(this.getBlob())),this.url},e.revokeURL=function(){URL.revokeObjectURL(this.url)},t}()});","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n",null,"/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.models\n\n/*\n* Callback Utility\n* */\ninterface Consumer<in T> {\n fun callback(value: T)\n}\n\n@Suppress(\"FunctionName\") // Factory function\ninline fun <T> Consumer(crossinline block: (T) -> Unit): Consumer<T> =\n object : Consumer<T> {\n override fun callback(value: T) {\n block(value)\n }\n }\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.root\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.decompose.RouterState\nimport com.arkivanov.decompose.value.Value\nimport com.arkivanov.mvikotlin.core.store.StoreFactory\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.di.FetchPlatformQueryResult\nimport com.shabinder.common.list.SpotiFlyerList\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.models.DownloadStatus\nimport com.shabinder.common.root.SpotiFlyerRoot.Dependencies\nimport com.shabinder.common.root.callbacks.SpotiFlyerRootCallBacks\nimport com.shabinder.common.root.integration.SpotiFlyerRootImpl\nimport com.shabinder.database.Database\nimport kotlinx.coroutines.flow.MutableSharedFlow\n\ninterface SpotiFlyerRoot {\n\n val routerState: Value<RouterState<*, Child>>\n\n val callBacks: SpotiFlyerRootCallBacks\n\n sealed class Child {\n data class Main(val component: SpotiFlyerMain) : Child()\n data class List(val component: SpotiFlyerList) : Child()\n }\n\n interface Dependencies {\n val storeFactory: StoreFactory\n val database: Database?\n val fetchPlatformQueryResult: FetchPlatformQueryResult\n val directories: Dir\n val showPopUpMessage: (String) -> Unit\n val downloadProgressReport: MutableSharedFlow<HashMap<String, DownloadStatus>>\n }\n}\n\n@Suppress(\"FunctionName\") // Factory function\nfun SpotiFlyerRoot(componentContext: ComponentContext, dependencies: Dependencies): SpotiFlyerRoot =\n SpotiFlyerRootImpl(componentContext, dependencies)\n","/*\n * * Copyright (c) 2021 Shabinder Singh\n * * This program is free software: you can redistribute it and/or modify\n * * it under the terms of the GNU General Public License as published by\n * * the Free Software Foundation, either version 3 of the License, or\n * * (at your option) any later version.\n * *\n * * This program is distributed in the hope that it will be useful,\n * * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * * GNU General Public License for more details.\n * *\n * * You should have received a copy of the GNU General Public License\n * * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\npackage com.shabinder.common.root.integration\n\nimport com.arkivanov.decompose.ComponentContext\nimport com.arkivanov.decompose.RouterState\nimport com.arkivanov.decompose.pop\nimport com.arkivanov.decompose.popWhile\nimport com.arkivanov.decompose.push\nimport com.arkivanov.decompose.router\nimport com.arkivanov.decompose.statekeeper.Parcelable\nimport com.arkivanov.decompose.statekeeper.Parcelize\nimport com.arkivanov.decompose.value.Value\nimport com.shabinder.common.di.Dir\nimport com.shabinder.common.list.SpotiFlyerList\nimport com.shabinder.common.main.SpotiFlyerMain\nimport com.shabinder.common.models.Consumer\nimport com.shabinder.common.root.SpotiFlyerRoot\nimport com.shabinder.common.root.SpotiFlyerRoot.Child\nimport com.shabinder.common.root.SpotiFlyerRoot.Dependencies\nimport com.shabinder.common.root.callbacks.SpotiFlyerRootCallBacks\n\ninternal class SpotiFlyerRootImpl(\n componentContext: ComponentContext,\n dependencies: Dependencies,\n) : SpotiFlyerRoot, ComponentContext by componentContext, Dependencies by dependencies {\n\n private val router =\n router<Configuration, Child>(\n initialConfiguration = Configuration.Main,\n handleBackButton = true,\n componentFactory = ::createChild\n )\n\n override val routerState: Value<RouterState<*, Child>> = router.state\n\n override val callBacks = object : SpotiFlyerRootCallBacks {\n override fun searchLink(link: String) = onMainOutput(SpotiFlyerMain.Output.Search(link))\n override fun popBackToHomeScreen() {\n router.popWhile {\n it !is Configuration.Main\n }\n }\n }\n\n private fun createChild(configuration: Configuration, componentContext: ComponentContext): Child =\n when (configuration) {\n is Configuration.Main -> Child.Main(spotiFlyerMain(componentContext))\n is Configuration.List -> Child.List(spotiFlyerList(componentContext, link = configuration.link))\n }\n\n private fun spotiFlyerMain(componentContext: ComponentContext): SpotiFlyerMain =\n SpotiFlyerMain(\n componentContext = componentContext,\n dependencies = object : SpotiFlyerMain.Dependencies, Dependencies by this {\n override val mainOutput: Consumer<SpotiFlyerMain.Output> = Consumer(::onMainOutput)\n override val dir: Dir = directories\n }\n )\n\n private fun spotiFlyerList(componentContext: ComponentContext, link: String): SpotiFlyerList =\n SpotiFlyerList(\n componentContext = componentContext,\n dependencies = object : SpotiFlyerList.Dependencies, Dependencies by this {\n override val fetchQuery = fetchPlatformQueryResult\n override val dir: Dir = directories\n override val link: String = link\n override val listOutput: Consumer<SpotiFlyerList.Output> = Consumer(::onListOutput)\n override val downloadProgressFlow = downloadProgressReport\n }\n )\n\n private fun onMainOutput(output: SpotiFlyerMain.Output) =\n when (output) {\n is SpotiFlyerMain.Output.Search -> router.push(Configuration.List(link = output.link))\n }\n\n private fun onListOutput(output: SpotiFlyerList.Output): Unit =\n when (output) {\n is SpotiFlyerList.Output.Finished -> router.pop()\n }\n\n private sealed class Configuration : Parcelable {\n @Parcelize\n object Main : Configuration()\n\n @Parcelize\n data class List(val link: String) : Configuration()\n }\n}\n",null,"(function (_, Kotlin, $module$kotlin_css, $module$kotlin_wrappers_kotlin_extensions_jsLegacy, $module$inline_style_prefixer, $module$kotlin_wrappers_kotlin_react_jsLegacy, $module$kotlin_wrappers_kotlin_react_dom_jsLegacy, $module$styled_components, $module$react, $module$react_dom, $module$kotlinx_html_js) {\n 'use strict';\n var $$importsForInline$$ = _.$$importsForInline$$ || (_.$$importsForInline$$ = {});\n var KeyframesBuilder = $module$kotlin_css.kotlinx.css.properties.KeyframesBuilder;\n var defineInlineFunction = Kotlin.defineInlineFunction;\n var wrapFunction = Kotlin.wrapFunction;\n var invoke = $module$kotlin_wrappers_kotlin_extensions_jsLegacy.kotlinext.js.invoke_dgimx$;\n var invoke_0 = $module$kotlin_wrappers_kotlin_extensions_jsLegacy.kotlinext.js.invoke_9p99ed$;\n var StyledElement = $module$kotlin_css.kotlinx.css.StyledElement;\n var throwCCE = Kotlin.throwCCE;\n var getOwnPropertyNames = $module$kotlin_wrappers_kotlin_extensions_jsLegacy.kotlinext.js.getOwnPropertyNames_s8jyvk$;\n var endsWith = Kotlin.kotlin.text.endsWith_7epoxm$;\n var to = Kotlin.kotlin.to_ujzrz7$;\n var removeSuffix = Kotlin.kotlin.text.removeSuffix_gsj5wt$;\n var lastIndexOf = Kotlin.kotlin.text.lastIndexOf_8eortd$;\n var CSSBuilder = $module$kotlin_css.kotlinx.css.CSSBuilder;\n var Unit = Kotlin.kotlin.Unit;\n var Kind_CLASS = Kotlin.Kind.CLASS;\n var ArrayList_init = Kotlin.kotlin.collections.ArrayList_init_287e2$;\n var collectionSizeOrDefault = Kotlin.kotlin.collections.collectionSizeOrDefault_ba2ldo$;\n var ArrayList_init_0 = Kotlin.kotlin.collections.ArrayList_init_ww73n8$;\n var Kind_INTERFACE = Kotlin.Kind.INTERFACE;\n var RElementBuilder = $module$kotlin_wrappers_kotlin_react_jsLegacy.react.RElementBuilder;\n var RDOMBuilder = $module$kotlin_wrappers_kotlin_react_dom_jsLegacy.react.dom.RDOMBuilder;\n var ensureNotNull = Kotlin.ensureNotNull;\n var createElement = $module$react.createElement;\n var render = $module$react_dom.render;\n var joinToString = Kotlin.kotlin.collections.joinToString_fmv235$;\n var Kind_OBJECT = Kotlin.Kind.OBJECT;\n var LinkedHashMap_init = Kotlin.kotlin.collections.LinkedHashMap_init_q3lmfv$;\n var copyToArray = Kotlin.kotlin.collections.copyToArray;\n StyledDOMBuilder.prototype = Object.create(RDOMBuilder.prototype);\n StyledDOMBuilder.prototype.constructor = StyledDOMBuilder;\n function StyleSheet(name, isStatic) {\n if (isStatic === void 0)\n isStatic = false;\n this.name = name;\n this.isStatic = isStatic;\n this.isLoaded_1mk3xi$_0 = false;\n }\n StyleSheet.prototype.dependsOn_tsq8y7$ = function (handler) {\n handler().inject();\n };\n StyleSheet.prototype.css_wopuc9$ = function (parents, builder) {\n return new CssHolder(this, parents.concat([builder]));\n };\n function StyleSheet$inject$lambda$lambda$lambda(closure$it) {\n return function ($receiver) {\n var tmp$, tmp$_0;\n tmp$ = closure$it.second.ruleSets_8be2vx$;\n for (tmp$_0 = 0; tmp$_0 !== tmp$.length; ++tmp$_0) {\n var r = tmp$[tmp$_0];\n r($receiver);\n }\n return Unit;\n };\n }\n StyleSheet.prototype.inject = function () {\n if (!this.isLoaded_1mk3xi$_0 && this.isStatic) {\n this.isLoaded_1mk3xi$_0 = true;\n var $receiver = getOwnPropertyNames(this);\n var destination = ArrayList_init();\n var tmp$;\n for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {\n var element = $receiver[tmp$];\n if (endsWith(element, '$_0'))\n destination.add_11rb$(element);\n }\n var destination_0 = ArrayList_init();\n var tmp$_0;\n tmp$_0 = destination.iterator();\n while (tmp$_0.hasNext()) {\n var element_0 = tmp$_0.next();\n if (Kotlin.isType(this[element_0], CssHolder))\n destination_0.add_11rb$(element_0);\n }\n var destination_1 = ArrayList_init_0(collectionSizeOrDefault(destination_0, 10));\n var tmp$_1;\n tmp$_1 = destination_0.iterator();\n while (tmp$_1.hasNext()) {\n var item = tmp$_1.next();\n var tmp$_2;\n destination_1.add_11rb$(to(item, Kotlin.isType(tmp$_2 = this[item], CssHolder) ? tmp$_2 : throwCCE()));\n }\n var destination_2 = ArrayList_init_0(collectionSizeOrDefault(destination_1, 10));\n var tmp$_3;\n tmp$_3 = destination_1.iterator();\n while (tmp$_3.hasNext()) {\n var item_0 = tmp$_3.next();\n destination_2.add_11rb$(to(removeSuffix(item_0.first, '$_0'), item_0.second));\n }\n var destination_3 = ArrayList_init_0(collectionSizeOrDefault(destination_2, 10));\n var tmp$_4;\n tmp$_4 = destination_2.iterator();\n while (tmp$_4.hasNext()) {\n var item_1 = tmp$_4.next();\n var tmp$_5 = destination_3.add_11rb$;\n var $receiver_0 = item_1.first;\n var endIndex = lastIndexOf(item_1.first, 95);\n tmp$_5.call(destination_3, to($receiver_0.substring(0, endIndex), item_1.second));\n }\n var keys = destination_3;\n var $receiver_1 = new CSSBuilder(void 0, false);\n var tmp$_6;\n tmp$_6 = keys.iterator();\n while (tmp$_6.hasNext()) {\n var element_1 = tmp$_6.next();\n $receiver_1.invoke_32jdrg$('.' + this.name + '-' + element_1.first, StyleSheet$inject$lambda$lambda$lambda(element_1));\n }\n var builder = $receiver_1;\n injectGlobal(builder.toString());\n }};\n StyleSheet.$metadata$ = {kind: Kind_CLASS, simpleName: 'StyleSheet', interfaces: []};\n function CssHolder(sheet, ruleSets) {\n this.sheet_0 = sheet;\n this.ruleSets_8be2vx$ = ruleSets;\n }\n function CssHolder$getValue$lambda(this$CssHolder, closure$property) {\n return function ($receiver) {\n if (this$CssHolder.sheet_0.isStatic) {\n $receiver.unaryPlus_pdl1vz$(getClassName_0(this$CssHolder.sheet_0, closure$property));\n this$CssHolder.sheet_0.inject();\n }if (!this$CssHolder.sheet_0.isStatic || !$receiver.allowClasses) {\n $receiver.styleName.add_11rb$(getClassName_0(this$CssHolder.sheet_0, closure$property));\n var $receiver_0 = this$CssHolder.ruleSets_8be2vx$;\n var tmp$;\n for (tmp$ = 0; tmp$ !== $receiver_0.length; ++tmp$) {\n var element = $receiver_0[tmp$];\n element($receiver);\n }\n }return Unit;\n };\n }\n CssHolder.prototype.getValue_n5byny$ = function (thisRef, property) {\n return CssHolder$getValue$lambda(this, property);\n };\n CssHolder.$metadata$ = {kind: Kind_CLASS, simpleName: 'CssHolder', interfaces: []};\n function getClassName_0($receiver, property) {\n return $receiver.name + '-' + property.callableName;\n }\n function StyledBuilder() {\n }\n StyledBuilder.$metadata$ = {kind: Kind_INTERFACE, simpleName: 'StyledBuilder', interfaces: []};\n function StyledDOMBuilder(factory) {\n RDOMBuilder.call(this, factory);\n this.type_redftz$_0 = this.attrs.tagName;\n this.css_en1qsi$_0 = new CSSBuilder();\n }\n Object.defineProperty(StyledDOMBuilder.prototype, 'type', {configurable: true, get: function () {\n return this.type_redftz$_0;\n }});\n Object.defineProperty(StyledDOMBuilder.prototype, 'css', {configurable: true, get: function () {\n return this.css_en1qsi$_0;\n }});\n StyledDOMBuilder.prototype.create = function () {\n return Styled_getInstance().createElement_lnfw8r$(this.type, this.css, this.props, this.childList);\n };\n StyledDOMBuilder.$metadata$ = {kind: Kind_CLASS, simpleName: 'StyledDOMBuilder', interfaces: [StyledBuilder, RDOMBuilder]};\n var globalStylesCounter;\n function injectGlobal$lambda(closure$reactElement, closure$element) {\n return function (it) {\n render(closure$reactElement, closure$element);\n return Unit;\n };\n }\n function injectGlobal(string) {\n var tmp$, tmp$_0;\n var globalStyleComponent = invoke($module$styled_components.createGlobalStyle, string, []);\n var element = Kotlin.isType(tmp$ = ensureNotNull(window.document.body).appendChild(window.document.createElement('div')), Element) ? tmp$ : throwCCE();\n element.setAttribute('id', 'sc-global-style-' + (tmp$_0 = globalStylesCounter, globalStylesCounter = tmp$_0 + 1 | 0, tmp$_0));\n var $receiver = {};\n var reactElement = createElement(globalStyleComponent, $receiver);\n Promise.resolve(Unit).then(injectGlobal$lambda(reactElement, element));\n }\n function Styled() {\n Styled_instance = this;\n this.cache_0 = LinkedHashMap_init();\n }\n function Styled$wrap$lambda$lambda(it) {\n return it._css;\n }\n Styled.prototype.wrap_0 = function (type) {\n var $receiver = this.cache_0;\n var tmp$;\n var value = $receiver.get_11rb$(type);\n if (value == null) {\n var answer = invoke_0(rawStyled(type), [Styled$wrap$lambda$lambda]);\n $receiver.put_xwzc9p$(type, answer);\n tmp$ = answer;\n } else {\n tmp$ = value;\n }\n return tmp$;\n };\n Styled.prototype.createElement_lnfw8r$ = function (type, css, props, children) {\n var tmp$ = !css.rules.isEmpty();\n if (!tmp$) {\n tmp$ = !css.multiRules.isEmpty();\n }var tmp$_0 = tmp$;\n if (!tmp$_0) {\n tmp$_0 = !css.declarations.isEmpty();\n }if (tmp$_0) {\n var wrappedType = this.wrap_0(type);\n var styledProps = props;\n styledProps._css = css.toString();\n if (!css.classes.isEmpty()) {\n styledProps.className = joinToString(css.classes, ' ');\n }if (!css.styleName.isEmpty()) {\n styledProps['data-style'] = joinToString(css.styleName, ' ');\n }return createElement.apply(null, [wrappedType, styledProps].concat(copyToArray(children)));\n } else {\n if (!css.classes.isEmpty()) {\n props.className = joinToString(css.classes, ' ');\n }return createElement.apply(null, [type, props].concat(copyToArray(children)));\n }\n };\n Styled.$metadata$ = {kind: Kind_OBJECT, simpleName: 'Styled', interfaces: []};\n var Styled_instance = null;\n function Styled_getInstance() {\n if (Styled_instance === null) {\n new Styled();\n }return Styled_instance;\n }\n function rawStyled(target) {\n return $module$styled_components.default(target);\n }\n var package$styled = _.styled || (_.styled = {});\n $$importsForInline$$['kotlin-css'] = $module$kotlin_css;\n $$importsForInline$$['kotlin-wrappers-kotlin-extensions-jsLegacy'] = $module$kotlin_wrappers_kotlin_extensions_jsLegacy;\n package$styled.StyleSheet = StyleSheet;\n package$styled.CssHolder = CssHolder;\n package$styled.StyledBuilder = StyledBuilder;\n package$styled.StyledDOMBuilder = StyledDOMBuilder;\n package$styled.injectGlobal_61zpoe$ = injectGlobal;\n Object.defineProperty(package$styled, 'Styled', {get: Styled_getInstance});\n $$importsForInline$$['kotlinx-html-js'] = $module$kotlinx_html_js;\n package$styled.rawStyled_za3rmp$ = rawStyled;\n globalStylesCounter = 0;\n return _;\n}(module.exports, require('kotlin'), require('kotlin-css'), require('kotlin-wrappers-kotlin-extensions-jsLegacy'), require('inline-style-prefixer'), require('kotlin-wrappers-kotlin-react-jsLegacy'), require('kotlin-wrappers-kotlin-react-dom-jsLegacy'), require('styled-components'), require('react'), require('react-dom'), require('kotlinx-html-js')));\n\n//# sourceMappingURL=kotlin-wrappers-kotlin-styled-jsLegacy.js.map\n","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","/** @license React v17.0.2\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),m=require(\"object-assign\"),r=require(\"scheduler\");function y(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(y(227));var ba=new Set,ca={};function da(a,b){ea(a,b);ea(a+\"Capture\",b)}\nfunction ea(a,b){ca[a]=b;for(a=0;a<b.length;a++)ba.add(b[a])}\nvar fa=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ha=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ia=Object.prototype.hasOwnProperty,\nja={},ka={};function la(a){if(ia.call(ka,a))return!0;if(ia.call(ja,a))return!1;if(ha.test(a))return ka[a]=!0;ja[a]=!0;return!1}function ma(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction na(a,b,c,d){if(null===b||\"undefined\"===typeof b||ma(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(na(b,c,e,d)&&(c=null),d||null===e?la(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar ra=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,sa=60103,ta=60106,ua=60107,wa=60108,xa=60114,ya=60109,za=60110,Aa=60112,Ba=60113,Ca=60120,Da=60115,Ea=60116,Fa=60121,Ga=60128,Ha=60129,Ia=60130,Ja=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var E=Symbol.for;sa=E(\"react.element\");ta=E(\"react.portal\");ua=E(\"react.fragment\");wa=E(\"react.strict_mode\");xa=E(\"react.profiler\");ya=E(\"react.provider\");za=E(\"react.context\");Aa=E(\"react.forward_ref\");Ba=E(\"react.suspense\");Ca=E(\"react.suspense_list\");Da=E(\"react.memo\");Ea=E(\"react.lazy\");Fa=E(\"react.block\");E(\"react.scope\");Ga=E(\"react.opaque.id\");Ha=E(\"react.debug_trace_mode\");Ia=E(\"react.offscreen\");Ja=E(\"react.legacy_hidden\")}\nvar Ka=\"function\"===typeof Symbol&&Symbol.iterator;function La(a){if(null===a||\"object\"!==typeof a)return null;a=Ka&&a[Ka]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var Ma;function Na(a){if(void 0===Ma)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);Ma=b&&b[1]||\"\"}return\"\\n\"+Ma+a}var Oa=!1;\nfunction Pa(a,b){if(!a||Oa)return\"\";Oa=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(k){var d=k}Reflect.construct(a,[],b)}else{try{b.call()}catch(k){d=k}a.call(b.prototype)}else{try{throw Error();}catch(k){d=k}a()}}catch(k){if(k&&d&&\"string\"===typeof k.stack){for(var e=k.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h])return\"\\n\"+e[g].replace(\" at new \",\" at \");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Na(a):\"\"}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na(\"Lazy\");case 13:return Na(\"Suspense\");case 19:return Na(\"SuspenseList\");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return\"\"}}\nfunction Ra(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ua:return\"Fragment\";case ta:return\"Portal\";case xa:return\"Profiler\";case wa:return\"StrictMode\";case Ba:return\"Suspense\";case Ca:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case za:return(a.displayName||\"Context\")+\".Consumer\";case ya:return(a._context.displayName||\"Context\")+\".Provider\";case Aa:var b=a.render;b=b.displayName||b.name||\"\";\nreturn a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,\"checked\",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function db(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(y(91));return m({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(y(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var kb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction lb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function mb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?lb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar nb,ob=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||\"innerHTML\"in a)a.innerHTML=b;else{nb=nb||document.createElement(\"div\");nb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(\"\"+b).trim():b+\"px\"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=sb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(a,b,c,d,e){return a(b,c,d,e)}function Ib(){}var Jb=Gb,Kb=!1,Lb=!1;function Mb(){if(null!==zb||null!==Ab)Ib(),Fb()}\nfunction Nb(a,b,c){if(Lb)return a(b,c);Lb=!0;try{return Jb(a,b,c)}finally{Lb=!1,Mb()}}\nfunction Ob(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(y(231,b,typeof c));return c}var Pb=!1;if(fa)try{var Qb={};Object.defineProperty(Qb,\"passive\",{get:function(){Pb=!0}});window.addEventListener(\"test\",Qb,Qb);window.removeEventListener(\"test\",Qb,Qb)}catch(a){Pb=!1}function Rb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(n){this.onError(n)}}var Sb=!1,Tb=null,Ub=!1,Vb=null,Wb={onError:function(a){Sb=!0;Tb=a}};function Xb(a,b,c,d,e,f,g,h,k){Sb=!1;Tb=null;Rb.apply(Wb,arguments)}\nfunction Yb(a,b,c,d,e,f,g,h,k){Xb.apply(this,arguments);if(Sb){if(Sb){var l=Tb;Sb=!1;Tb=null}else throw Error(y(198));Ub||(Ub=!0,Vb=l)}}function Zb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function $b(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function ac(a){if(Zb(a)!==a)throw Error(y(188));}\nfunction bc(a){var b=a.alternate;if(!b){b=Zb(a);if(null===b)throw Error(y(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return ac(e),a;if(f===d)return ac(e),b;f=f.sibling}throw Error(y(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(y(189));}}if(c.alternate!==d)throw Error(y(190));}if(3!==c.tag)throw Error(y(188));return c.stateNode.current===c?a:b}function cc(a){a=bc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction dc(a,b){for(var c=a.alternate;null!==b;){if(b===a||b===c)return!0;b=b.return}return!1}var ec,fc,gc,hc,ic=!1,jc=[],kc=null,lc=null,mc=null,nc=new Map,oc=new Map,pc=[],qc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction rc(a,b,c,d,e){return{blockedOn:a,domEventName:b,eventSystemFlags:c|16,nativeEvent:e,targetContainers:[d]}}function sc(a,b){switch(a){case \"focusin\":case \"focusout\":kc=null;break;case \"dragenter\":case \"dragleave\":lc=null;break;case \"mouseover\":case \"mouseout\":mc=null;break;case \"pointerover\":case \"pointerout\":nc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":oc.delete(b.pointerId)}}\nfunction tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=rc(b,c,d,e,f),null!==b&&(b=Cb(b),null!==b&&fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction uc(a,b,c,d,e){switch(b){case \"focusin\":return kc=tc(kc,a,b,c,d,e),!0;case \"dragenter\":return lc=tc(lc,a,b,c,d,e),!0;case \"mouseover\":return mc=tc(mc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;nc.set(f,tc(nc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,oc.set(f,tc(oc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction vc(a){var b=wc(a.target);if(null!==b){var c=Zb(b);if(null!==c)if(b=c.tag,13===b){if(b=$b(c),null!==b){a.blockedOn=b;hc(a.lanePriority,function(){r.unstable_runWithPriority(a.priority,function(){gc(c)})});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c)return b=Cb(c),null!==b&&fc(b),a.blockedOn=c,!1;b.shift()}return!0}function zc(a,b,c){xc(a)&&c.delete(b)}\nfunction Ac(){for(ic=!1;0<jc.length;){var a=jc[0];if(null!==a.blockedOn){a=Cb(a.blockedOn);null!==a&&ec(a);break}for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c){a.blockedOn=c;break}b.shift()}null===a.blockedOn&&jc.shift()}null!==kc&&xc(kc)&&(kc=null);null!==lc&&xc(lc)&&(lc=null);null!==mc&&xc(mc)&&(mc=null);nc.forEach(zc);oc.forEach(zc)}\nfunction Bc(a,b){a.blockedOn===b&&(a.blockedOn=null,ic||(ic=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ac)))}\nfunction Cc(a){function b(b){return Bc(b,a)}if(0<jc.length){Bc(jc[0],a);for(var c=1;c<jc.length;c++){var d=jc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==kc&&Bc(kc,a);null!==lc&&Bc(lc,a);null!==mc&&Bc(mc,a);nc.forEach(b);oc.forEach(b);for(c=0;c<pc.length;c++)d=pc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<pc.length&&(c=pc[0],null===c.blockedOn);)vc(c),null===c.blockedOn&&pc.shift()}\nfunction Dc(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Ec={animationend:Dc(\"Animation\",\"AnimationEnd\"),animationiteration:Dc(\"Animation\",\"AnimationIteration\"),animationstart:Dc(\"Animation\",\"AnimationStart\"),transitionend:Dc(\"Transition\",\"TransitionEnd\")},Fc={},Gc={};\nfa&&(Gc=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Ec.animationend.animation,delete Ec.animationiteration.animation,delete Ec.animationstart.animation),\"TransitionEvent\"in window||delete Ec.transitionend.transition);function Hc(a){if(Fc[a])return Fc[a];if(!Ec[a])return a;var b=Ec[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Gc)return Fc[a]=b[c];return a}\nvar Ic=Hc(\"animationend\"),Jc=Hc(\"animationiteration\"),Kc=Hc(\"animationstart\"),Lc=Hc(\"transitionend\"),Mc=new Map,Nc=new Map,Oc=[\"abort\",\"abort\",Ic,\"animationEnd\",Jc,\"animationIteration\",Kc,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\n\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Lc,\"transitionEnd\",\"waiting\",\"waiting\"];function Pc(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1];e=\"on\"+(e[0].toUpperCase()+e.slice(1));Nc.set(d,b);Mc.set(d,e);da(e,[d])}}var Qc=r.unstable_now;Qc();var F=8;\nfunction Rc(a){if(0!==(1&a))return F=15,1;if(0!==(2&a))return F=14,2;if(0!==(4&a))return F=13,4;var b=24&a;if(0!==b)return F=12,b;if(0!==(a&32))return F=11,32;b=192&a;if(0!==b)return F=10,b;if(0!==(a&256))return F=9,256;b=3584&a;if(0!==b)return F=8,b;if(0!==(a&4096))return F=7,4096;b=4186112&a;if(0!==b)return F=6,b;b=62914560&a;if(0!==b)return F=5,b;if(a&67108864)return F=4,67108864;if(0!==(a&134217728))return F=3,134217728;b=805306368&a;if(0!==b)return F=2,b;if(0!==(1073741824&a))return F=1,1073741824;\nF=8;return a}function Sc(a){switch(a){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function Tc(a){switch(a){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(y(358,a));}}\nfunction Uc(a,b){var c=a.pendingLanes;if(0===c)return F=0;var d=0,e=0,f=a.expiredLanes,g=a.suspendedLanes,h=a.pingedLanes;if(0!==f)d=f,e=F=15;else if(f=c&134217727,0!==f){var k=f&~g;0!==k?(d=Rc(k),e=F):(h&=f,0!==h&&(d=Rc(h),e=F))}else f=c&~g,0!==f?(d=Rc(f),e=F):0!==h&&(d=Rc(h),e=F);if(0===d)return 0;d=31-Vc(d);d=c&((0>d?0:1<<d)<<1)-1;if(0!==b&&b!==d&&0===(b&g)){Rc(b);if(e<=F)return b;F=e}b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-Vc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction Wc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function Xc(a,b){switch(a){case 15:return 1;case 14:return 2;case 12:return a=Yc(24&~b),0===a?Xc(10,b):a;case 10:return a=Yc(192&~b),0===a?Xc(8,b):a;case 8:return a=Yc(3584&~b),0===a&&(a=Yc(4186112&~b),0===a&&(a=512)),a;case 2:return b=Yc(805306368&~b),0===b&&(b=268435456),b}throw Error(y(358,a));}function Yc(a){return a&-a}function Zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0<jc.length&&-1<qc.indexOf(a))a=rc(null,a,b,c,d),jc.push(a);else{var f=yc(a,b,c,d);if(null===f)e&&sc(a,d);else{if(e){if(-1<qc.indexOf(a)){a=rc(f,a,b,c,d);jc.push(a);return}if(uc(f,a,b,c,d))return;sc(a,d)}jd(a,b,d,null,c)}}}}\nfunction yc(a,b,c,d){var e=xb(d);e=wc(e);if(null!==e){var f=Zb(e);if(null===f)e=null;else{var g=f.tag;if(13===g){e=$b(f);if(null!==e)return e;e=null}else if(3===g){if(f.stateNode.hydrate)return 3===f.tag?f.stateNode.containerInfo:null;e=null}else f!==e&&(e=null)}}jd(a,b,d,e,c);return null}var kd=null,ld=null,md=null;\nfunction nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}function od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}m(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=m({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=m({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=m({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=m({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=m({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=m({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=m({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=m({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=m({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=m({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=m({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=m({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=fa&&\"CompositionEvent\"in window,be=null;fa&&\"documentMode\"in document&&(be=document.documentMode);var ce=fa&&\"TextEvent\"in window&&!be,de=fa&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(fa){var xe;if(fa){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));a=re;if(Kb)a(b);else{Kb=!0;try{Gb(a,b)}finally{Kb=!1,Mb()}}}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge,Ie=Object.prototype.hasOwnProperty;\nfunction Je(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!Ie.call(b,c[d])||!He(a[c[d]],b[c[d]]))return!1;return!0}function Ke(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Le(a,b){var c=Ke(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Pe=fa&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nPc(\"cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),\n0);Pc(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);Pc(Oc,2);for(var Ve=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),We=0;We<Ve.length;We++)Nc.set(Ve[We],0);ea(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);\nea(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ea(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);ea(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);da(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));da(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));da(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);da(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));\nda(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));da(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var Xe=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Ye=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(Xe));\nfunction Ze(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Yb(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}}}if(Ub)throw a=Vb,Ub=!1,Vb=null,a;}\nfunction G(a,b){var c=$e(b),d=a+\"__bubble\";c.has(d)||(af(b,a,2,!1),c.add(d))}var bf=\"_reactListening\"+Math.random().toString(36).slice(2);function cf(a){a[bf]||(a[bf]=!0,ba.forEach(function(b){Ye.has(b)||df(b,!1,a,null);df(b,!0,a,null)}))}\nfunction df(a,b,c,d){var e=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,f=c;\"selectionchange\"===a&&9!==c.nodeType&&(f=c.ownerDocument);if(null!==d&&!b&&Ye.has(a)){if(\"scroll\"!==a)return;e|=2;f=d}var g=$e(f),h=a+\"__\"+(b?\"capture\":\"bubble\");g.has(h)||(b&&(e|=4),af(f,a,e,b),g.add(h))}\nfunction af(a,b,c,d){var e=Nc.get(b);switch(void 0===e?2:e){case 0:e=gd;break;case 1:e=id;break;default:e=hd}c=e.bind(null,b,c,a);e=void 0;!Pb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction jd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Nb(function(){var d=f,e=xb(c),g=[];\na:{var h=Mc.get(a);if(void 0!==h){var k=td,x=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":x=\"focus\";k=Fd;break;case \"focusout\":x=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case Ic:case Jc:case Kc:k=Hd;break;case Lc:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var w=0!==(b&4),z=!w&&\"scroll\"===a,u=w?null!==h?h+\"Capture\":null:h;w=[];for(var t=d,q;null!==\nt;){q=t;var v=q.stateNode;5===q.tag&&null!==v&&(q=v,null!==u&&(v=Ob(t,u),null!=v&&w.push(ef(t,v,q))));if(z)break;t=t.return}0<w.length&&(h=new k(h,x,null,c,e),g.push({event:h,listeners:w}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&0===(b&16)&&(x=c.relatedTarget||c.fromElement)&&(wc(x)||x[ff]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(x=c.relatedTarget||c.toElement,k=d,x=x?wc(x):null,null!==\nx&&(z=Zb(x),x!==z||5!==x.tag&&6!==x.tag))x=null}else k=null,x=d;if(k!==x){w=Bd;v=\"onMouseLeave\";u=\"onMouseEnter\";t=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)w=Td,v=\"onPointerLeave\",u=\"onPointerEnter\",t=\"pointer\";z=null==k?h:ue(k);q=null==x?h:ue(x);h=new w(v,t+\"leave\",k,c,e);h.target=z;h.relatedTarget=q;v=null;wc(e)===d&&(w=new w(u,t+\"enter\",x,c,e),w.target=q,w.relatedTarget=z,v=w);z=v;if(k&&x)b:{w=k;u=x;t=0;for(q=w;q;q=gf(q))t++;q=0;for(v=u;v;v=gf(v))q++;for(;0<t-q;)w=gf(w),t--;for(;0<q-t;)u=\ngf(u),q--;for(;t--;){if(w===u||null!==u&&w===u.alternate)break b;w=gf(w);u=gf(u)}w=null}else w=null;null!==k&&hf(g,h,k,w,!1);null!==x&&null!==z&&hf(g,z,x,w,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var J=ve;else if(me(h))if(we)J=Fe;else{J=De;var K=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(J=Ee);if(J&&(J=J(a,d))){ne(g,J,c,e);break a}K&&K(a,h,d);\"focusout\"===a&&(K=h._wrapperState)&&\nK.controlled&&\"number\"===h.type&&bb(h,\"number\",h.value)}K=d?ue(d):window;switch(a){case \"focusin\":if(me(K)||\"true\"===K.contentEditable)Qe=K,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var Q;if(ae)b:{switch(a){case \"compositionstart\":var L=\"onCompositionStart\";break b;case \"compositionend\":L=\"onCompositionEnd\";break b;\ncase \"compositionupdate\":L=\"onCompositionUpdate\";break b}L=void 0}else ie?ge(a,c)&&(L=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(L=\"onCompositionStart\");L&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==L?\"onCompositionEnd\"===L&&ie&&(Q=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),K=oe(d,L),0<K.length&&(L=new Ld(L,a,null,c,e),g.push({event:L,listeners:K}),Q?L.data=Q:(Q=he(c),null!==Q&&(L.data=Q))));if(Q=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),0<d.length&&(e=new Ld(\"onBeforeInput\",\n\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=Q)}se(g,b)})}function ef(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Ob(a,c),null!=f&&d.unshift(ef(a,f,e)),f=Ob(a,b),null!=f&&d.push(ef(a,f,e)));a=a.return}return d}function gf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction hf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Ob(c,f),null!=k&&g.unshift(ef(c,k,h))):e||(k=Ob(c,f),null!=k&&g.push(ef(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}function jf(){}var kf=null,lf=null;function mf(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction nf(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var of=\"function\"===typeof setTimeout?setTimeout:void 0,pf=\"function\"===typeof clearTimeout?clearTimeout:void 0;function qf(a){1===a.nodeType?a.textContent=\"\":9===a.nodeType&&(a=a.body,null!=a&&(a.textContent=\"\"))}\nfunction rf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}function sf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var tf=0;function uf(a){return{$$typeof:Ga,toString:a,valueOf:a}}var vf=Math.random().toString(36).slice(2),wf=\"__reactFiber$\"+vf,xf=\"__reactProps$\"+vf,ff=\"__reactContainer$\"+vf,yf=\"__reactEvents$\"+vf;\nfunction wc(a){var b=a[wf];if(b)return b;for(var c=a.parentNode;c;){if(b=c[ff]||c[wf]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=sf(a);null!==a;){if(c=a[wf])return c;a=sf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[wf]||a[ff];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(y(33));}function Db(a){return a[xf]||null}\nfunction $e(a){var b=a[yf];void 0===b&&(b=a[yf]=new Set);return b}var zf=[],Af=-1;function Bf(a){return{current:a}}function H(a){0>Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||\"Unknown\",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});ag=null}catch(c){throw null!==ag&&(ag=ag.slice(a+1)),Of(Uf,ig),c;}finally{cg=!1}}}var kg=ra.ReactCurrentBatchConfig;function lg(a,b){if(a&&a.defaultProps){b=m({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var mg=Bf(null),ng=null,og=null,pg=null;function qg(){pg=og=ng=null}\nfunction rg(a){var b=mg.current;H(mg);a.type._context._currentValue=b}function sg(a,b){for(;null!==a;){var c=a.alternate;if((a.childLanes&b)===b)if(null===c||(c.childLanes&b)===b)break;else c.childLanes|=b;else a.childLanes|=b,null!==c&&(c.childLanes|=b);a=a.return}}function tg(a,b){ng=a;pg=og=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(ug=!0),a.firstContext=null)}\nfunction vg(a,b){if(pg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)pg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===og){if(null===ng)throw Error(y(308));og=b;ng.dependencies={lanes:0,firstContext:b,responders:null}}else og=og.next=b}return a._currentValue}var wg=!1;function xg(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}\nfunction yg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function zg(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}function Ag(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction Bg(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction Cg(a,b,c,d){var e=a.updateQueue;wg=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var n=a.alternate;if(null!==n){n=n.updateQueue;var A=n.lastBaseUpdate;A!==g&&(null===A?n.firstBaseUpdate=l:A.next=l,n.lastBaseUpdate=k)}}if(null!==f){A=e.baseState;g=0;n=l=k=null;do{h=f.lane;var p=f.eventTime;if((d&h)===h){null!==n&&(n=n.next={eventTime:p,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,\nnext:null});a:{var C=a,x=f;h=b;p=c;switch(x.tag){case 1:C=x.payload;if(\"function\"===typeof C){A=C.call(p,A,h);break a}A=C;break a;case 3:C.flags=C.flags&-4097|64;case 0:C=x.payload;h=\"function\"===typeof C?C.call(p,A,h):C;if(null===h||void 0===h)break a;A=m({},A,h);break a;case 2:wg=!0}}null!==f.callback&&(a.flags|=32,h=e.effects,null===h?e.effects=[f]:h.push(f))}else p={eventTime:p,lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===n?(l=n=p,k=A):n=n.next=p,g|=h;f=f.next;if(null===\nf)if(h=e.shared.pending,null===h)break;else f=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}while(1);null===n&&(k=A);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=n;Dg|=g;a.lanes=g;a.memoizedState=A}}function Eg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(y(191,e));e.call(d)}}}var Fg=(new aa.Component).refs;\nfunction Gg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:m({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Kg={isMounted:function(a){return(a=a._reactInternals)?Zb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=Hg(),d=Ig(a),e=zg(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=\nb);Ag(a,e);Jg(a,d,c)}};function Lg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Je(c,d)||!Je(e,f):!0}\nfunction Mg(a,b,c){var d=!1,e=Cf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=vg(f):(e=Ff(b)?Df:M.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Ef(a,e):Cf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Kg;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Ng(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Kg.enqueueReplaceState(b,b.state,null)}\nfunction Og(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Fg;xg(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=vg(f):(f=Ff(b)?Df:M.current,e.context=Ef(a,f));Cg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Gg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Kg.enqueueReplaceState(e,e.state,null),Cg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4)}var Pg=Array.isArray;\nfunction Qg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(y(309));var d=c.stateNode}if(!d)throw Error(y(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Fg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(y(284));if(!c._owner)throw Error(y(290,a));}return a}\nfunction Rg(a,b){if(\"textarea\"!==a.type)throw Error(y(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b));}\nfunction Sg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.flags=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Tg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags=2,\nc):d;b.flags=2;return c}function g(b){a&&null===b.alternate&&(b.flags=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Ug(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Qg(a,b,c),d.return=a,d;d=Vg(c.type,c.key,c.props,null,a.mode,d);d.ref=Qg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=\nWg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function n(a,b,c,d,f){if(null===b||7!==b.tag)return b=Xg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function A(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Ug(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case sa:return c=Vg(b.type,b.key,b.props,null,a.mode,c),c.ref=Qg(a,null,b),c.return=a,c;case ta:return b=Wg(b,a.mode,c),b.return=a,b}if(Pg(b)||La(b))return b=Xg(b,\na.mode,c,null),b.return=a,b;Rg(a,b)}return null}function p(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case sa:return c.key===e?c.type===ua?n(a,b,c.props.children,d,e):k(a,b,c,d):null;case ta:return c.key===e?l(a,b,c,d):null}if(Pg(c)||La(c))return null!==e?null:n(a,b,c,d,null);Rg(a,c)}return null}function C(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=a.get(c)||\nnull,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case sa:return a=a.get(null===d.key?c:d.key)||null,d.type===ua?n(b,a,d.props.children,e,d.key):k(b,a,d,e);case ta:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Pg(d)||La(d))return a=a.get(c)||null,n(b,a,d,e,null);Rg(b,d)}return null}function x(e,g,h,k){for(var l=null,t=null,u=g,z=g=0,q=null;null!==u&&z<h.length;z++){u.index>z?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;z<h.length;z++)u=A(e,h[z],k),null!==u&&(g=f(u,g,z),null===t?l=u:t.sibling=u,t=u);return l}for(u=d(e,u);z<h.length;z++)q=C(u,e,z,h[z],k),null!==q&&(a&&null!==q.alternate&&u.delete(null===q.key?z:q.key),g=f(q,g,z),null===t?l=q:t.sibling=q,t=q);a&&u.forEach(function(a){return b(e,a)});return l}function w(e,g,h,k){var l=La(h);if(\"function\"!==typeof l)throw Error(y(150));h=l.call(h);if(null==\nh)throw Error(y(151));for(var t=l=null,u=g,z=g=0,q=null,n=h.next();null!==u&&!n.done;z++,n=h.next()){u.index>z?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||\"Component\"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;a<th.length;a++)th[a]._workInProgressVersionPrimary=null;th.length=0}var vh=ra.ReactCurrentDispatcher,wh=ra.ReactCurrentBatchConfig,xh=0,R=null,S=null,T=null,yh=!1,zh=!1;function Ah(){throw Error(y(321));}function Bh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Ch(a,b,c,d,e,f){xh=f;R=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;vh.current=null===a||null===a.memoizedState?Dh:Eh;a=c(d,e);if(zh){f=0;do{zh=!1;if(!(25>f))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0<h;){var k=31-Vc(h),v=1<<k;d[k]|=a;h&=~v}}},[c,b,d]);h.useEffect(function(){return d(b._source,function(){var a=p.getSnapshot,c=p.setSnapshot;try{c(a(b._source));var d=Ig(w);e.mutableReadLanes|=d&e.pendingLanes}catch(q){c(function(){throw q;})}})},[b,d]);He(C,c)&&He(x,b)&&He(A,d)||(a={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:n},a.dispatch=l=Oh.bind(null,R,a),k.queue=a,k.baseQueue=null,n=Mh(e,b,c),k.memoizedState=k.baseState=n);return n}\nfunction Ph(a,b,c){var d=Ih();return Nh(d,a,b,c)}function Qh(a){var b=Hh();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:a};a=a.dispatch=Oh.bind(null,R,a);return[b.memoizedState,a]}\nfunction Rh(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=R.updateQueue;null===b?(b={lastEffect:null},R.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function Sh(a){var b=Hh();a={current:a};return b.memoizedState=a}function Th(){return Ih().memoizedState}function Uh(a,b,c,d){var e=Hh();R.flags|=a;e.memoizedState=Rh(1|b,c,void 0,void 0===d?null:d)}\nfunction Vh(a,b,c,d){var e=Ih();d=void 0===d?null:d;var f=void 0;if(null!==S){var g=S.memoizedState;f=g.destroy;if(null!==d&&Bh(d,g.deps)){Rh(b,c,f,d);return}}R.flags|=a;e.memoizedState=Rh(1|b,c,f,d)}function Wh(a,b){return Uh(516,4,a,b)}function Xh(a,b){return Vh(516,4,a,b)}function Yh(a,b){return Vh(4,2,a,b)}function Zh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}\nfunction $h(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Vh(4,2,Zh.bind(null,b,a),c)}function ai(){}function bi(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}function ci(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}\nfunction di(a,b){var c=eg();gg(98>c?98:c,function(){a(!0)});gg(97<c?97:c,function(){var c=wh.transition;wh.transition=1;try{a(!1),b()}finally{wh.transition=c}})}\nfunction Oh(a,b,c){var d=Hg(),e=Ig(a),f={lane:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.pending;null===g?f.next=f:(f.next=g.next,g.next=f);b.pending=f;g=a.alternate;if(a===R||null!==g&&g===R)zh=yh=!0;else{if(0===a.lanes&&(null===g||0===g.lanes)&&(g=b.lastRenderedReducer,null!==g))try{var h=b.lastRenderedState,k=g(h,c);f.eagerReducer=g;f.eagerState=k;if(He(k,h))return}catch(l){}finally{}Jg(a,e,d)}}\nvar Gh={readContext:vg,useCallback:Ah,useContext:Ah,useEffect:Ah,useImperativeHandle:Ah,useLayoutEffect:Ah,useMemo:Ah,useReducer:Ah,useRef:Ah,useState:Ah,useDebugValue:Ah,useDeferredValue:Ah,useTransition:Ah,useMutableSource:Ah,useOpaqueIdentifier:Ah,unstable_isNewReconciler:!1},Dh={readContext:vg,useCallback:function(a,b){Hh().memoizedState=[a,void 0===b?null:b];return a},useContext:vg,useEffect:Wh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Uh(4,2,Zh.bind(null,\nb,a),c)},useLayoutEffect:function(a,b){return Uh(4,2,a,b)},useMemo:function(a,b){var c=Hh();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Hh();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=Oh.bind(null,R,a);return[d.memoizedState,a]},useRef:Sh,useState:Qh,useDebugValue:ai,useDeferredValue:function(a){var b=Qh(a),c=b[0],d=b[1];Wh(function(){var b=wh.transition;\nwh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Qh(!1),b=a[0];a=di.bind(null,a[1]);Sh(a);return[a,b]},useMutableSource:function(a,b,c){var d=Hh();d.memoizedState={refs:{getSnapshot:b,setSnapshot:null},source:a,subscribe:c};return Nh(d,a,b,c)},useOpaqueIdentifier:function(){if(lh){var a=!1,b=uf(function(){a||(a=!0,c(\"r:\"+(tf++).toString(36)));throw Error(y(355));}),c=Qh(b)[1];0===(R.mode&2)&&(R.flags|=516,Rh(5,function(){c(\"r:\"+(tf++).toString(36))},\nvoid 0,null));return b}b=\"r:\"+(tf++).toString(36);Qh(b);return b},unstable_isNewReconciler:!1},Eh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Kh,useRef:Th,useState:function(){return Kh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Kh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Kh(Jh)[0];return[Th().current,\na]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Kh(Jh)[0]},unstable_isNewReconciler:!1},Fh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Lh,useRef:Th,useState:function(){return Lh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Lh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Lh(Jh)[0];return[Th().current,\na]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Lh(Jh)[0]},unstable_isNewReconciler:!1},ei=ra.ReactCurrentOwner,ug=!1;function fi(a,b,c,d){b.child=null===a?Zg(b,null,c,d):Yg(b,a.child,c,d)}function gi(a,b,c,d,e){c=c.render;var f=b.ref;tg(b,e);d=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,d,e);return b.child}\nfunction ii(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!ji(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ki(a,b,g,d,e,f);a=Vg(c.type,null,d,b,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(0===(e&f)&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Je,c(e,d)&&a.ref===b.ref))return hi(a,b,f);b.flags|=1;a=Tg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ki(a,b,c,d,e,f){if(null!==a&&Je(a.memoizedProps,d)&&a.ref===b.ref)if(ug=!1,0!==(f&e))0!==(a.flags&16384)&&(ug=!0);else return b.lanes=a.lanes,hi(a,b,f);return li(a,b,c,d,f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode||\"unstable-defer-without-hiding\"===d.mode)if(0===(b.mode&4))b.memoizedState={baseLanes:0},ni(b,c);else if(0!==(c&1073741824))b.memoizedState={baseLanes:0},ni(b,null!==f?f.baseLanes:c);else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a},ni(b,a),null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,ni(b,d);fi(a,b,e,c);return b.child}\nfunction oi(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=128}function li(a,b,c,d,e){var f=Ff(c)?Df:M.current;f=Ef(b,f);tg(b,e);c=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,c,e);return b.child}\nfunction pi(a,b,c,d,e){if(Ff(c)){var f=!0;Jf(b)}else f=!1;tg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Mg(b,c,d),Og(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=vg(l):(l=Ff(c)?Df:M.current,l=Ef(b,l));var n=c.getDerivedStateFromProps,A=\"function\"===typeof n||\"function\"===typeof g.getSnapshotBeforeUpdate;A||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ng(b,g,d,l);wg=!1;var p=b.memoizedState;g.state=p;Cg(b,d,g,e);k=b.memoizedState;h!==d||p!==k||N.current||wg?(\"function\"===typeof n&&(Gg(b,c,n,d),k=b.memoizedState),(h=wg||Lg(b,c,h,d,p,k,l))?(A||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.flags|=4)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4),d=!1)}else{g=b.stateNode;yg(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:lg(b.type,h);g.props=l;A=b.pendingProps;p=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=vg(k):(k=Ff(c)?Df:M.current,k=Ef(b,k));var C=c.getDerivedStateFromProps;(n=\"function\"===typeof C||\n\"function\"===typeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==A||p!==k)&&Ng(b,g,d,k);wg=!1;p=b.memoizedState;g.state=p;Cg(b,d,g,e);var x=b.memoizedState;h!==A||p!==x||N.current||wg?(\"function\"===typeof C&&(Gg(b,c,C,d),x=b.memoizedState),(l=wg||Lg(b,c,l,d,p,x,k))?(n||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||\nh===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),d=!1)}return qi(a,b,c,d,f,e)}\nfunction qi(a,b,c,d,e,f){oi(a,b);var g=0!==(b.flags&64);if(!d&&!g)return e&&Kf(b,c,!1),hi(a,b,f);d=b.stateNode;ei.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Yg(b,a.child,null,f),b.child=Yg(b,null,h,f)):fi(a,b,h,f);b.memoizedState=d.state;e&&Kf(b,c,!0);return b.child}function ri(a){var b=a.stateNode;b.pendingContext?Hf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Hf(a,b.context,!1);eh(a,b.containerInfo)}\nvar si={dehydrated:null,retryLane:0};\nfunction ti(a,b,c){var d=b.pendingProps,e=P.current,f=!1,g;(g=0!==(b.flags&64))||(g=null!==a&&null===a.memoizedState?!1:0!==(e&2));g?(f=!0,b.flags&=-65):null!==a&&null===a.memoizedState||void 0===d.fallback||!0===d.unstable_avoidThisFallback||(e|=1);I(P,e&1);if(null===a){void 0!==d.fallback&&ph(b);a=d.children;e=d.fallback;if(f)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=si,a;if(\"number\"===typeof d.unstable_expectedLoadTime)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},\nb.memoizedState=si,b.lanes=33554432,a;c=vi({mode:\"visible\",children:a},b.mode,c,null);c.return=b;return b.child=c}if(null!==a.memoizedState){if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:\n{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}function ui(a,b,c,d){var e=a.mode,f=a.child;b={mode:\"hidden\",children:b};0===(e&2)&&null!==f?(f.childLanes=0,f.pendingProps=b):f=vi(b,e,0,null);c=Xg(c,e,d,null);f.return=a;c.return=a;f.sibling=c;a.child=f;return c}\nfunction xi(a,b,c,d){var e=a.child;a=e.sibling;c=Tg(e,{mode:\"visible\",children:c});0===(b.mode&2)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(a.nextEffect=null,a.flags=8,b.firstEffect=b.lastEffect=a);return b.child=c}\nfunction wi(a,b,c,d,e){var f=b.mode,g=a.child;a=g.sibling;var h={mode:\"hidden\",children:c};0===(f&2)&&b.child!==g?(c=b.child,c.childLanes=0,c.pendingProps=h,g=c.lastEffect,null!==g?(b.firstEffect=c.firstEffect,b.lastEffect=g,g.nextEffect=null):b.firstEffect=b.lastEffect=null):c=Tg(g,h);null!==a?d=Tg(a,d):(d=Xg(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function yi(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);sg(a.return,b)}\nfunction zi(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailMode=e,g.lastEffect=f)}\nfunction Ai(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;fi(a,b,d.children,c);d=P.current;if(0!==(d&2))d=d&1|2,b.flags|=64;else{if(null!==a&&0!==(a.flags&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&yi(a,c);else if(19===a.tag)yi(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(P,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ih(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);zi(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ih(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}zi(b,!0,c,null,f,b.lastEffect);break;case \"together\":zi(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction hi(a,b,c){null!==a&&(b.dependencies=a.dependencies);Dg|=b.lanes;if(0!==(c&b.childLanes)){if(null!==a&&b.child!==a.child)throw Error(y(153));if(null!==b.child){a=b.child;c=Tg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Tg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}return null}var Bi,Ci,Di,Ei;\nBi=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Ci=function(){};\nDi=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;dh(ah.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"option\":e=eb(a,e);d=eb(a,d);f=[];break;case \"select\":e=m({},e,{value:void 0});d=m({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=jf)}vb(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===\nl){var h=e[l];for(g in h)h.hasOwnProperty(g)&&(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ca.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||\n(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,c)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ca.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&G(\"scroll\",a),f||h===k||(f=[])):\"object\"===typeof k&&null!==k&&k.$$typeof===Ga?k.toString():(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",\nc);var l=f;if(b.updateQueue=l)b.flags|=4}};Ei=function(a,b,c,d){c!==d&&(b.flags|=4)};function Fi(a,b){if(!lh)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction Gi(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return Ff(b.type)&&Gf(),null;case 3:fh();H(N);H(M);uh();d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)rh(b)?b.flags|=4:d.hydrate||(b.flags|=256);Ci(b);return null;case 5:hh(b);var e=dh(ch.current);c=b.type;if(null!==a&&null!=b.stateNode)Di(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=128);else{if(!d){if(null===\nb.stateNode)throw Error(y(166));return null}a=dh(ah.current);if(rh(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[wf]=b;d[xf]=f;switch(c){case \"dialog\":G(\"cancel\",d);G(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<Xe.length;a++)G(Xe[a],d);break;case \"source\":G(\"error\",d);break;case \"img\":case \"image\":case \"link\":G(\"error\",d);G(\"load\",d);break;case \"details\":G(\"toggle\",d);break;case \"input\":Za(d,f);G(\"invalid\",d);break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};G(\"invalid\",d);break;case \"textarea\":hb(d,f),G(\"invalid\",d)}vb(c,f);a=null;for(var g in f)f.hasOwnProperty(g)&&(e=f[g],\"children\"===g?\"string\"===typeof e?d.textContent!==e&&(a=[\"children\",e]):\"number\"===typeof e&&d.textContent!==\"\"+e&&(a=[\"children\",\"\"+e]):ca.hasOwnProperty(g)&&null!=e&&\"onScroll\"===g&&G(\"scroll\",d));switch(c){case \"input\":Va(d);cb(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=\njf)}d=a;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;a===kb.html&&(a=lb(c));a===kb.html?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case \"dialog\":G(\"cancel\",a);G(\"close\",a);\ne=d;break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<Xe.length;e++)G(Xe[e],a);e=d;break;case \"source\":G(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":G(\"error\",a);G(\"load\",a);e=d;break;case \"details\":G(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);G(\"invalid\",a);break;case \"option\":e=eb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=m({},d,{value:void 0});G(\"invalid\",a);break;case \"textarea\":hb(a,d);e=\ngb(a,d);G(\"invalid\",a);break;default:e=d}vb(c,e);var h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?tb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&ob(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==c||\"\"!==k)&&pb(a,k):\"number\"===typeof k&&pb(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ca.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&G(\"scroll\",a):null!=k&&qa(a,f,k,g))}switch(c){case \"input\":Va(a);cb(a,d,!1);\nbreak;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=jf)}mf(c,d)&&(b.flags|=4)}null!==b.ref&&(b.flags|=128)}return null;case 6:if(a&&null!=b.stateNode)Ei(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(y(166));\nc=dh(ch.current);dh(ah.current);rh(b)?(d=b.stateNode,c=b.memoizedProps,d[wf]=b,d.nodeValue!==c&&(b.flags|=4)):(d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[wf]=b,b.stateNode=d)}return null;case 13:H(P);d=b.memoizedState;if(0!==(b.flags&64))return b.lanes=c,b;d=null!==d;c=!1;null===a?void 0!==b.memoizedProps.fallback&&rh(b):c=null!==a.memoizedState;if(d&&!c&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(P.current&1))0===V&&(V=3);else{if(0===V||3===V)V=\n4;null===U||0===(Dg&134217727)&&0===(Hi&134217727)||Ii(U,W)}if(d||c)b.flags|=4;return null;case 4:return fh(),Ci(b),null===a&&cf(b.stateNode.containerInfo),null;case 10:return rg(b),null;case 17:return Ff(b.type)&&Gf(),null;case 19:H(P);d=b.memoizedState;if(null===d)return null;f=0!==(b.flags&64);g=d.rendering;if(null===g)if(f)Fi(d,!1);else{if(0!==V||null!==a&&0!==(a.flags&64))for(a=b.child;null!==a;){g=ih(a);if(null!==g){b.flags|=64;Fi(d,!1);f=g.updateQueue;null!==f&&(b.updateQueue=f,b.flags|=4);\nnull===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=2,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null,g=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,\nf.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;I(P,P.current&1|2);return b.child}a=a.sibling}null!==d.tail&&O()>Ji&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&\"unstable-defer-without-hiding\"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c=\"\",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi=\"function\"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}var Ui=\"function\"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,\"function\"===typeof d.setProperty?d.setProperty(\"display\",\"none\",\"important\"):d.display=\"none\";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null;d.style.display=sb(\"display\",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?\"\":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&\"function\"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,\"\"),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;e<f.length;e+=\n2){var g=f[e],h=f[e+1];\"style\"===g?tb(c,h):\"dangerouslySetInnerHTML\"===g?ob(c,h):\"children\"===g?pb(c,h):qa(c,g,h,b)}switch(a){case \"input\":ab(c,d);break;case \"textarea\":ib(c,d);break;case \"select\":a=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,f=d.value,null!=f?fb(c,!!d.multiple,f,!1):a!==!!d.multiple&&(null!=d.defaultValue?fb(c,!!d.multiple,d.defaultValue,!0):fb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(y(162));b.stateNode.nodeValue=\nb.memoizedProps;return;case 3:c=b.stateNode;c.hydrate&&(c.hydrate=!1,Cc(c.containerInfo));return;case 12:return;case 13:null!==b.memoizedState&&(jj=O(),aj(b.child,!0));kj(b);return;case 19:kj(b);return;case 17:return;case 23:case 24:aj(b,null!==b.memoizedState);return}throw Error(y(163));}function kj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ui);b.forEach(function(b){var d=lj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction mj(a,b){return null!==a&&(a=a.memoizedState,null===a||null!==a.dehydrated)?(b=b.memoizedState,null!==b&&null===b.dehydrated):!1}var nj=Math.ceil,oj=ra.ReactCurrentDispatcher,pj=ra.ReactCurrentOwner,X=0,U=null,Y=null,W=0,qj=0,rj=Bf(0),V=0,sj=null,tj=0,Dg=0,Hi=0,uj=0,vj=null,jj=0,Ji=Infinity;function wj(){Ji=O()+500}var Z=null,Qi=!1,Ri=null,Ti=null,xj=!1,yj=null,zj=90,Aj=[],Bj=[],Cj=null,Dj=0,Ej=null,Fj=-1,Gj=0,Hj=0,Ij=null,Jj=!1;function Hg(){return 0!==(X&48)?O():-1!==Fj?Fj:Fj=O()}\nfunction Ig(a){a=a.mode;if(0===(a&2))return 1;if(0===(a&4))return 99===eg()?1:2;0===Gj&&(Gj=tj);if(0!==kg.transition){0!==Hj&&(Hj=null!==vj?vj.pendingLanes:0);a=Gj;var b=4186112&~Hj;b&=-b;0===b&&(a=4186112&~a,b=a&-a,0===b&&(b=8192));return b}a=eg();0!==(X&4)&&98===a?a=Xc(12,Gj):(a=Sc(a),a=Xc(a,Gj));return a}\nfunction Jg(a,b,c){if(50<Dj)throw Dj=0,Ej=null,Error(y(185));a=Kj(a,b);if(null===a)return null;$c(a,b,c);a===U&&(Hi|=b,4===V&&Ii(a,W));var d=eg();1===b?0!==(X&8)&&0===(X&48)?Lj(a):(Mj(a,c),0===X&&(wj(),ig())):(0===(X&4)||98!==d&&99!==d||(null===Cj?Cj=new Set([a]):Cj.add(a)),Mj(a,c));vj=a}function Kj(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}\nfunction Mj(a,b){for(var c=a.callbackNode,d=a.suspendedLanes,e=a.pingedLanes,f=a.expirationTimes,g=a.pendingLanes;0<g;){var h=31-Vc(g),k=1<<h,l=f[h];if(-1===l){if(0===(k&d)||0!==(k&e)){l=b;Rc(k);var n=F;f[h]=10<=n?l+250:6<=n?l+5E3:-1}}else l<=b&&(a.expiredLanes|=k);g&=~k}d=Uc(a,a===U?W:0);b=F;if(0===d)null!==c&&(c!==Zf&&Pf(c),a.callbackNode=null,a.callbackPriority=0);else{if(null!==c){if(a.callbackPriority===b)return;c!==Zf&&Pf(c)}15===b?(c=Lj.bind(null,a),null===ag?(ag=[c],bg=Of(Uf,jg)):ag.push(c),\nc=Zf):14===b?c=hg(99,Lj.bind(null,a)):(c=Tc(b),c=hg(c,Nj.bind(null,a)));a.callbackPriority=b;a.callbackNode=c}}\nfunction Nj(a){Fj=-1;Hj=Gj=0;if(0!==(X&48))throw Error(y(327));var b=a.callbackNode;if(Oj()&&a.callbackNode!==b)return null;var c=Uc(a,a===U?W:0);if(0===c)return null;var d=c;var e=X;X|=16;var f=Pj();if(U!==a||W!==d)wj(),Qj(a,d);do try{Rj();break}catch(h){Sj(a,h)}while(1);qg();oj.current=f;X=e;null!==Y?d=0:(U=null,W=0,d=V);if(0!==(tj&Hi))Qj(a,0);else if(0!==d){2===d&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),c=Wc(a),0!==c&&(d=Tj(a,c)));if(1===d)throw b=sj,Qj(a,0),Ii(a,c),Mj(a,O()),b;a.finishedWork=\na.current.alternate;a.finishedLanes=c;switch(d){case 0:case 1:throw Error(y(345));case 2:Uj(a);break;case 3:Ii(a,c);if((c&62914560)===c&&(d=jj+500-O(),10<d)){if(0!==Uc(a,0))break;e=a.suspendedLanes;if((e&c)!==c){Hg();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=of(Uj.bind(null,a),d);break}Uj(a);break;case 4:Ii(a,c);if((c&4186112)===c)break;d=a.eventTimes;for(e=-1;0<c;){var g=31-Vc(c);f=1<<g;g=d[g];g>e&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10<c){a.timeoutHandle=of(Uj.bind(null,a),c);break}Uj(a);break;case 5:Uj(a);break;default:throw Error(y(329));}}Mj(a,O());return a.callbackNode===b?Nj.bind(null,a):null}function Ii(a,b){b&=~uj;b&=~Hi;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-Vc(b),d=1<<c;a[c]=-1;b&=~d}}\nfunction Lj(a){if(0!==(X&48))throw Error(y(327));Oj();if(a===U&&0!==(a.expiredLanes&W)){var b=W;var c=Tj(a,b);0!==(tj&Hi)&&(b=Uc(a,b),c=Tj(a,b))}else b=Uc(a,0),c=Tj(a,b);0!==a.tag&&2===c&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),b=Wc(a),0!==b&&(c=Tj(a,b)));if(1===c)throw c=sj,Qj(a,0),Ii(a,b),Mj(a,O()),c;a.finishedWork=a.current.alternate;a.finishedLanes=b;Uj(a);Mj(a,O());return null}\nfunction Vj(){if(null!==Cj){var a=Cj;Cj=null;a.forEach(function(a){a.expiredLanes|=24&a.pendingLanes;Mj(a,O())})}ig()}function Wj(a,b){var c=X;X|=1;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function Xj(a,b){var c=X;X&=-2;X|=8;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function ni(a,b){I(rj,qj);qj|=b;tj|=b}function Ki(){qj=rj.current;H(rj)}\nfunction Qj(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,pf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Gf();break;case 3:fh();H(N);H(M);uh();break;case 5:hh(d);break;case 4:fh();break;case 13:H(P);break;case 19:H(P);break;case 10:rg(d);break;case 23:case 24:Ki()}c=c.return}U=a;Y=Tg(a.current,null);W=qj=tj=b;V=0;sj=null;uj=Hi=Dg=0}\nfunction Sj(a,b){do{var c=Y;try{qg();vh.current=Gh;if(yh){for(var d=R.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}yh=!1}xh=0;T=S=R=null;zh=!1;pj.current=null;if(null===c||null===c.return){V=1;sj=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=W;h.flags|=2048;h.firstEffect=h.lastEffect=null;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k;if(0===(h.mode&2)){var n=h.alternate;n?(h.updateQueue=n.updateQueue,h.memoizedState=n.memoizedState,h.lanes=n.lanes):\n(h.updateQueue=null,h.memoizedState=null)}var A=0!==(P.current&1),p=g;do{var C;if(C=13===p.tag){var x=p.memoizedState;if(null!==x)C=null!==x.dehydrated?!0:!1;else{var w=p.memoizedProps;C=void 0===w.fallback?!1:!0!==w.unstable_avoidThisFallback?!0:A?!1:!0}}if(C){var z=p.updateQueue;if(null===z){var u=new Set;u.add(l);p.updateQueue=u}else z.add(l);if(0===(p.mode&2)){p.flags|=64;h.flags|=16384;h.flags&=-2981;if(1===h.tag)if(null===h.alternate)h.tag=17;else{var t=zg(-1,1);t.tag=2;Ag(h,t)}h.lanes|=1;break a}k=\nvoid 0;h=b;var q=f.pingCache;null===q?(q=f.pingCache=new Oi,k=new Set,q.set(l,k)):(k=q.get(l),void 0===k&&(k=new Set,q.set(l,k)));if(!k.has(h)){k.add(h);var v=Yj.bind(null,f,l,h);l.then(v,v)}p.flags|=4096;p.lanes=b;break a}p=p.return}while(null!==p);k=Error((Ra(h.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&(\"function\"===typeof K.getDerivedStateFromError||null!==Q&&\"function\"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1<b.flags&&(null!==\na.lastEffect?a.lastEffect.nextEffect=b:a.firstEffect=b,a.lastEffect=b))}else{c=Li(b);if(null!==c){c.flags&=2047;Y=c;return}null!==a&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===V&&(V=5)}function Uj(a){var b=eg();gg(99,dk.bind(null,a,b));return null}\nfunction dk(a,b){do Oj();while(null!==yj);if(0!==(X&48))throw Error(y(327));var c=a.finishedWork;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(y(177));a.callbackNode=null;var d=c.lanes|c.childLanes,e=d,f=a.pendingLanes&~e;a.pendingLanes=e;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=e;a.mutableReadLanes&=e;a.entangledLanes&=e;e=a.entanglements;for(var g=a.eventTimes,h=a.expirationTimes;0<f;){var k=31-Vc(f),l=1<<k;e[k]=0;g[k]=-1;h[k]=-1;f&=~l}null!==\nCj&&0===(d&24)&&Cj.has(a)&&Cj.delete(a);a===U&&(Y=U=null,W=0);1<c.flags?null!==c.lastEffect?(c.lastEffect.nextEffect=c,d=c.firstEffect):d=c:d=c.firstEffect;if(null!==d){e=X;X|=32;pj.current=null;kf=fd;g=Ne();if(Oe(g)){if(\"selectionStart\"in g)h={start:g.selectionStart,end:g.selectionEnd};else a:if(h=(h=g.ownerDocument)&&h.defaultView||window,(l=h.getSelection&&h.getSelection())&&0!==l.rangeCount){h=l.anchorNode;f=l.anchorOffset;k=l.focusNode;l=l.focusOffset;try{h.nodeType,k.nodeType}catch(va){h=null;\nbreak a}var n=0,A=-1,p=-1,C=0,x=0,w=g,z=null;b:for(;;){for(var u;;){w!==h||0!==f&&3!==w.nodeType||(A=n+f);w!==k||0!==l&&3!==w.nodeType||(p=n+l);3===w.nodeType&&(n+=w.nodeValue.length);if(null===(u=w.firstChild))break;z=w;w=u}for(;;){if(w===g)break b;z===h&&++C===f&&(A=n);z===k&&++x===l&&(p=n);if(null!==(u=w.nextSibling))break;w=z;z=w.parentNode}w=u}h=-1===A||-1===p?null:{start:A,end:p}}else h=null;h=h||{start:0,end:0}}else h=null;lf={focusedElem:g,selectionRange:h};fd=!1;Ij=null;Jj=!1;Z=d;do try{ek()}catch(va){if(null===\nZ)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Ij=null;Z=d;do try{for(g=a;null!==Z;){var t=Z.flags;t&16&&pb(Z.stateNode,\"\");if(t&128){var q=Z.alternate;if(null!==q){var v=q.ref;null!==v&&(\"function\"===typeof v?v(null):v.current=null)}}switch(t&1038){case 2:fj(Z);Z.flags&=-3;break;case 6:fj(Z);Z.flags&=-3;ij(Z.alternate,Z);break;case 1024:Z.flags&=-1025;break;case 1028:Z.flags&=-1025;ij(Z.alternate,Z);break;case 4:ij(Z.alternate,Z);break;case 8:h=Z;cj(g,h);var J=h.alternate;dj(h);null!==\nJ&&dj(J)}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);v=lf;q=Ne();t=v.focusedElem;g=v.selectionRange;if(q!==t&&t&&t.ownerDocument&&Me(t.ownerDocument.documentElement,t)){null!==g&&Oe(t)&&(q=g.start,v=g.end,void 0===v&&(v=q),\"selectionStart\"in t?(t.selectionStart=q,t.selectionEnd=Math.min(v,t.value.length)):(v=(q=t.ownerDocument||document)&&q.defaultView||window,v.getSelection&&(v=v.getSelection(),h=t.textContent.length,J=Math.min(g.start,h),g=void 0===\ng.end?J:Math.min(g.end,h),!v.extend&&J>g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});\"function\"===typeof t.focus&&t.focus();for(t=\n0;t<q.length;t++)v=q[t],v.element.scrollLeft=v.left,v.element.scrollTop=v.top}fd=!!kf;lf=kf=null;a.current=c;Z=d;do try{for(t=a;null!==Z;){var K=Z.flags;K&36&&Yi(t,Z.alternate,Z);if(K&128){q=void 0;var Q=Z.ref;if(null!==Q){var L=Z.stateNode;switch(Z.tag){case 5:q=L;break;default:q=L}\"function\"===typeof Q?Q(q):Q.current=q}}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Z=null;$f();X=e}else a.current=c;if(xj)xj=!1,yj=a,zj=b;else for(Z=d;null!==Z;)b=\nZ.nextEffect,Z.nextEffect=null,Z.flags&8&&(K=Z,K.sibling=null,K.stateNode=null),Z=b;d=a.pendingLanes;0===d&&(Ti=null);1===d?a===Ej?Dj++:(Dj=0,Ej=a):Dj=0;c=c.stateNode;if(Mf&&\"function\"===typeof Mf.onCommitFiberRoot)try{Mf.onCommitFiberRoot(Lf,c,void 0,64===(c.current.flags&64))}catch(va){}Mj(a,O());if(Qi)throw Qi=!1,a=Ri,Ri=null,a;if(0!==(X&8))return null;ig();return null}\nfunction ek(){for(;null!==Z;){var a=Z.alternate;Jj||null===Ij||(0!==(Z.flags&8)?dc(Z,Ij)&&(Jj=!0):13===Z.tag&&mj(a,Z)&&dc(Z,Ij)&&(Jj=!0));var b=Z.flags;0!==(b&256)&&Xi(a,Z);0===(b&512)||xj||(xj=!0,hg(97,function(){Oj();return null}));Z=Z.nextEffect}}function Oj(){if(90!==zj){var a=97<zj?97:zj;zj=90;return gg(a,fk)}return!1}function $i(a,b){Aj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}function Zi(a,b){Bj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}\nfunction fk(){if(null===yj)return!1;var a=yj;yj=null;if(0!==(X&48))throw Error(y(331));var b=X;X|=32;var c=Bj;Bj=[];for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1],g=e.destroy;e.destroy=void 0;if(\"function\"===typeof g)try{g()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}c=Aj;Aj=[];for(d=0;d<c.length;d+=2){e=c[d];f=c[d+1];try{var h=e.create;e.destroy=h()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}for(h=a.current.firstEffect;null!==h;)a=h.nextEffect,h.nextEffect=null,h.flags&8&&(h.sibling=\nnull,h.stateNode=null),h=a;X=b;ig();return!0}function gk(a,b,c){b=Mi(c,b);b=Pi(a,b,1);Ag(a,b);b=Hg();a=Kj(a,1);null!==a&&($c(a,1,b),Mj(a,b))}\nfunction Wi(a,b){if(3===a.tag)gk(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){gk(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d))){a=Mi(b,a);var e=Si(c,a,1);Ag(c,e);e=Hg();c=Kj(c,1);if(null!==c)$c(c,1,e),Mj(c,e);else if(\"function\"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d)))try{d.componentDidCatch(b,a)}catch(f){}break}}c=c.return}}\nfunction Yj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=Hg();a.pingedLanes|=a.suspendedLanes&c;U===a&&(W&c)===c&&(4===V||3===V&&(W&62914560)===W&&500>O()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e<a.length;e+=2)f=a[e],f._workInProgressVersionPrimary=a[e+1],th.push(f);c=Zg(b,null,d,c);for(b.child=c;c;)c.flags=c.flags&-3|1024,c=c.sibling}else fi(a,b,d,c),sh();b=b.child}return b;case 5:return gh(b),null===a&&\nph(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,nf(d,e)?g=null:null!==f&&nf(d,f)&&(b.flags|=16),oi(a,b),fi(a,b,g,c),b.child;case 6:return null===a&&ph(b),null;case 13:return ti(a,b,c);case 4:return eh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Yg(b,null,d,c):fi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),gi(a,b,d,e,c);case 7:return fi(a,b,b.pendingProps,c),b.child;case 8:return fi(a,b,b.pendingProps.children,\nc),b.child;case 12:return fi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(mg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=He(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!N.current){b=hi(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=\nk.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=zg(-1,c&-c),l.tag=2,Ag(h,l));h.lanes|=c;l=h.alternate;null!==l&&(l.lanes|=c);sg(h.return,c);k.lanes|=c;break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}fi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,tg(b,c),e=vg(e,\nf.unstable_observedBits),d=d(e),b.flags|=1,fi(a,b,d,c),b.child;case 14:return e=b.type,f=lg(e,b.pendingProps),f=lg(e.type,f),ii(a,b,e,f,d,c);case 15:return ki(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,Ff(d)?(a=!0,Jf(b)):a=!1,tg(b,c),Mg(b,d,e),Og(b,d,e,c),qi(null,b,d,!0,a,c);case 19:return Ai(a,b,c);case 23:return mi(a,b,c);case 24:return mi(a,b,c)}throw Error(y(156,b.tag));\n};function ik(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.flags=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childLanes=this.lanes=0;this.alternate=null}function nh(a,b,c,d){return new ik(a,b,c,d)}function ji(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction hk(a){if(\"function\"===typeof a)return ji(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Aa)return 11;if(a===Da)return 14}return 2}\nfunction Tg(a,b){var c=a.alternate;null===c?(c=nh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Vg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ji(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ua:return Xg(c.children,e,f,b);case Ha:g=8;e|=16;break;case wa:g=8;e|=1;break;case xa:return a=nh(12,c,b,e|8),a.elementType=xa,a.type=xa,a.lanes=f,a;case Ba:return a=nh(13,c,b,e),a.type=Ba,a.elementType=Ba,a.lanes=f,a;case Ca:return a=nh(19,c,b,e),a.elementType=Ca,a.lanes=f,a;case Ia:return vi(c,e,f,b);case Ja:return a=nh(24,c,b,e),a.elementType=Ja,a.lanes=f,a;default:if(\"object\"===\ntypeof a&&null!==a)switch(a.$$typeof){case ya:g=10;break a;case za:g=9;break a;case Aa:g=11;break a;case Da:g=14;break a;case Ea:g=16;d=null;break a;case Fa:g=22;break a}throw Error(y(130,null==a?a:typeof a,\"\"));}b=nh(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Xg(a,b,c,d){a=nh(7,a,d,b);a.lanes=c;return a}function vi(a,b,c,d){a=nh(23,a,d,b);a.elementType=Ia;a.lanes=c;return a}function Ug(a,b,c){a=nh(6,a,null,b);a.lanes=c;return a}\nfunction Wg(a,b,c){b=nh(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction jk(a,b,c){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=0;this.eventTimes=Zc(0);this.expirationTimes=Zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Zc(0);this.mutableSourceEagerHydrationData=null}\nfunction kk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ta,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction lk(a,b,c,d){var e=b.current,f=Hg(),g=Ig(e);a:if(c){c=c._reactInternals;b:{if(Zb(c)!==c||1!==c.tag)throw Error(y(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(Ff(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(y(171));}if(1===c.tag){var k=c.type;if(Ff(k)){c=If(c,k,h);break a}}c=h}else c=Cf;null===b.context?b.context=c:b.pendingContext=c;b=zg(f,g);b.payload={element:a};d=void 0===d?null:d;null!==\nd&&(b.callback=d);Ag(e,b);Jg(e,g,f);return g}function mk(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function nk(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function ok(a,b){nk(a,b);(a=a.alternate)&&nk(a,b)}function pk(){return null}\nfunction qk(a,b,c){var d=null!=c&&null!=c.hydrationOptions&&c.hydrationOptions.mutableSources||null;c=new jk(a,b,null!=c&&!0===c.hydrate);b=nh(3,null,null,2===b?7:1===b?3:0);c.current=b;b.stateNode=c;xg(b);a[ff]=c.current;cf(8===a.nodeType?a.parentNode:a);if(d)for(a=0;a<d.length;a++){b=d[a];var e=b._getVersion;e=e(b._source);null==c.mutableSourceEagerHydrationData?c.mutableSourceEagerHydrationData=[b,e]:c.mutableSourceEagerHydrationData.push(b,e)}this._internalRoot=c}\nqk.prototype.render=function(a){lk(a,this._internalRoot,null,null)};qk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;lk(null,a,null,function(){b[ff]=null})};function rk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}\nfunction sk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new qk(a,0,b?{hydrate:!0}:void 0)}\nfunction tk(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=mk(g);h.call(a)}}lk(b,g,a,e)}else{f=c._reactRootContainer=sk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=mk(g);k.call(a)}}Xj(function(){lk(b,g,a,e)})}return mk(g)}ec=function(a){if(13===a.tag){var b=Hg();Jg(a,4,b);ok(a,4)}};fc=function(a){if(13===a.tag){var b=Hg();Jg(a,67108864,b);ok(a,67108864)}};\ngc=function(a){if(13===a.tag){var b=Hg(),c=Ig(a);Jg(a,c,b);ok(a,c)}};hc=function(a,b){return b()};\nyb=function(a,b,c){switch(b){case \"input\":ab(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(y(90));Wa(d);ab(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Wj;\nHb=function(a,b,c,d,e){var f=X;X|=4;try{return gg(98,a.bind(null,b,c,d,e))}finally{X=f,0===X&&(wj(),ig())}};Ib=function(){0===(X&49)&&(Vj(),Oj())};Jb=function(a,b){var c=X;X|=2;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}};function uk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!rk(b))throw Error(y(200));return kk(a,b,null,c)}var vk={Events:[Cb,ue,Db,Eb,Fb,Oj,{current:!1}]},wk={findFiberByHostInstance:wc,bundleType:0,version:\"17.0.2\",rendererPackageName:\"react-dom\"};\nvar xk={bundleType:wk.bundleType,version:wk.version,rendererPackageName:wk.rendererPackageName,rendererConfig:wk.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ra.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=cc(a);return null===a?null:a.stateNode},findFiberByHostInstance:wk.findFiberByHostInstance||\npk,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var yk=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!yk.isDisabled&&yk.supportsFiber)try{Lf=yk.inject(xk),Mf=yk}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=vk;exports.createPortal=uk;\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(y(188));throw Error(y(268,Object.keys(a)));}a=cc(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a,b){var c=X;if(0!==(c&48))return a(b);X|=1;try{if(a)return gg(99,a.bind(null,b))}finally{X=c,ig()}};exports.hydrate=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!0,c)};\nexports.render=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!rk(a))throw Error(y(40));return a._reactRootContainer?(Xj(function(){tk(null,null,a,!1,function(){a._reactRootContainer=null;a[ff]=null})}),!0):!1};exports.unstable_batchedUpdates=Wj;exports.unstable_createPortal=function(a,b){return uk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!rk(c))throw Error(y(200));if(null==a||void 0===a._reactInternals)throw Error(y(38));return tk(a,b,c,!1,d)};exports.version=\"17.0.2\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):D=0<a?Math.floor(1E3/a):5};var F=new MessageChannel,G=F.port2;F.port1.onmessage=function(){if(null!==B){var a=exports.unstable_now();E=a+D;try{B(!0,a)?G.postMessage(null):(A=!1,B=null)}catch(b){throw G.postMessage(null),b;}}else A=!1};f=function(a){B=a;A||(A=!0,G.postMessage(null))};g=function(a,b){C=\nx(function(){a(exports.unstable_now())},b)};h=function(){y(C);C=-1}}function H(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<I(e,b))a[d]=b,a[c]=e,c=d;else break a}}function J(a){a=a[0];return void 0===a?null:a}\nfunction K(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:N++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","// @flow\n/* eslint-disable flowtype/object-type-delimiter */\n/* eslint-disable react/prop-types */\n\nimport React, { type Element } from 'react';\nimport { IS_BROWSER, DISABLE_SPEEDY, SC_ATTR, SC_VERSION_ATTR } from '../constants';\nimport StyledError from '../utils/error';\nimport { type ExtractedComp } from '../utils/extractCompsFromCSS';\nimport { splitByRules } from '../utils/stringifyRules';\nimport getNonce from '../utils/nonce';\n\nimport {\n type Names,\n addNameForId,\n resetIdNames,\n hasNameForId,\n stringifyNames,\n cloneNames,\n} from '../utils/styleNames';\n\nimport { sheetForTag, safeInsertRule, deleteRules } from '../utils/insertRuleHelpers';\n\ndeclare var __VERSION__: string;\n\nexport interface Tag<T> {\n // $FlowFixMe: Doesn't seem to accept any combination w/ HTMLStyleElement for some reason\n styleTag: HTMLStyleElement | null;\n /* lists all ids of the tag */\n getIds(): string[];\n /* checks whether `name` is already injected for `id` */\n hasNameForId(id: string, name: string): boolean;\n /* inserts a marker to ensure the id's correct position in the sheet */\n insertMarker(id: string): T;\n /* inserts rules according to the ids markers */\n insertRules(id: string, cssRules: string[], name: ?string): void;\n /* removes all rules belonging to the id, keeping the marker around */\n removeRules(id: string): void;\n css(): string;\n toHTML(additionalAttrs: ?string): string;\n toElement(): Element<*>;\n clone(): Tag<T>;\n /* used in server side rendering to indicate that the rules in the tag have been flushed to HTML */\n sealed: boolean;\n}\n\n/* this marker separates component styles and is important for rehydration */\nconst makeTextMarker = id => `\\n/* sc-component-id: ${id} */\\n`;\n\n/* add up all numbers in array up until and including the index */\nconst addUpUntilIndex = (sizes: number[], index: number): number => {\n let totalUpToIndex = 0;\n for (let i = 0; i <= index; i += 1) {\n totalUpToIndex += sizes[i];\n }\n\n return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nconst makeStyleTag = (target: ?HTMLElement, tagEl: ?Node, insertBefore: ?boolean) => {\n let targetDocument = document;\n if(target) targetDocument = target.ownerDocument;\n else if(tagEl) targetDocument = tagEl.ownerDocument;\n\n const el = targetDocument.createElement('style');\n el.setAttribute(SC_ATTR, '');\n el.setAttribute(SC_VERSION_ATTR, __VERSION__);\n\n const nonce = getNonce();\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n\n /* Work around insertRule quirk in EdgeHTML */\n el.appendChild(targetDocument.createTextNode(''));\n\n if (target && !tagEl) {\n /* Append to target when no previous element was passed */\n target.appendChild(el);\n } else {\n if (!tagEl || !target || !tagEl.parentNode) {\n throw new StyledError(6);\n }\n\n /* Insert new style tag after the previous one */\n tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n }\n\n return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nconst wrapAsHtmlTag = (css: () => string, names: Names) => (additionalAttrs: ?string): string => {\n const nonce = getNonce();\n const attrs = [\n nonce && `nonce=\"${nonce}\"`,\n `${SC_ATTR}=\"${stringifyNames(names)}\"`,\n `${SC_VERSION_ATTR}=\"${__VERSION__}\"`,\n additionalAttrs,\n ];\n\n const htmlAttr = attrs.filter(Boolean).join(' ');\n return `<style ${htmlAttr}>${css()}</style>`;\n};\n\n/* takes a css factory function and outputs an element factory */\nconst wrapAsElement = (css: () => string, names: Names) => () => {\n const props = {\n [SC_ATTR]: stringifyNames(names),\n [SC_VERSION_ATTR]: __VERSION__,\n };\n\n const nonce = getNonce();\n if (nonce) {\n // $FlowFixMe\n props.nonce = nonce;\n }\n\n // eslint-disable-next-line react/no-danger\n return <style {...props} dangerouslySetInnerHTML={{ __html: css() }} />;\n};\n\nconst getIdsFromMarkersFactory = (markers: Object) => (): string[] => Object.keys(markers);\n\n/* speedy tags utilise insertRule */\nconst makeSpeedyTag = (el: HTMLStyleElement, getImportRuleTag: ?() => Tag<any>): Tag<number> => {\n const names: Names = (Object.create(null): Object);\n const markers = Object.create(null);\n const sizes: number[] = [];\n\n const extractImport = getImportRuleTag !== undefined;\n /* indicates whether getImportRuleTag was called */\n let usedImportRuleTag = false;\n\n const insertMarker = id => {\n const prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n markers[id] = sizes.length;\n sizes.push(0);\n resetIdNames(names, id);\n\n return markers[id];\n };\n\n const insertRules = (id, cssRules, name) => {\n const marker = insertMarker(id);\n const sheet = sheetForTag(el);\n const insertIndex = addUpUntilIndex(sizes, marker);\n\n let injectedRules = 0;\n const importRules = [];\n const cssRulesSize = cssRules.length;\n\n for (let i = 0; i < cssRulesSize; i += 1) {\n const cssRule = cssRules[i];\n let mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n importRules.push(cssRule);\n } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n mayHaveImport = false;\n injectedRules += 1;\n }\n }\n\n if (extractImport && importRules.length > 0) {\n usedImportRuleTag = true;\n // $FlowFixMe\n getImportRuleTag().insertRules(`${id}-import`, importRules);\n }\n\n sizes[marker] += injectedRules; /* add up no of injected rules */\n addNameForId(names, id, name);\n };\n\n const removeRules = id => {\n const marker = markers[id];\n if (marker === undefined) return;\n // $FlowFixMe\n if (el.isConnected === false) return;\n\n const size = sizes[marker];\n const sheet = sheetForTag(el);\n const removalIndex = addUpUntilIndex(sizes, marker) - 1;\n deleteRules(sheet, removalIndex, size);\n sizes[marker] = 0;\n resetIdNames(names, id);\n\n if (extractImport && usedImportRuleTag) {\n // $FlowFixMe\n getImportRuleTag().removeRules(`${id}-import`);\n }\n };\n\n const css = () => {\n const { cssRules } = sheetForTag(el);\n let str = '';\n\n // eslint-disable-next-line guard-for-in\n for (const id in markers) {\n str += makeTextMarker(id);\n const marker = markers[id];\n const end = addUpUntilIndex(sizes, marker);\n const size = sizes[marker];\n for (let i = end - size; i < end; i += 1) {\n const rule = cssRules[i];\n if (rule !== undefined) {\n str += rule.cssText;\n }\n }\n }\n\n return str;\n };\n\n return {\n clone() {\n throw new StyledError(5);\n },\n css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker,\n insertRules,\n removeRules,\n sealed: false,\n styleTag: el,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names),\n };\n};\n\nconst makeTextNode = (targetDocument, id) => targetDocument.createTextNode(makeTextMarker(id));\n\nconst makeBrowserTag = (el: HTMLStyleElement, getImportRuleTag: ?() => Tag<any>): Tag<Text> => {\n const names = (Object.create(null): Object);\n const markers = Object.create(null);\n\n const extractImport = getImportRuleTag !== undefined;\n\n /* indicates whether getImportRuleTag was called */\n let usedImportRuleTag = false;\n\n const insertMarker = id => {\n const prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n markers[id] = makeTextNode(el.ownerDocument, id);\n el.appendChild(markers[id]);\n names[id] = Object.create(null);\n\n return markers[id];\n };\n\n const insertRules = (id, cssRules, name) => {\n const marker = insertMarker(id);\n const importRules = [];\n const cssRulesSize = cssRules.length;\n\n for (let i = 0; i < cssRulesSize; i += 1) {\n const rule = cssRules[i];\n let mayHaveImport = extractImport;\n if (mayHaveImport && rule.indexOf('@import') !== -1) {\n importRules.push(rule);\n } else {\n mayHaveImport = false;\n const separator = i === cssRulesSize - 1 ? '' : ' ';\n marker.appendData(`${rule}${separator}`);\n }\n }\n\n addNameForId(names, id, name);\n\n if (extractImport && importRules.length > 0) {\n usedImportRuleTag = true;\n // $FlowFixMe\n getImportRuleTag().insertRules(`${id}-import`, importRules);\n }\n };\n\n const removeRules = id => {\n const marker = markers[id];\n if (marker === undefined) return;\n\n /* create new empty text node and replace the current one */\n const newMarker = makeTextNode(el.ownerDocument, id);\n el.replaceChild(newMarker, marker);\n markers[id] = newMarker;\n resetIdNames(names, id);\n\n if (extractImport && usedImportRuleTag) {\n // $FlowFixMe\n getImportRuleTag().removeRules(`${id}-import`);\n }\n };\n\n const css = () => {\n let str = '';\n\n // eslint-disable-next-line guard-for-in\n for (const id in markers) {\n str += markers[id].data;\n }\n\n return str;\n };\n\n return {\n clone() {\n throw new StyledError(5);\n },\n css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker,\n insertRules,\n removeRules,\n sealed: false,\n styleTag: el,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names),\n };\n};\n\nconst makeServerTag = (namesArg, markersArg): Tag<[string]> => {\n const names = namesArg === undefined ? (Object.create(null): Object) : namesArg;\n const markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n const insertMarker = id => {\n const prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n return (markers[id] = ['']);\n };\n\n const insertRules = (id, cssRules, name) => {\n const marker = insertMarker(id);\n marker[0] += cssRules.join(' ');\n addNameForId(names, id, name);\n };\n\n const removeRules = id => {\n const marker = markers[id];\n if (marker === undefined) return;\n marker[0] = '';\n resetIdNames(names, id);\n };\n\n const css = () => {\n let str = '';\n // eslint-disable-next-line guard-for-in\n for (const id in markers) {\n const cssForId = markers[id][0];\n if (cssForId) {\n str += makeTextMarker(id) + cssForId;\n }\n }\n return str;\n };\n\n const clone = () => {\n const namesClone = cloneNames(names);\n const markersClone = Object.create(null);\n\n // eslint-disable-next-line guard-for-in\n for (const id in markers) {\n markersClone[id] = [markers[id][0]];\n }\n\n return makeServerTag(namesClone, markersClone);\n };\n\n const tag = {\n clone,\n css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker,\n insertRules,\n removeRules,\n sealed: false,\n styleTag: null,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names),\n };\n\n return tag;\n};\n\nexport const makeTag = (\n target: ?HTMLElement,\n tagEl: ?HTMLStyleElement,\n forceServer?: boolean,\n insertBefore?: boolean,\n getImportRuleTag?: () => Tag<any>\n): Tag<any> => {\n if (IS_BROWSER && !forceServer) {\n const el = makeStyleTag(target, tagEl, insertBefore);\n\n if (DISABLE_SPEEDY) {\n return makeBrowserTag(el, getImportRuleTag);\n } else {\n return makeSpeedyTag(el, getImportRuleTag);\n }\n }\n\n return makeServerTag();\n};\n\nexport const rehydrate = (\n tag: Tag<any>,\n els: HTMLStyleElement[],\n extracted: ExtractedComp[]\n): void => {\n /* add all extracted components to the new tag */\n for (let i = 0, len = extracted.length; i < len; i += 1) {\n const { componentId, cssFromDOM } = extracted[i];\n const cssRules = splitByRules(cssFromDOM);\n tag.insertRules(componentId, cssRules);\n }\n\n /* remove old HTMLStyleElements, since they have been rehydrated */\n for (let i = 0, len = els.length; i < len; i += 1) {\n const el = els[i];\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n }\n};\n","// @flow\nimport React, { createContext, Component, type Element } from 'react';\nimport memoize from 'memoize-one';\nimport StyledError from '../utils/error';\nimport isFunction from '../utils/isFunction';\n\nexport type Theme = { [key: string]: mixed };\n\ntype Props = {\n children?: Element<any>,\n theme: Theme | ((outerTheme: Theme) => void),\n};\n\nexport const ThemeContext = createContext();\n\nexport const ThemeConsumer = ThemeContext.Consumer;\n\n/**\n * Provide a theme to an entire react component tree via context\n */\nexport default class ThemeProvider extends Component<Props> {\n getContext: (theme: Theme | ((outerTheme: Theme) => void), outerTheme?: Theme) => Theme;\n\n renderInner: Function;\n\n constructor(props: Props) {\n super(props);\n this.getContext = memoize(this.getContext.bind(this));\n this.renderInner = this.renderInner.bind(this);\n }\n\n render() {\n if (!this.props.children) return null;\n\n return <ThemeContext.Consumer>{this.renderInner}</ThemeContext.Consumer>;\n }\n\n renderInner(outerTheme?: Theme) {\n const context = this.getContext(this.props.theme, outerTheme);\n\n return (\n <ThemeContext.Provider value={context}>\n {this.props.children}\n </ThemeContext.Provider>\n );\n }\n\n /**\n * Get the theme from the props, supporting both (outerTheme) => {}\n * as well as object notation\n */\n getTheme(theme: (outerTheme: ?Theme) => void, outerTheme: ?Theme) {\n if (isFunction(theme)) {\n const mergedTheme = theme(outerTheme);\n\n if (\n process.env.NODE_ENV !== 'production' &&\n (mergedTheme === null || Array.isArray(mergedTheme) || typeof mergedTheme !== 'object')\n ) {\n throw new StyledError(7);\n }\n\n return mergedTheme;\n }\n\n if (theme === null || Array.isArray(theme) || typeof theme !== 'object') {\n throw new StyledError(8);\n }\n\n return { ...outerTheme, ...theme };\n }\n\n getContext(theme: (outerTheme: ?Theme) => void, outerTheme?: Theme) {\n return this.getTheme(theme, outerTheme);\n }\n}\n","// @flow\nimport { EMPTY_ARRAY } from '../utils/empties';\nimport flatten from '../utils/flatten';\nimport isStaticRules from '../utils/isStaticRules';\nimport stringifyRules from '../utils/stringifyRules';\nimport StyleSheet from './StyleSheet';\n\nimport type { RuleSet } from '../types';\n\nexport default class GlobalStyle {\n componentId: string;\n\n isStatic: boolean;\n\n rules: RuleSet;\n\n constructor(rules: RuleSet, componentId: string) {\n this.rules = rules;\n this.componentId = componentId;\n this.isStatic = isStaticRules(rules, EMPTY_ARRAY);\n\n if (!StyleSheet.master.hasId(componentId)) {\n StyleSheet.master.deferredInject(componentId, []);\n }\n }\n\n createStyles(executionContext: Object, styleSheet: StyleSheet) {\n const flatCSS = flatten(this.rules, executionContext, styleSheet);\n const css = stringifyRules(flatCSS, '');\n\n styleSheet.inject(this.componentId, css);\n }\n\n removeStyles(styleSheet: StyleSheet) {\n const { componentId } = this;\n if (styleSheet.hasId(componentId)) {\n styleSheet.remove(componentId);\n }\n }\n\n // TODO: overwrite in-place instead of remove+create?\n renderStyles(executionContext: Object, styleSheet: StyleSheet) {\n this.removeStyles(styleSheet);\n this.createStyles(executionContext, styleSheet);\n }\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","export default function capitalizeString(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}","import capitalizeString from './capitalizeString';\n\n\nexport default function prefixProperty(prefixProperties, property, style) {\n if (prefixProperties.hasOwnProperty(property)) {\n var newStyle = {};\n var requiredPrefixes = prefixProperties[property];\n var capitalizedProperty = capitalizeString(property);\n var keys = Object.keys(style);\n for (var i = 0; i < keys.length; i++) {\n var styleProperty = keys[i];\n if (styleProperty === property) {\n for (var j = 0; j < requiredPrefixes.length; j++) {\n newStyle[requiredPrefixes[j] + capitalizedProperty] = style[property];\n }\n }\n newStyle[styleProperty] = style[styleProperty];\n }\n return newStyle;\n }\n return style;\n}","export default function prefixValue(plugins, property, value, style, metaData) {\n for (var i = 0, len = plugins.length; i < len; ++i) {\n var processedValue = plugins[i](property, value, style, metaData);\n\n // we can stop processing if a value is returned\n // as all plugin criteria are unique\n if (processedValue) {\n return processedValue;\n }\n }\n}","function addIfNew(list, value) {\n if (list.indexOf(value) === -1) {\n list.push(value);\n }\n}\n\nexport default function addNewValuesOnly(list, values) {\n if (Array.isArray(values)) {\n for (var i = 0, len = values.length; i < len; ++i) {\n addIfNew(list, values[i]);\n }\n } else {\n addIfNew(list, values);\n }\n}","export default function isObject(value) {\n return value instanceof Object && !Array.isArray(value);\n}","import prefixProperty from './utils/prefixProperty';\nimport prefixValue from './utils/prefixValue';\n\nimport addNewValuesOnly from './utils/addNewValuesOnly';\nimport isObject from './utils/isObject';\n\nexport default function createPrefixer(_ref) {\n var prefixMap = _ref.prefixMap,\n plugins = _ref.plugins;\n\n return function prefix(style) {\n for (var property in style) {\n var value = style[property];\n\n // handle nested objects\n if (isObject(value)) {\n style[property] = prefix(value);\n // handle array values\n } else if (Array.isArray(value)) {\n var combinedValue = [];\n\n for (var i = 0, len = value.length; i < len; ++i) {\n var processedValue = prefixValue(plugins, property, value[i], style, prefixMap);\n addNewValuesOnly(combinedValue, processedValue || value[i]);\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue;\n }\n } else {\n var _processedValue = prefixValue(plugins, property, value, style, prefixMap);\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (_processedValue) {\n style[property] = _processedValue;\n }\n\n style = prefixProperty(prefixMap, property, style);\n }\n }\n\n return style;\n };\n}","\nvar w = [\"Webkit\"];\nvar m = [\"Moz\"];\nvar ms = [\"ms\"];\nvar wm = [\"Webkit\", \"Moz\"];\nvar wms = [\"Webkit\", \"ms\"];\nvar wmms = [\"Webkit\", \"Moz\", \"ms\"];\n\nexport default {\n plugins: [],\n prefixMap: { \"appearance\": wm, \"textEmphasisPosition\": w, \"textEmphasis\": w, \"textEmphasisStyle\": w, \"textEmphasisColor\": w, \"boxDecorationBreak\": w, \"maskImage\": w, \"maskMode\": w, \"maskRepeat\": w, \"maskPosition\": w, \"maskClip\": w, \"maskOrigin\": w, \"maskSize\": w, \"maskComposite\": w, \"mask\": w, \"maskBorderSource\": w, \"maskBorderMode\": w, \"maskBorderSlice\": w, \"maskBorderWidth\": w, \"maskBorderOutset\": w, \"maskBorderRepeat\": w, \"maskBorder\": w, \"maskType\": w, \"textDecorationStyle\": w, \"textDecorationSkip\": w, \"textDecorationLine\": w, \"textDecorationColor\": w, \"userSelect\": wmms, \"backdropFilter\": w, \"fontKerning\": w, \"scrollSnapType\": wms, \"scrollSnapPointsX\": wms, \"scrollSnapPointsY\": wms, \"scrollSnapDestination\": wms, \"scrollSnapCoordinate\": wms, \"clipPath\": w, \"shapeImageThreshold\": w, \"shapeImageMargin\": w, \"shapeImageOutside\": w, \"filter\": w, \"hyphens\": wms, \"flowInto\": wms, \"flowFrom\": wms, \"breakBefore\": wms, \"breakAfter\": wms, \"breakInside\": wms, \"regionFragment\": wms, \"writingMode\": w, \"textOrientation\": w, \"tabSize\": m, \"fontFeatureSettings\": w, \"columnCount\": w, \"columnFill\": w, \"columnGap\": w, \"columnRule\": w, \"columnRuleColor\": w, \"columnRuleStyle\": w, \"columnRuleWidth\": w, \"columns\": w, \"columnSpan\": w, \"columnWidth\": w, \"wrapFlow\": ms, \"wrapThrough\": ms, \"wrapMargin\": ms, \"textSizeAdjust\": w }\n};","var prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n};\n\nexport default function cursor(property, value) {\n if (property === 'cursor' && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","import isPrefixedValue from 'css-in-js-utils/lib/isPrefixedValue';\n\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\n\nexport default function crossFade(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/cross-fade\\(/g, prefix + 'cross-fade(');\n });\n }\n}","import isPrefixedValue from 'css-in-js-utils/lib/isPrefixedValue';\n\n// http://caniuse.com/#feat=css-filter-function\nvar prefixes = ['-webkit-', ''];\n\nexport default function filter(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/filter\\(/g, prefix + 'filter(');\n });\n }\n}","var values = {\n flex: ['-webkit-box', '-moz-box', '-ms-flexbox', '-webkit-flex', 'flex'],\n 'inline-flex': ['-webkit-inline-box', '-moz-inline-box', '-ms-inline-flexbox', '-webkit-inline-flex', 'inline-flex']\n};\n\nexport default function flex(property, value) {\n if (property === 'display' && values.hasOwnProperty(value)) {\n return values[value];\n }\n}","var alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n};\n\nvar alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines',\n flexGrow: 'WebkitBoxFlex'\n};\n\nexport default function flexboxOld(property, value, style) {\n if (property === 'flexDirection' && typeof value === 'string') {\n if (value.indexOf('column') > -1) {\n style.WebkitBoxOrient = 'vertical';\n } else {\n style.WebkitBoxOrient = 'horizontal';\n }\n if (value.indexOf('reverse') > -1) {\n style.WebkitBoxDirection = 'reverse';\n } else {\n style.WebkitBoxDirection = 'normal';\n }\n }\n if (alternativeProps.hasOwnProperty(property)) {\n style[alternativeProps[property]] = alternativeValues[value] || value;\n }\n}","import isPrefixedValue from 'css-in-js-utils/lib/isPrefixedValue';\n\nvar prefixes = ['-webkit-', '-moz-', ''];\nvar values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/gi;\n\nexport default function gradient(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && values.test(value)) {\n return prefixes.map(function (prefix) {\n return value.replace(values, function (grad) {\n return prefix + grad;\n });\n });\n }\n}","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction isSimplePositionValue(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\nfunction isComplexSpanValue(value) {\n return typeof value === 'string' && value.includes('/');\n}\n\nvar alignmentValues = ['center', 'end', 'start', 'stretch'];\n\nvar displayValues = {\n 'inline-grid': ['-ms-inline-grid', 'inline-grid'],\n grid: ['-ms-grid', 'grid']\n};\n\nvar propertyConverters = {\n alignSelf: function alignSelf(value, style) {\n if (alignmentValues.indexOf(value) > -1) {\n style.msGridRowAlign = value;\n }\n },\n\n gridColumn: function gridColumn(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridColumn = value;\n } else if (isComplexSpanValue(value)) {\n var _value$split = value.split('/'),\n _value$split2 = _slicedToArray(_value$split, 2),\n start = _value$split2[0],\n end = _value$split2[1];\n\n propertyConverters.gridColumnStart(+start, style);\n\n var _end$split = end.split(/ ?span /),\n _end$split2 = _slicedToArray(_end$split, 2),\n maybeSpan = _end$split2[0],\n maybeNumber = _end$split2[1];\n\n if (maybeSpan === '') {\n propertyConverters.gridColumnEnd(+start + +maybeNumber, style);\n } else {\n propertyConverters.gridColumnEnd(+end, style);\n }\n } else {\n propertyConverters.gridColumnStart(value, style);\n }\n },\n\n gridColumnEnd: function gridColumnEnd(value, style) {\n var msGridColumn = style.msGridColumn;\n\n if (isSimplePositionValue(value) && isSimplePositionValue(msGridColumn)) {\n style.msGridColumnSpan = value - msGridColumn;\n }\n },\n\n gridColumnStart: function gridColumnStart(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridColumn = value;\n }\n },\n\n gridRow: function gridRow(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridRow = value;\n } else if (isComplexSpanValue(value)) {\n var _value$split3 = value.split('/'),\n _value$split4 = _slicedToArray(_value$split3, 2),\n start = _value$split4[0],\n end = _value$split4[1];\n\n propertyConverters.gridRowStart(+start, style);\n\n var _end$split3 = end.split(/ ?span /),\n _end$split4 = _slicedToArray(_end$split3, 2),\n maybeSpan = _end$split4[0],\n maybeNumber = _end$split4[1];\n\n if (maybeSpan === '') {\n propertyConverters.gridRowEnd(+start + +maybeNumber, style);\n } else {\n propertyConverters.gridRowEnd(+end, style);\n }\n } else {\n propertyConverters.gridRowStart(value, style);\n }\n },\n\n gridRowEnd: function gridRowEnd(value, style) {\n var msGridRow = style.msGridRow;\n\n if (isSimplePositionValue(value) && isSimplePositionValue(msGridRow)) {\n style.msGridRowSpan = value - msGridRow;\n }\n },\n\n gridRowStart: function gridRowStart(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridRow = value;\n }\n },\n\n gridTemplateColumns: function gridTemplateColumns(value, style) {\n style.msGridColumns = value;\n },\n\n gridTemplateRows: function gridTemplateRows(value, style) {\n style.msGridRows = value;\n },\n\n justifySelf: function justifySelf(value, style) {\n if (alignmentValues.indexOf(value) > -1) {\n style.msGridColumnAlign = value;\n }\n }\n};\n\nexport default function grid(property, value, style) {\n if (property === 'display' && value in displayValues) {\n return displayValues[value];\n }\n\n if (property in propertyConverters) {\n var propertyConverter = propertyConverters[property];\n propertyConverter(value, style);\n }\n}","import isPrefixedValue from 'css-in-js-utils/lib/isPrefixedValue';\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\n\nexport default function imageSet(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/image-set\\(/g, prefix + 'image-set(');\n });\n }\n}","var alternativeProps = {\n marginBlockStart: ['WebkitMarginBefore'],\n marginBlockEnd: ['WebkitMarginAfter'],\n marginInlineStart: ['WebkitMarginStart', 'MozMarginStart'],\n marginInlineEnd: ['WebkitMarginEnd', 'MozMarginEnd'],\n paddingBlockStart: ['WebkitPaddingBefore'],\n paddingBlockEnd: ['WebkitPaddingAfter'],\n paddingInlineStart: ['WebkitPaddingStart', 'MozPaddingStart'],\n paddingInlineEnd: ['WebkitPaddingEnd', 'MozPaddingEnd'],\n borderBlockStart: ['WebkitBorderBefore'],\n borderBlockStartColor: ['WebkitBorderBeforeColor'],\n borderBlockStartStyle: ['WebkitBorderBeforeStyle'],\n borderBlockStartWidth: ['WebkitBorderBeforeWidth'],\n borderBlockEnd: ['WebkitBorderAfter'],\n borderBlockEndColor: ['WebkitBorderAfterColor'],\n borderBlockEndStyle: ['WebkitBorderAfterStyle'],\n borderBlockEndWidth: ['WebkitBorderAfterWidth'],\n borderInlineStart: ['WebkitBorderStart', 'MozBorderStart'],\n borderInlineStartColor: ['WebkitBorderStartColor', 'MozBorderStartColor'],\n borderInlineStartStyle: ['WebkitBorderStartStyle', 'MozBorderStartStyle'],\n borderInlineStartWidth: ['WebkitBorderStartWidth', 'MozBorderStartWidth'],\n borderInlineEnd: ['WebkitBorderEnd', 'MozBorderEnd'],\n borderInlineEndColor: ['WebkitBorderEndColor', 'MozBorderEndColor'],\n borderInlineEndStyle: ['WebkitBorderEndStyle', 'MozBorderEndStyle'],\n borderInlineEndWidth: ['WebkitBorderEndWidth', 'MozBorderEndWidth']\n};\n\nexport default function logical(property, value, style) {\n if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n var alternativePropList = alternativeProps[property];\n for (var i = 0, len = alternativePropList.length; i < len; ++i) {\n style[alternativePropList[i]] = value;\n }\n }\n}","var prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n};\nvar values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n};\n\nexport default function sizing(property, value) {\n if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","import hyphenateProperty from 'css-in-js-utils/lib/hyphenateProperty';\nimport isPrefixedValue from 'css-in-js-utils/lib/isPrefixedValue';\n\nimport capitalizeString from '../utils/capitalizeString';\n\nvar properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n};\n\nvar prefixMapping = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n if (isPrefixedValue(value)) {\n return value;\n }\n\n // only split multi values, not cubic beziers\n var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n for (var i = 0, len = multipleValues.length; i < len; ++i) {\n var singleValue = multipleValues[i];\n var values = [singleValue];\n for (var property in propertyPrefixMap) {\n var dashCaseProperty = hyphenateProperty(property);\n\n if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n var prefixes = propertyPrefixMap[property];\n for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n // join all prefixes and create a new value\n values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n }\n }\n }\n\n multipleValues[i] = values.join(',');\n }\n\n return multipleValues.join(',');\n}\n\nexport default function transition(property, value, style, propertyPrefixMap) {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n var outputValue = prefixValue(value, propertyPrefixMap);\n // if the property is already prefixed\n var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-moz-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Webkit') > -1) {\n return webkitOutput;\n }\n\n var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-webkit-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Moz') > -1) {\n return mozOutput;\n }\n\n style['Webkit' + capitalizeString(property)] = webkitOutput;\n style['Moz' + capitalizeString(property)] = mozOutput;\n return outputValue;\n }\n}","import createPrefixer from './createPrefixer';\n\nimport data from './data';\n\nimport backgroundClip from './plugins/backgroundClip';\nimport cursor from './plugins/cursor';\nimport crossFade from './plugins/crossFade';\nimport filter from './plugins/filter';\nimport flex from './plugins/flex';\nimport flexboxOld from './plugins/flexboxOld';\nimport gradient from './plugins/gradient';\nimport grid from './plugins/grid';\nimport imageSet from './plugins/imageSet';\nimport logical from './plugins/logical';\nimport position from './plugins/position';\nimport sizing from './plugins/sizing';\nimport transition from './plugins/transition';\n\nvar plugins = [backgroundClip, crossFade, cursor, filter, flexboxOld, gradient, grid, imageSet, logical, position, sizing, transition, flex];\n\nvar prefix = createPrefixer({\n prefixMap: data.prefixMap,\n plugins: plugins\n});\n\nexport { createPrefixer, prefix };","\n// https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip#Browser_compatibility\nexport default function backgroundClip(property, value) {\n if (typeof value === 'string' && value === 'text') {\n return ['-webkit-text', 'text'];\n }\n}","export default function position(property, value) {\n if (property === 'position' && value === 'sticky') {\n return ['-webkit-sticky', 'sticky'];\n }\n}"],"sourceRoot":""} |